問題:同一節點上有兩個實例,如果想在其中一個實例下訪問另一個實例中的數據庫,有兩種方法:
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