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,还可以使用联合查询。node

 

DB2 跨库级联查询DB2 跨库级联查询 数据库

1.文档目的: 缓存

做为数据库,有时候在抽数后须要对比源库和目标库的差别,不少时候在数据量不是很大的状况下,能够经过查询结果,而后早excel或ue上手动处理,可是当数据量很大而差别数据很小的状况下,这种方法就是痛苦并且极其低效的。  为此,亟需创建一种能够跨库查询的模式。 服务器

2.操做原理: app

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

3.操做步骤 函数

3.1 事先的准备 spa

先切换到db2 环境下su  - db2inst1 excel

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

1. db2 => db2 "update dbm cfg using Federated YES" //开启数据库联合查询 

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

  2.db2 =>db2stop  force  // 关闭全部应用

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

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不会生效 

 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 "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。

相关文章
相关标签/搜索