Oracle通過ODBC數據源連接SQL Server數據庫


轉載自:https://www.cnblogs.com/jijm123/p/11598515.html   寫的很詳細,收益匪淺    

應用場景:

    項目系統使用oracle數據庫,但是很多歷史數據存儲在Sqlserver數據庫中

    我的測試開發環境為64bitwin7PC機,本機上裝有64位Oracle11g和32位Oracle11g;

    本文以32位Oracle為例,通過配置ODBC數據源連接虛擬機上的Sql Server;

第一步、創建ODBC數據源

 

 

這一步要考慮數據源是32位還是64位的問題,其實就是選擇不同的exe打開上面的界面,

win764位操作系統的64-bit ODBC 默認的位置:

C:\Windows\System32\odbcad32.exe

win764位操作系統的32-bit ODBC 默認的位置:

C:\Windows\SysWOW64\odbcad32.exe

添加數據源:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

測試通過代表數據源配置成功

第二步、檢查DG4ODBC驅動是否已經安裝

方法如下:

在Oracle服務器上,cmd窗口中執行命令(dg4odbc或hsodbc)

 

 

上圖代表安裝了DG4ODBC驅動(如果沒有安裝,需自行下載安裝,此處不介紹具體操作)

 

第三步、配置hsodbc

 

 此目錄下默認存在initdg4odbc.ora,復制這個文件,粘貼到上圖目錄中,並將后復制的文件改名為initodbc_test.ora,用記事本打開就該配置並保存如下圖

 

 

注:每個使用DG4ODBC的實例,都必須單獨一個"init*.ora"文件,文件命名規則:init+<網關sid>+.ora


HS_FDS_CONNECT_INFO = ODBC數據源管理中的DSN名稱【本實驗為testodbc】

HS_FDS_TRACE_LEVEL = OFF 【追蹤級別參數,出於性能影響一般不配置或者配置為"OFF",若遇到網關問題需要跟蹤日志,

則配置為"Debug",跟蹤日志文件存放在"ORACLE_HOME\hs\trace"目錄下】

第四步、配置lisenter(服務端透明網關監聽)

 

 

 

 

第五步、重啟監聽

在命令提示符窗口依次輸入如下命令

 

停止監聽:lsnrctl stop

啟動監聽:lsnrctl start

一般停止監聽沒有問題,但是如果啟動不了監聽(啟動監聽服務失敗),多半說明第四部字符串配置有錯誤,注意檢查。

第六步、配置TNS(客戶端服務命名)

 

 

 

 第七步、創建oracle的DBLINK

 

在PLsql中或者sqlplus和環境下運行上述sql命令創建DataBase Link

第八步、訪問測試

 

 

 

擴展:

(1) 、六、七兩步可以合並,直接創建dblink

復制代碼
create public database link test_sql connect to "sqlserver用戶名" identified by "sqlserver密碼" using '(description=
        (address= (protocol=tcp)(host=xxx.xxx.xxx.xxx)(port=1521))
        (connect_data=(SID=SID名稱))
        (HS=OK)
)';
復制代碼

注意:采用上面的合並方式,則不受tnsnames.ora配置文件的限制,推薦使用,推薦是因為,tnsnames.ora的配置是客戶端的,這樣要求所有客戶端都需要這樣配置第六步,如果采用推薦方式,因為databaselink的配置文件是在服務端的,服務端配置一次,所有客戶端都可以用了。

(2)、如果要把oracle這邊的時間類型插到SQLserver類型為datatime的字段中,需要采用to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')的方式,就是轉成字符串;

(3)、不僅僅可以連接SQL Server,其他類型ODBC數據源也可以,如mysql等;

(4)、如果32位應用環境,配置ODBC數據源的時候也必須配置32ODBC數據源,否則報錯如下:

[ODBC 驅動程序管理器]在指定的DNS中,驅動程序和應用程序之間的體系結構不匹配{IM014};

(5)、如果報錯找不到ODBC數據源,很可能是以上步驟中數據源名稱錯誤,或者創建的ODBC數據源不是系統DSN,而是錯選了用戶DSN。

如上是我在借鑒搜索引擎上oracle連接odbc數據源的一些文章的過程中個人理解后整理,以作備忘,如有錯誤或不妥歡迎指教。

(6)、上面的步驟配置完,發現可以像使用oracle的表一樣使用,select * from 表名/視圖名@linkname,但是 select id from 表名@linkname 會報id標識符無效,也就是可以用*查詢所有列,但是不能用列名查詢指定列,解決辦法是將列名用雙引號引起來,並且雙引號內列名區分大小寫,如select "id" from 表名/視圖名@linkname where“id”=‘A01’


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM