DB2联合数据库(Federated Database)配置实例

使用DB2联合数据库,您可以使用一条SQL语句查询多个数据源中的数据。本文将首先探讨多个关系数据库之间的联合访问。

要进行下面的试验,您必须先安装DB2 v8.2 。


LINUX平台上的DB2联合数据库(Federated Database)配置实验

一.两个数据库在不同的服务器上

1.环境描述

10.0.0.10:库名为:db_10

10.0.0.17: 库名为:db_17

2. 要在10.0.0.17的库db_17可查看库db_10的表数据

2.1,在10.0.0.17的数据库服务器

db2 update dbm cfg using FEDERATED YES

db2stop/db2stop force

db2start

2.2在10.0.0.17的数据库服务器在编目

db2 catalog tcpip node node_10 remote 10.0.0.10 server 50001

db2 catalog db db1 as db_10 at node node_10

db2 terminate

2.3 连接到db_17数据库并创建DRDA包装器(WRAPPER),创建服务器(SERVER)

db2 "create wrapper "drda" library 'libdb2drda.so' options(add db2_fenced 'n')"

db2 " CREATE SERVER test TYPE DB2/UDB VERSION '9.7' WRAPPER DRDA AUTHID \"db2inst\" PASSWORD \"db2inst\" OPTIONS( ADD DBNAME 'REMOTE10') "

2.4 创建用户映射

db2 "CREATE USER MAPPING FOR "db2inst" SERVER "test" OPTIONS ( ADD REMOTE_AUTHID 'db2inst', ADD REMOTE_PASSWORD 'db2inst')"

2.5 建立别名

db2 connect to db_17

db2 "CREATE NICKNAME db2inst.tb FOR test.db2inst.tb";

2.6

db2 "select * from tb"

二.两个数据库在同一台机器上

1.两个库在同一个实例下

库名1为:dbps

库名2为:db1

2.现在要在dbps库上面查看db1库的表

2.1连接到dbps

db2 update dbm cfg using FEDERATED YES 

db2stop

db2start

db2 connect to dbps

db2 "create wrapper "drda" library 'libdb2drda.so' options(add db2_fenced 'n')"

2.2 创建服务器(SERVER)

db2 " CREATE SERVER dbps_db1 TYPE DB2/UDB VERSION '9.7' WRAPPER DRDA AUTHID \"db2inst\" PASSWORD \"db2inst\" OPTIONS( ADD DBNAME 'db1') "

2.3 创建用户映射

db2 "CREATE USER MAPPING FOR "db2inst" SERVER "dbps_db1" OPTIONS ( ADD REMOTE_AUTHID 'db2inst', ADD REMOTE_PASSWORD 'db2inst')"

2.4 建立别名

db2 "CREATE NICKNAME db2inst.tb1 FOR dbps_db1.db2inst.tb1";

2.5 检查是否有表存在

db2 list tables


查看SEVER

db2 "select * from syscat.SERVERS"



1) 登录Linux。

2) 切换到db2实例帐号,su - db2inst。

3)  db2start命令来启动实例
4) 在DB2命令窗口运行db2 GET DBM CFG 来查看当前实例的配置参数,并确保FEDERATED参数设置为YES,通过运行db2 UPDATE DBM CFG USING FEDERATED YES来设置这个参数。修改这个参数后,必须重新启动实例才会生效(db2stop/db2start

5) 却保您已经创建了DB2样本数据库SAMPLE,如果您还没有创建,可以通过在DB2命令行窗口运行db2sampl命令来创建它。此样本数据库包含了一些样本表和数据,使用这个数据库作演示可以使我们节省一点时间。
6) 创建另外一个数据库,笔者使用名字TESTDB:
   db2 CREATE DB TESTDB

7) 进入DB2命令编辑器,并在这儿完成下面的步骤。

8) 连接到sample数据库,并创建DRDA包装器(WRAPPER).
   CONNECT TO SAMPLE;
   CREATE WRAPPER DRDA;

   
9) 创建服务器(SERVER)
CREATE SERVER TESTDB TYPE DB2/UDB VERSION '8.2' WRAPPER "DRDA" AUTHID "db2admin" PASSWORD "db2admin" OPTIONS( ADD DBNAME 'TESTDB', PASSWORD 'Y');

10) 创建用户映射
CREATE USER MAPPING FOR "ADMINISTRATOR" SERVER "TESTDB" OPTIONS ( ADD REMOTE_AUTHID 'db2inst', ADD  REMOTE_PASSWORD '123QWE') ;

11) 使用db2inst用户连接到TESTDB数据库、创建表WORKITEM、并插入样本数据。

CONNECT TO TESTDB USER db2inst USING 123QWE;

CREATE TABLE WORKITEM (
ITEMNO CHAR(4) NOT NULL,
ITEMNAME VARCHAR(50) NOT NULL,
EMPNO CHAR(6),
PRIMARY KEY (ITEMNO)
);

INSERT INTO WORKITEM(ITEMNO,ITEMNAME,EMPNO) VALUES ('0001','测试程序模块1','000010');
INSERT INTO WORKITEM(ITEMNO,ITEMNAME,EMPNO) VALUES ('0002','完成模块2的开发','000020');
INSERT INTO WORKITEM(ITEMNO,ITEMNAME,EMPNO) VALUES ('0003','联系客户A','000030');

12) 连接到SAMPLE数据库,并为TESTDB数据库中的WORKITEM表创建昵称:
CONNECT TO SAMPLE;
CREATE NICKNAME ADMINISTRATOR.WORKITEM FOR TESTDB.DB2ADMIN.WORKITEM;

13) OK,现在我们就可以在SAMPLE数据库中使用TESTDB数据库中的WORKITEM表了,而且还可以和SAMPLE数据库的EMPLOYEE表联合查询:
    SELECT * FROM WORKITEM;
    我们来查询由谁来负责哪个工作项目:
    SELECT A.ITEMNO,A.ITEMNAME,A.EMPNO,B.FIRSTNME,B.LASTNAME FROM WORKITEM A LEFT OUTER JOIN EMPLOYEE B ON A.EMPNO=B.EMPNO;



同一服务器上的两个实例:db2inst1 db2inst2 数据库分别是:mydb1 mydb2 (本地联邦和远程联邦同理,所以这里只演示远程联邦)

下面的操作在db2inst1上对db2inst2进行联邦,也就是可以在db2inst1上通过nickname访问db2inst2,所有操作都是在db2inst1下进行:

复制代码
db2 update dbm cfg using FEDERATED YES
db2 connect to mydb1
--这里需要注意的是这个语句不能使用db2 ""执行,而是需要进入到db2 Command Line Processor 交互模式。这点是进行了很多尝试才发现的问题,注意问题是在password后面的字符串必须是双引号
--drda是默认的适配器
CREATE WRAPPER DRDA;
db2
create server f_mydb2 type db2/udb version 9.7 wrapper drda authorization db2inst2 password "******" options(dbname 'mydb2')
db2 "create user mapping for "db2inst1" server f_mydb2 options (add remote_authid 'db2inst2' , add remote_password '******')"
--db2inst2中存在一个表tb2
db2 "create nickname mydb2_tb2 for f_mydb2.db2inst2.tb2"
db2 "select * from mydb2_tb2"
db2 "select * from tb1 a inner join mydb2_tb2 b on b.id = a.id"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值