如果您需要使用所有不同的数据库,包括选择、插入、更新和删除,就象所有的表都位于单个数据库中那样,那么将获得非常高的工作效率。数据库联邦就是要做到这一点:使所有表看起来象是在同一个数据库中
那么,数据库联邦是怎么工作的?
“联邦者(federator)”系统对远程系统“被联邦者(federatee)”中的表进行操作。远程表在“Federator”数据库中作为虚拟表出现。客户机应用程序可以对“Federator”数据库中的虚拟表执行操作,但是真正的持久性存储位于远程数据库中。
每个“被联邦者”都将“联邦者”看成是另一个数据库客户机连接。“Federatee”只是处理数据库操作的客户机请求。“联邦者”需要用客户机软件来访问每个远程数据库。要访问每种被联邦者,则需要安装 IBM Informix®、Sybase、Oracle 等等的客户机软件。
数据库联邦的应用程序接口是 SQL。与必须学习新接口相比,这大大地提高了工作效率。使用与对本地表进行选择、插入、更新和删除相同的语法来访问远程表。当然也并不是可以进行所有表操作。
下面我们通过实际操作来看看如何配置联邦数据库:
我们先准备好前期工作,创建一个本地数据库和远程数据库来做实验——
本地数据库 :
数据库:LOCALDB
IP地址:192.168.20.138
端口号:60000
用户名:db2inst1
密码:db2inst1
远程数据库 :
数据库:REMOTEDB
IP地址:192.168.20.145
端口号:70000
用户名:db2inst2
密码:db2inst2
另外确保远程数据库的全局设置如下——
现在,我们首先是添加编目节点——
然后编目数据库——
db2 catalog database REMOTEDB as REMOTEDB at node NODE1
查看编目节点及编目数据库结果——
db2 list node directory
db2 list db directory
显示编目已成功
接下来执行创建数据库联邦的步骤,首先创建WRAPPER——
备注:如果自定义了wrapper的名字,那么 library 就要加上,不同的系统lib的后缀不同,
AIX 是 .a
Linux 是 .so
注意:db2 "create wrapper db2_wrapper library 'libdb2drda.a'" 双引号!
可以通过 uname -a 去查看当前是什么操作系统
(注意创建wrapper之前必须先连接本地数据库:
db2 connect to dbname)
从上面可以看到报错了,说的是未对指定的操作启用数据库的实例
我们查看Federated(联邦)的功能是否打开,只需要开启本地的联邦功能即可,看到显示是NO
我们将Federated打开,并重启数据库使其生效——
现在可以看到创建成功了——
现在开始连接远程数据库,记得连接前确保远程的系统已关闭防火墙——
创建连接对方数据的SERVER——
$ db2 "create server remotedb1svr type DB2/UDB version 10.5 wrapper "DRDA" authorization \"db2inst2\" password \"db2inst2\" options( NODE 'NODE01', DBNAME 'REMOTEDB')"
如果报错SQL1101N Remote database "dbname" on node "" could not be accessed
with the specified authorization id and password. SQLSTATE=08004
尝试修改db2 get dbm cfg|grep AUTHENTICATION
Database manager authentication (AUTHENTICATION) = SERVER
重启数据库生效
创建MAPPING——
$ db2 "create user mapping for \"db2inst1\" server remotedb1svr options (remote_authid 'db2inst2',remote_password 'db2inst2')"
创建联邦关系表(首先需要确认远程的库有对应的表已存在于数据库中)——
$ db2 "create nickname db2inst1.testtable for remotedb1svr.db2inst2.testtable"
通过在本地查看联邦数据库的表
可以看到可以正常显示
我们再测试一下插入操作是否可行——
执行成功,并且成功插入数据。
数据库联邦可以使我们不再需要构建数据集市了!还有个前提,就是如果要查询的量不是很大,并且如果汇总表通常就可以满足查询的要求,那么就不需要数据集市、不需要相应地创建新服务器和移动大量的数据等,这样可以大大地提高工作效率。当然,对于需要访问最低级别的详细信息的忙碌繁重的查询而言,数据集市或数据仓库是首选的解决方案。
注:如果数据库实例用户密码(联邦中定义的用户及密码,也可以不是实例用户,只要是远端存在的用户即可)需要进行修改的话,需要对联邦中的密码一并修改,否则联邦会失效。特别要注意的一点,实例用户密码修改之后,最好执行一次重启,否则你会发现不修改联邦中的用户密码也不影响,但是一旦数据库重启后密码就会使用最新的用户密码。
修改联邦中的用户或密码的方法如下:
(修改表联邦用户):
db2 "ALTER USER MAPPING FOR \"db2inst1\" SERVER remotedb1svr OPTIONS (SET remote_authid 'db2inst2')"
(修改表联邦密码):
db2 "ALTER USER MAPPING FOR \"db2inst1\" SERVER remotedb1svr OPTIONS (SET remote_password 'db2inst2')"