一、兩個數據庫在不同的服務器上
[環境描述]
10.0.0.10:庫名為 db_10
10.0.0.17:庫名為 db_17
[需求描述]
在db_17庫中,跨庫查詢db_10庫的表
[操作步驟]
1)在10.0.0.17數據庫服務器,開啟聯邦支持
db2 "update dbm cfg using federated yes"
db2stop force
db2start
2)在10.0.0.17數據庫服務器,編目Node、DB
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
3)連接到db_17數據庫,并創建DRDA包裝器(WRAPPER),創建服務器(SERVER)
db2 "connect to?db_17"
db2 "create wrapper?drda?library 'libdb2drda.a' options(add db2_fenced 'n')"
#注:不同的操作系統,使用不同的包(這里遠端的系統是AIX,使用libdb2drda.a)
#db2 "create wrapper drda" 這是一般創建drda包裝器的語句
db2 "create server?db2svr10?type db2/aix version '9.7' wrapper?drda?authid \"remote_db_user\" password \"remote_db_password\" options(add dbname 'db_10',node 'node_10')"
#注:db2svr10是Server別名,dbname 'db_10'是編目的DB_Alias別名,node 'node_10'是編目的Node名
#db2/aix 或 db2/udb
#這里的remote_db_user可以不是下面要映射的user,可以是管理用戶
4) 創建用戶映射
db2 "create user mapping for?local_db_user?server?db2svr10?options(add remote_authid 'remote_db_user', add remote_password 'remote_db_password')"
#這里的remote_db_user必須在本地、遠端都存在,同名、同密碼,也有訪問各自數據庫的權限。
5) 創建nickname
(這里必須以user mapping的用戶登錄數據庫,進行創建nickname,否則會報SQL1101N錯誤)
db2 connect to?db_17 user local_db_user? using?remote_db_password
db2 "create nickname?local_tabschema_alias.local_tabname_alias?for?db2svr10.remote_tabschema.remote_tabname"
注意:如果希望其他用戶也能使用該nickname,必須增加相應的user mapping定義,同時保證這個user有查詢遠程表(source table)的權限。
6)驗證查詢結果
db2 "select * from?local_tabschema_alias.local_tabname_alias"
[其他操作]
1)、刪除nickname、user mapping、server操作如下:
db2 "drop nickname?Your_Nickname"
db2 "drop user mapping for?Local_DB_User?server?Server_Name"
db2 "drop server?Server_Name"
db2 "drop wrapper?Wrapper_Name"
2)、解編目操作:
db2 "uncatalog node?Node_Name"
db2 "uncatalog db?DB_Name"
二、兩個數據庫在同一服務器上(相同實例、不同實例)
同上類似。
p.s. 部分參考互聯網