DB2跨库联合查询

2016-12-27 10:22:20来源:oschina作者:飞雪无痕人点击

第七城市

《在源数据库A中访问目标库B的表table1的方法》db2 =>update dbm cfg using Federated YES //开启数据库联合查询db2 =>db2stop forcedb2 =>db2start //重启数据库方可生效注:开启数据库联合查询配置属性只需操作一次。db2 =>conncet to A user user using pwddb2 =>create wrapper drda//创建DRDA包装器(WRAPPER)//包装器是联邦数据库服务器同数据源的交互实现,构成其功能的函数集合封装在对应库文件(包装器模块)中db2 =>create server B type db2/AIX version 9 wrapper drda authorization "db2admin" password "db2admin" options(dbname 'B')//创建服务器(SERVER)//包装器模块被注册后,需要创建服务器对应实际的数据源。db2 =>create user mapping for "db2admin" SERVER "B" OPTIONS (REMOTE_AUTHID 'db2admin' , REMOTE_PASSWORD 'db2admin')//创建用户映射//指定联邦数据库用户认证到数据源用户认证的映射。db2 =>create nickname B_TABLE1 for B.db2admin.table1//为目标数据库中的目标表创建昵称//表别名用于关联位于数据源的对象。表别名的定义需要将标识该数据源的服务器,数据源对象的元数据信息放入全局编目中。这样就建好了跨库访问环境,可在A中使用"select * from B_TABLE1 " 来访问B里头的表table1,还可使用联合查询。

DB2 跨库级联查询DB2跨库级联查询


1.文档目的:


作为数据库,有时候在抽数后需要对比源库和目标库的差异,很多时候在数据量不是很大的情况下,可以通过查询结果,然后早excel或ue上手动处理,但是当数据量很大而差异数据很小的情况下,这种方法就是痛苦而且极其低效的。为此,亟需建立一种可以跨库查询的模式。


2.操作原理:


首先把所需要的数据库编目在一起,然后创建一个包装器wrap,用于封装数据源,新建一个服务器,用于对应实际的数据源,创建映射,指定这两个库的映射关系,然后为数据库创建昵称,之后可以在你所设定的库中查询别的库的表了,也可以级联查询。


3.操作步骤


3.1事先的准备


先切换到db2环境下su-db2inst1


3.1.1在两台数据库上修改实例参数federated,启用联合访问支持,需要重启实例。


1.db2=>db2"updatedbmcfgusingFederatedYES"//开启数据库联合查询


DB20000IUPDATEDATABASEMANAGERCONFIGURATION命令成功完成。


2.db2=>db2stopforce//关闭所有应用


var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);


SQL1064NDB2STOPprocessingwassuccessful.SQL1064NDB2STOP处理成功。


3.db2=>db2start//重启数据库方可生效


ADM12026WDB2服务器检测到尚未注册产品"DB2ExpressEdition"的有效许可证。


注:开启数据库联合查询配置属性只需操作一次。两个数据库都要操作。


3.2在本地数据库上操作(172.16.33.201)


3.2.1将远程数据库(172.16.33.200)在本地编目,创建编目节点1.db2"catalogtcpipnodetest200remote172.16.33.200server50000"DB20000ICATALOGTCPIPNODE命令成功完成。


DB21056W直到刷新目录高速缓存之后,目录更改才生效。3.2.2创建编目数据库


2.db2"catalogdblpdbasdms200atnodetest200"DB20000ICATALOGDATABASE命令成功完成。


DB21056W直到刷新目录高速缓存之后,目录更改才生效。3.2.3确认连接有效


3.db2"terminate"如果已经连接数据库的情况下使用terminate退出,再连接,不然刚才的catalog不会生效


var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);


3.2.4连接数据库


1.db2"connecttodms200userdb2inst1usingdb2inst1"


数据库连接信息


数据库服务器=DB2/LINUX9.7.0SQL授权标识=DB2INST1本地数据库别名=DMS200说明远程数据库访问正常。


3.3创建包装器


3.3.1创建包装器


1.连接本地数据库db2connecttomiddledb2.db2"createwrapperdrda"


DB20000ISQL命令成功完成。


3.4创建服务器


1.db2"CREATESERVERSERVER200TYPEDB2/LINUXVERSION'9.7'WRAPPERDRDAAUTHID/"db2inst1/"PASSWORD/"db2inst1/"OPTIONS(ADDDBNAME'DMS200')"DB20000ISQL命令成功完成。


3.5创建用户映射


1.db2"createusermappingfordb2inst1serverserver200options(addremote_authid'db2inst1',addremote_password'db2inst1')"DB20000ISQL命令成功完成。


3.6创建昵称


1.db2CREATENICKNAMEdb2inst1.testFORSERVER200.DB2INST1.test注意:区分表名的大小写


这时就可以在本地库查询别的库的表了Select*fromdb2inst1.test


参考文献:

--创建编目节点


db2catalogtcpipnodebm<节点名称>remote88.100.201.4<编目的IP>server50004<端口号>--创建别名


db2catalogDBdhl<数据库名称>asccc<数据库别名>atnodebm<节点名称>


--创建编目数据库

db2catalogdatabasetestdb1<数据库名称>atnodecdc<节点名称>


--连接数据库


db2connecttoccc<数据库别名>userdb2inst4<用户名>usingdb2inst4<密码>


--删除编目节点


db2uncatalognodecdc<节点名称>


--删除编目数据库


db2uncatalogdatabasetestdb0<数据库名称>

DB2跨库访问表



打开之后,输入


db2


进入db2编辑模式,如下所示:



下面的命令顺序执行:


update dbm cfg using Federated YES; // 开启数据库联合查询


db2stop force;


db2start; // 重启数据库方可生效


接下来,需要连接到具体的数据库,举个例子,假如有A库和B库,现在你要在A库中访问B库的表,那么这里连接的就是A库了


connect to [数据库名称] user [用户名] using [密码]


此时的[数据库名称]就是A库了。


顺序执行如下命令:


create wrapper drda; // 创建DRDA包装器(WRAPPER)


create server [数据库服务器别名] type db2/AIX version 9 wrapper drda authorization ["用户名"] password ["密码"] options(dbname ['数据库名称']); // 创建服务器(SERVER)


这里,我们将数据库服务器别名命名为:B,后边会用到的。


create user mapping for ["用户名"] SERVER ["数据库服务器别名"] OPTIONS (REMOTE_AUTHID ['用户名'] , REMOTE_PASSWORD ['密码']); // 创建用户映射


此处的,数据库服务器别名应为:B,与上文对应。


create nickname NK_Student for 数据库服务器别名.用户名.Student; // 创建表的昵称


这里的数据库服务器别名与上对应为:B。


至此,你就可以像这样在A库中访问B库中的Student表了:select * from NK_Student。

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台