本文创建的都是DB2的数据库,解决的问题是想在同一个sql里面访问不同数据库中的内容。本文中的不同数据库分布在不同的server。
主server: 192.168.227.99:50000/SAMPLE 用户:db2inst1
远程server: 192.168.227.100:50000/SAMPLE 用户: dsadmin
步骤:
1. 在主server中用db2inst1账户登录
2. 编目远程数据库。
db2 catalog tcpip node train remote 192.168.227.100 server 50000
db2 catalog db sample as trainsample at node train
3. 设置数据库参数FEDERATE为YES
DB2 UPDATE DBM CFG USING FEDERATED YES
4. 重启实例
db2stop, db2start
5. 连接sample数据库
6. 创建包装器
db2 "CREATE WRAPPER DRDA"
7. 创建server
db2 "CREATE SERVER TRAINSAMPLE TYPE DB2/UDB VERSION '9.5' WRAPPER "DRDA" AUTHID "db2admin" PASSWORD "db2admin" OPTIONS( ADD NODE 'TRAIN',ADD DBNAME 'TRAINSAMPLE')"
8. 创建用户映射
db2 "CREATE USER MAPPING FOR "db2inst1" SERVER "TRAINSAMPLE" OPTIONS ( ADD REMOTE_AUTHID 'db2admin', ADD REMOTE_PASSWORD 'db2admin')"
9. 映射远程表到本地数据库(为远程表创建一个昵称)
CREATE NICKNAME DB2INST1.TRAINEMPLOYEE FOR TRAINSAMPLE.DB2ADMIN.EMPLOYEE
其中DB2INST1为模式名, TRAINEMPLOYEE为本地昵称(类似表名), TRAINSAMPLE为之前创建的服务器名, DB2ADMIN是远程数据库表employee的模式名, EMPLOYEE是远程数据库中的表名。
好了,现在用db2 list tables就可以看到映射过来的表了,并且可以做db2admin相应权限的操作。(如查看,插入等)