首页 > 代码库 > DB2中编目本机当中数据库的方法
DB2中编目本机当中数据库的方法
问题:同一节点上有两个实例,如果想在其中一个实例下访问另一个实例中的数据库,有两种方法:
1. 使用catalog local node的方式,在其中一个实例中将另外一个实例直接编目,这种方试中,它们之间采用的通信方式是IPC(进程间通信),这种方式只能在同一物理机上进行。
2. 使用catalog TCPIP node的方式,将其中一个作为客户端,另一个作为服务端, 这种方式中,它们之间采用的通信方式是TCPIP,这种方式不限于本地,也适用于远程通信。
下面分别举两个例子来说明这个过程
实验1 DB2 10.1.0.0, Windows操作系统,使用catalog local node的方式。
1. 机器上有两个实例INST01和INST02,实例INST01下有一个数据库SAMPLE1,实例INST02下有一个数据库SAMPLE2,启动两个实例之后,如下图所示:
现在,在实例INST01下使用catalog local node的方式将实例INST02编目进来(注意,以下所有操作都是在实例INST01下完成的)
这里的node01相当于给INST02的起的别名,使用attach连接到node01之后,发出的create database命令相当于在INST02下进行的。
从以上的输出中可以看到创建的数据库SAMPLE3实际上是在INST02下,而非INST01下。
为了可以在INST01下访问INST02中的数据库SAMPLE2,可以直接在INST01对其编目。
可以使用 connect to 命令连接数据库了
实验2, DB2 v10.5 , Linux 使用catalog TCPIP node的方式
同一台物理机上有两个实例 qingsong和db2inst2,其中实例QINGSONG下有数据库QSMIAO,作为服务端,实例db2inst2作为客户端
1. 查看/etc/services文件
2. 使用root用户在/etc/services里添加一行 REMOTE_TEST 60012/tcp
3. 服务端qingsong上更新数据库管理器配置文件
$ db2 update dbm cfg using svcename REMOTE_TEST
$ db2stop
$ db2start
$ db2 get dbm cfg | grep svcename
4. 设置服务端的通信协议为TCPIP
$ db2set DB2COMM=tcpip
$ db2stop
$ db2start
$ db2set -all
5. 客户端 编目节点
$ db2start
$ db2 list node directory
$ db2 catalog TCPIP node qingnode remote localhost server 60012
$ db2 terminate
$ db2 list node directory
其中,localhost指本机,如果是在远程,可以直接修改为对应的IP地址,60012指服务端对应的端口。
6. 客户端 编目数据库
$ db2 catalog db qsmiao as remoteDB at node qingnode
$ db2 list db directory
$ db2 connect to REMOTEDB user qingsong using qingsong
上面的这种编目方式是 TCPIP node
参考资料:
Catalog tcpip node
http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001944.html?cp=SSEPGG_9.7.0%2F3-6-2-4-17&lang=en
Catalog local node
http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001989.html?cp=SSEPGG_9.7.0%2F3-6-2-4-14&lang=en
Catalog database
http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001936.html?cp=SSEPGG_9.7.0%2F3-6-2-4-10&lang=en
DB2中编目本机当中数据库的方法