linux下DB2中在命令行狀態下如何實現DB2實例?
以下的文章主要向大家描述的是在linux操作系統下DB2數據庫中在命令行狀態下對第二個DB2實例進行創建的實際操作步驟,以下就是DB2實例進行創建的實際操作步驟具體方案的描述,希望在你今后的學習中會有所幫助。
linux下DB2中,在命令行狀態下創建第二個DB2實例DB2inst2全過程詳解
這個全過程是***次接觸到DB2時要求做的,然后當時DB2的安裝文件又找不到了,所以自己從網上找些資料,然后自己摸索著建出來的,如有遺漏錯誤,還請不吝賜教。
(這個***是使用DB2的安裝文件來建第二個實例,方便而且不會出錯。下面講的是笨方法~)
首先,系統原有的DB2信息,
安裝目錄 : /opt/IBM/DB2/V8.1
DB2inst1實例目錄 : /home/DB2inst1
現在需要創建DB2inst2實例:
1.首先創建實例目錄:
(( 創建之前,查看磁盤可用空間 以確定剩余空間足夠使用 命令: df -k ))
- cd /home
- mkdir DB2inst2
2.然后給DB2inst2實例創建實例用戶和組:
創建組:
- groupadd DB2inst25 O:
創建用戶DB2inst2,設定設定用戶主目錄,設定primaryGroup為DB2grp1:(useradd --help 查看參數)useradd -m -d /home/DB2inst2 -s /bin/bash -g DB2grp1 -G DB2inst2 DB2inst2
如果不知道用戶的密碼,可以在root用戶下 ,命令passwd -d DB2inst2 可以刪除DB2inst2用戶的密碼,然后返回明文的DB2inst2用戶的密碼passwd: Success
然后在DB2inst2用戶下 ,使用命令passwd修改密碼(首先要輸入當前密碼:Success)
3.創建實例
創建DB2實例DB2inst2:
- ./DB2icrt -u DB2inst2 DB2inst2
4.建數據庫,建表
創建數據庫gpending:
(如果需要建立的數據庫目錄為自己設定的目錄,就需要首先建立好那個目錄,并設定好目錄的owener為DB2inst2)
建庫命令:
- DB2 create db gpending on /home/DB2inst2/pending using codeset UTF-8 territory US
(這條命令中數據庫的目錄/home/DB2inst2/pending中,/pending即為用戶自己設定的目錄,因此需要修改權限 chown -R DB2inst2:DB2grp1 pending )
然后命令 DB2
進入DB2命令行,connect to gpending 可以返回:數據庫連接信息
數據庫服務器 = DB2/LINUX 8.2.7
SQL 授權標識 = DB2INST2
本地數據庫別名 = GPENDING
證明數據庫的本地連接成功。
建表語句不再描述。
DB2下 命令list tables for all
可以返回所有的表(包含剛創建的)#p#
5.配置遠程連接端口
首先為遠程連接配置空閑端口: (查看端口使用情況命令: netstat -na | grep 50000 查看50000端口是否已使用中 )
vi /etc/services 查看分配給DB2實例DB2inst2的端口. 返回結果中db這一塊的有
- # Local services
- DB2_DB2inst1 60000/tcp
- DB2_DB2inst1_1 60001/tcp
- DB2_DB2inst1_2 60002/tcp
- DB2_DB2inst1_END 60003/tcp
- DB2c_DB2inst1 50000/tcp
- DB2i_DB2inst1 50001/tcp)
- DB2_DB2inst2 60004/tcp
- DB2_DB2inst2_1 60005/tcp
- DB2_DB2inst2_2 60006/tcp
- DB2_DB2inst2_END 60007/tcp
- )
在里面添加兩條:
- DB2c_DB2inst2 70000/tcp
- DB2i_DB2inst2 70001/tcp
分別為為DB2inst2實例的偵聽端口和中斷端口。
網上找到的大部分創建第二個實例以及建表的方法就至此結束了,但是實際使用的時候,遠程連接還是連接不上的。
后來找到了通過另一實例DB2inst1使用CATALOG編目的方法來實現遠程連接的成功方法。
首先切換到另一用戶,這里使用DB2inst1:
在root下:
su - DB2inst1
編目節點名,取任意名稱,如為inst3,指向DB2機器所在,之前在etc/services文件中為DB2inst2實例配置的偵聽端口:
- DB2 "catalog tcpip node inst3 remote 10.213.1.95 server 70000"
然后給節點指向的DB2inst2實例新建的數據庫配置別名:
- DB2 "catalog db gpending as gpending at node inst3"
編目成功后,可以嘗試連接(在DB2inst1用戶下):
用命令: connect to gpending user DB2inst2 using password
或命令: DB2 attach to inst3 user DB2inst2 using password
系統會報出如下一個通信協議的錯誤,類似于:SQL30081N 檢測到通信錯誤。正在使用的通信協議:"TCP/IP"。正在使用的通信API:"SOCKETS"。
檢測到錯誤的位置:"10.213.1.95"。檢測到錯誤的通信函數:"connect"。
協議特定的錯誤代 碼:"111"、"*"、"*"。 SQLSTATE=08001,
(這一段是網上搜索到的:
為什么通訊協議會出錯呢?系統不是會默認地給實例設置一些基礎的屬性嗎?
并非如此!!!
通過DB2SETUP方式創建的實例(即使用DB2安裝文件來新建實例),有些參數會默認的幫你設置成缺省的參數值。
但通過命令行方式創建實例時,DB2實例參數并沒有被設置。所以DB2inst2實例的通訊協議沒有定義,因此發生剛才的現象。
因此,在用戶DB2inst1下,通過命令DB2set ,你可以看到如下信息:
- DB2 _INLIST_TO_NLJN=YES
- DB2_EVALUNCOMMITTED=yes
- DB2_RR_TO_RS=YES
DB2COMM=tcpip (該屬性是指明該DB2實例使用的通信協議,一個實例可以使用多個通信協議,多個通信協議之間使用逗號分開,如:TCPIP、IPX、APPC、NPIPE……)
DB2AUTOSTART=yes( 設置實例是否在系統啟動是自動啟動,在Windows系統中DB2的實例是作為服務形式啟動的)
但是在用戶db2inst2下使用 命令db2set,你將什么也看不到!
所以要手動設置參數:
在 db2inst2下:
- db2set DB2COMM=tcpip
- db2set DB2AUTOSTART=yes
然后給db2inst2實例指定端口(即在etc/services文件中添加的兩條,之前先做過)
然后查看實例的配置文件:
命令: db2 get dbm config
返回的結果中發現SVCENAME的值是空的配置SVCENAME的值,即在services文件中為db2inst2實例指定的偵聽端口(70000)的服務名:db2c_db2inst2
命令:db2 update dbm config using SVCENAME db2c_db2inst2
然后重啟整個db2……
用客戶端工具連接實例,成功!
(
要注意的是,用遠程機器上的客戶端連接時,要配置的信息:
用戶標識:“db2inst2”
密碼下:“password”
數據庫名稱: “gpending”
服務器 : “10.213.1.95”
端口號:“50000” (注意:這里填的不是70000)
(端口寫為db2inst2分配的70000端口時,客戶端連接時怎么也不成功,后來改成50000,發現就可以了,這可能就是編目的原因吧,我自己理解可能就是通過連接50000端口,即db2inst1,然后通過編目gpending 映射到db2inst2的gpending 表,然后用用戶名和密碼連接。)
)
至此,DB2實例db2inst2的配置成功完成!
【編輯推薦】
- IBM DB2跨平臺數據庫遷移操作與潛在危機
- IBM DB2參數調優如何顯神功?
- DB2 dart恢復數據的操作步驟與應用代碼
- DB2數據復制與數據庫遷移追根述源
- DB2 CMO安裝7.1.2.6補丁之后會出現的錯誤