建立联邦(建立数据库与数据库联系与问题)
有问题可以找小可玩,评论留言。
什么是联邦??建立和另外一个库的关系,换句话说就是我可以在这个库查到另外一个库的表。
本地库连目标数据库
1、登陆本地服务器数据库
切换到对应的用户:su - 本地库用户名
连接本地库:db2 connect to 本地库 user 本地库用户名 using 本地用户密码
2、开启联邦支持
开启联邦支持,查看数据库管理配置文件,FEDERATED属性
db2 get dbm cfg
如联邦属性为NO, 则需开启属性,重启数据库。
1.cd /家/本地库用户名/
2.db2 get dbm cfg | grep -i federated ----查询命令
3.db2 update dbm cfg using federated yes ---重置命令
4.db2stop force
5.db2start
3、编目目标数据库信息(编目数据库名称不能超过8位)
db2 catalog tcpip node 节点名 remote ip地址 server 端口;
db2 catalog db 目标数据库名字 as 取得别名 at node 节点名;
db2 terminate;(一定要提交,当你执行提交的时候就会退出数据库连接,切记!!)
查看是否创建成功
db2 list node directory
db2 list db directory
4、建立联邦:创建Wrapper, Server, Mapping
创建Wrapper(这个联邦N次只需要创建一次)
db2 create wrapper drda
创建Server
命令格式:
db2 "create server 自定义服务器名字 type DB2/UDB version 9.7 wrapper "DRDA" authorization 对方用户 password 对方密码 options (NODE 'node_name',dbname '对方数据库')"
db2 "create server EDWSVR type DB2/UDB version 9.7 wrapper "drda" authorization \"edwinst\" password \"edwinst\" options(NODE 'N_EDW',DBNAME 'EDW') "
创建MAPPING
命令格式: db2 "create user mapping for 本地用户 server <server_name> options (remote_authid '对方用户', remote_password '对方密码')"
db2 "create user mapping for \"db2inst1\" server payment1svr options (remote_authid 'db2inst2',remote_password 'db2inst2')"
5、建立联邦关系
db2 "create nickname <schema.table_alias_name> for <server_name.对方用户名.table>"
db2 "create nickname DSA.EDWCOLUMNS for QKDB1SVR.SYSCAT.COLUMNS"
6、遇见问题
1、关于通信问题之类的错误。
先检查编目是不是有问题。试着去连一下编目的数据库。
db2 list db directory
db2 list node directory
在检查是不是开启联邦了。如果是no就按照上面步骤去做。
db2 get dbm cfg | grep -i federated ----查询命令
如果编目检查没有问题,语法写的也没有问题,联邦也开启了都没有问题,那就重启下数据库。
遇见问题:
db2 "create server PASSVR type DB2/UDB version 10.5 wrapper "drda" authorization \"pasinst\" password \"pasinst\" options(NODE 'N_PASDB',DBNAME 'PASDB') "
报错信息:
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL30080N A communication error "111" occurred sending or receiving data from
the remote database. SQLSTATE=08001
解决办法:
找了很久,然后重启edw数据库,然后在执行一遍好了!!所以很无语。
2、常用的联邦sql。
遇见问题:
建立联邦的时候,编目完去连了一下编目的库,发现成功了!但是没有db2 terminate 所以没有退出来!导致我语句执行到联邦所在的库了,反调了,所以需要删除一些东西。
问题解决:
db2 "list node directory"
db2 "list db directory"
db2 "drop nickname 要删的联邦表名"
db2 "drop USER MAPPING FOR \"dainst\" server QKDB1SVR "
db2 "drop server 删的服务名字"
db2 "drop wrapper drda"
db2 uncatalog node 节点名 (取消节点的编目)
db2 uncatalog db 取得别名 / 数据库名字 (取消数据库的编目)
上面语句可能会用到。这次掉在db2 terminate这个坑里了,不知道这个还可以退出。