標籤:
自己的本機安裝了Oracle 12c,公司的平台需要同時支援Oracle與SQL Server,很多時候都有將資料從Oracle同步到SQL Server的需求。通過SQL Server的link Server可以達到目的,但是因為SQL Server都是64位版本,試過很多次都失敗了。再安裝32位SQL Server也懶得折騰。
因Oracle是12c, 安裝的Gateways也是12c。嘗試過在Oracle資料庫伺服器(本機)安裝11g的gateways, 但是配置都失敗了。
Oracle Gateways 12c的也在Oracle Database 12c的下載頁。找到與自己資料庫版本的對應的Gateways。
安裝前,設定了一下環境變數ORACLE_HOME,我的是:C:\oracle\product\12.1.0\dbhome_1
安裝時,選擇自己需要訪問的資料庫,這裡是SQL Server.這裡將Gateways安裝到了與Oracle資料庫軟體相同的目錄。
安裝過程:
配置是重點。網上找到的都是10g的配置。12c的目錄名稱與10g的稍有區別:
listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oracle\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\oracle\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
(SID_DESC =
(SID_NAME = dg4msql)
(ORACLE_HOME = C:\oracle\product\12.1.0\dbhome_1)
(PROGRAM = dg4msql)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
在tnsnames.ora添加以下內容:
dg4msql =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SID = dg4msql)
)
(HS = OK)
)
在ORACLE_HOME/dg4msql/admin/initdg4msql.ora
確認檔案initdg4msql.ora中有以下內容():
HS_FDS_CONNECT_INFO=server name,port number//database name
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
建立一個DB Link:
create public database link MS_LINK
connect to sa identified by password
using ‘dg4msql‘;
重啟監聽。
使用select * from [email protected]_link的形式訪問SQL Server表。不可以直接使用insert into [email protected]_link select * from table向SQL Server表插入資料。錯誤提示是源表與目標表都應在同一個資料庫。
我的解決方案是使用一段匿名指令碼一次一條資料。不知道有沒有更好的辦法。
至此,已經可以成功在Oracle資料庫中訪問SQL Server的資料了。
FROM: http://blog.itpub.net/8520577/viewspace-1066213/
Oracle Gateways透明網關訪問SQL Server