通过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?