通過DB2聯邦訪問Oracle
1.查看OS和DB的版本
OS版本:
C:\Users\Administrator>ver
Microsoft Windows [版本 6.1.7601]
Oracle版本:
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
DB2版本:
C:\Users\Administrator>db2level
DB21085I 執行個體 "DB2" 使用 "32" 位和 DB2 代碼發行版 "SQL09076",層級標識為
"08070107"。
參考標記為 "DB2 v9.7.600.413"、"s120516" 和 "IP23322",修訂包為 "6"。
產品使用 DB2 副本名 "DB2COPY1" 安裝在 "C:\PROGRA~2\IBM\SQLLIB" 中。
2.配置DB2安裝目錄下的sqllib/cfg/db2dj.ini檔案,增加如下ORACLE環境變數:
ORACLE_HOME=D:\app\Administrator\product\11.2.0\dbhome_1
ORACLE_BASE=E:\app\Administrator
ORA_NLS33=D:\app\Administrator\product\11.2.0\dbhome_1\nls\data
TNS_ADMIN=D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
NLS_LANG=american_CHINA.ZHS16GBK
3.修改 DBM參數FEDERATED為YES支援聯邦
C:\>db2 update dbm cfg using FEDERATED YES
DB20000I UPDATE DATABASE MANAGER CONFIGURATION 命令成功完成。
SQL1362W 未動態更改為立即修改而提交的一個或多個參數。直到下次啟動應用程式或發出
TERMINATE 命令之後,客戶機更改才會生效。直到下一條 DB2START
命令之後,伺服器更改才會生效。
C:\>db2 terminate
DB20000I TERMINATE 命令成功完成。
4.建立測試DB,我就不建了
5.註冊oracle封裝器
C:\>db2 disconnect all
DB20000I SQL DISCONNECT 命令成功完成。
C:\>db2stop
SQL1064N DB2STOP 處理成功。
C:\>db2admin stop
SQL4407W 已成功停止“DB2 管理伺服器”。
C:\>db2admin start
SQL4406W 已成功啟動 DB2 管理伺服器。
C:\>db2start
SQL1063N DB2START 處理成功。
C:\>db2 create wrapper net8
DB20000I SQL 命令成功完成。
或者如下建立也是可以的。
C:\>db2 create wrapper net8 LIBRARY 'C:\Program Files (x86)\IBM\SQLLIB\BIN\db2net8.dll'
DB20000I SQL 命令成功完成。
DB2官方文檔有明確說明,聯邦訪問oracle必須使用net8,因為有對應的db2net8.dll檔案支援,db2drda.ddl也是如此。
官方解釋如下:
Register the NET8 wrapper on a federated server to access Oracle data sources. NET8 is the predefined name for the wrapper that you can use to access Oracle data sources.
6.為oracle資料來源註冊伺服器定義
C:\>db2 create server f_oracle type oracle version 11.2.0.3 wrapper net8 options(node 'orcl')
DB21034E 該命令被當作 SQL 陳述式來處理,因為它是無效的“命令列處理器”命令。在
SQL 處理期間,它返回:
SQL0103N 數字文字 "11.2.0.3" 無效。 SQLSTATE=42604
C:\>db2 create server f_oracle type oracle version 11.2.0 wrapper net8 options(node 'orcl')
DB20000I SQL 命令成功完成。
7.為oracle資料來源建立使用者映射:
C:\>db2 create user mapping for db2admin Server f_oracle options(remote_authid 'lyn',remote_password 'lyn')
DB20000I SQL 命令成功完成。
8.建立使用者暱稱並測試
C:\>db2 create nickname nk_orcl for f_oracle.sys.all_users
DB20000I SQL 命令成功完成。
C:\>db2 select count(*) from nk_orcl
1
-----------
31
1 條記錄已選擇。
C:\>db2 select count(*) from sys.all_users
COUNT(*)
------------------------
+3.10000000000000E+001
1 條記錄已選擇。
疑問:是不是每訪問Oracle使用者lyn下的一個表就得建立一個nickname?