DB2跨库查询

《在源数据库A中访问目标库B的表table1的方法》
db2 =>update dbm cfg using Federated YES //开启数据库联合查询
db2 =>db2stop force
db2 =>db2start //重启数据库方可生效
注:开启数据库联合查询配置属性只需操作一次。
db2 =>conncet to A user user using pwd
db2 =>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 “update dbm cfg using Federated YES” //开启数据库联合查询

DB20000I UPDATE DATABASE MANAGER CONFIGURATION 命令成功完成。

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

SQL1064N DB2STOP processing was successful. SQL1064N DB2STOP 处理成功。

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

ADM12026W DB2 服务器检测到尚未注册产品 “DB2 Express Edition” 的有效许可证。

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

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

3.2.1将远程数据库(172.16.33.200)在本地编目,创建编目节点 1.db2 “catalog tcpip node test200 remote 172.16.33.200 server 50000” DB20000I CATALOG TCPIP NODE 命令成功完成。

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

2.db2 “catalog db lpdb as dms200 at node test200” DB20000I CATALOG DATABASE 命令成功完成。

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

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

3.2.4连接数据库

1.db2 “connect to dms200 user db2inst1 using db2inst1”

数据库连接信息

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

3.3创建包装器

3.3.1 创建包装器

1.连接本地数据库 db2 connect to middledb 2.db2 "create wrapper drda "

DB20000I SQL 命令成功完成。

3.4创建服务器

1.db2 “CREATE SERVER SERVER200 TYPE DB2/LINUX VERSION ‘9.7’ WRAPPER DRDA AUTHID “db2inst1” PASSWORD “db2inst1” OPTIONS( ADD DBNAME ‘DMS200’)” DB20000I SQL 命令成功完成。

3.5 创建用户映射

1.db2 “create user mapping for db2inst1 server server200 options (add remote_authid ‘db2inst1’,add remote_password ‘db2inst1’)” DB20000I SQL 命令成功完成。

3.6 创建昵称

1.db2 CREATE NICKNAME db2inst1.test FOR SERVER200.DB2INST1.test 注意:区分表名的大小写

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

参考文献:

–创建编目节点

db2 catalog tcpip node bm<节点名称> remote 88.100.201.4<编目的IP> server 50004<端口号> --创建别名

db2 catalog DB dhl<数据库名称> as ccc<数据库别名> at node bm<节点名称>

–创建编目数据库

db2 catalog database testdb1<数据库名称> at node cdc<节点名称>

–连接数据库

db2 connect to ccc<数据库别名> user db2inst4<用户名> using db2inst4<密码>

–删除编目节点

db2 uncatalog node cdc<节点名称>

–删除编目数据库

db2 uncatalog database testdb0<数据库名称>

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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值