《在源數據庫A中訪問目標庫B的表table1的方法》
db2 =>update dbm cfg using Federated YES //開啓數據庫聯合查詢
db2 =>db2stop force
db2 =>db2start //重啓數據庫方可生效
注:開啓數據庫聯合查詢配置屬性只需操做一次。
db2 =>conncet to A user user using pwd
db2 =>create wrapper drda
//建立DRDA包裝器(WRAPPER)
//包裝器是聯邦數據庫服務器同數據源的交互實現,構成其功能的函數集合封裝在對應庫文件(包裝器模塊)中
db2 =>create server B type db2/AIX version 9 wrapper drda authorization "db2admin" password "db2admin" options(dbname 'B')
//建立服務器(SERVER)
//包裝器模塊被註冊後,須要建立服務器對應實際的數據源。
db2 =>create user mapping for "db2admin" SERVER "B" OPTIONS (REMOTE_AUTHID 'db2admin' , REMOTE_PASSWORD 'db2admin')
//建立用戶映射
//指定聯邦數據庫用戶認證到數據源用戶認證的映射。
db2 =>create nickname B_TABLE1 for B.db2admin.table1
//爲目標數據庫中的目標表建立暱稱
//表別名用於關聯位於數據源的對象。表別名的定義須要將標識該數據源的服務器,數據源對象的元數據信息放入全局編目中。
這樣就建好了跨庫訪問環境,可在A中使用"select * from B_TABLE1 " 來訪問B裏頭的表table1,還可以使用聯合查詢。node
DB2 跨庫級聯查詢DB2 跨庫級聯查詢 數據庫
1.文檔目的: 緩存
做爲數據庫,有時候在抽數後須要對比源庫和目標庫的差別,不少時候在數據量不是很大的狀況下,能夠經過查詢結果,而後早excel或ue上手動處理,可是當數據量很大而差別數據很小的狀況下,這種方法就是痛苦並且極其低效的。 爲此,亟需創建一種能夠跨庫查詢的模式。 服務器
2.操做原理: app
首先把所須要的數據庫編目在一塊兒,而後建立一個包裝器wrap,用於封裝數據源,新建一個服務器,用於對應實際的數據源,建立映射,指定這兩個庫的映射關係,而後爲數據庫建立暱稱,以後能夠在你所設定的庫中查詢別的庫的表了,也能夠級聯查詢。 tcp
3.操做步驟 函數
3.1 事先的準備 spa
先切換到db2 環境下su - db2inst1 excel
3.1.1在兩臺數據庫上修改實例參數federated,啓用聯合訪問支持,須要重啓實例。 server
1. db2 => db2 "update dbm cfg using Federated YES" //開啓數據庫聯合查詢
DB20000I UPDATE DATABASE MANAGER CONFIGURATION 命令成功完成。
2.db2 =>db2stop force // 關閉全部應用
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
SQL1064N DB2STOP processing was successful. SQL1064N DB2STOP 處理成功。
3.db2 =>db2start //重啓數據庫方可生效
ADM12026W DB2 服務器檢測到還沒有註冊產品 "DB2 Express Edition" 的有效許可證。
注:開啓數據庫聯合查詢配置屬性只需操做一次。兩個數據庫都要操做。
3.2在本地數據庫上操做(172.16.33.201)
3.2.1將遠程數據庫(172.16.33.200)在本地編目,建立編目節點 1.db2 "catalog tcpip node test200 remote 172.16.33.200 server 50000" DB20000I CATALOG TCPIP NODE 命令成功完成。
DB21056W 直到刷新目錄高速緩存以後,目錄更改才生效。 3.2.2建立編目數據庫
2.db2 "catalog db lpdb as dms200 at node test200" DB20000I CATALOG DATABASE 命令成功完成。
DB21056W 直到刷新目錄高速緩存以後,目錄更改才生效。 3.2.3確認鏈接有效
3.db2 "terminate" 若是已經鏈接數據庫的狀況下使用terminate退出,再鏈接,否則剛纔的catalog不會生效
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
3.2.4鏈接數據庫
1.db2 "connect to dms200 user db2inst1 using db2inst1"
數據庫鏈接信息
數據庫服務器 = DB2/LINUX 9.7.0 SQL 受權標識 = DB2INST1 本地數據庫別名 = DMS200 說明遠程數據庫訪問正常。
3.3建立包裝器
3.3.1 建立包裝器
1.鏈接本地數據庫 db2 connect to middledb 2.db2 "create wrapper drda "
DB20000I SQL 命令成功完成。
3.4建立服務器
1.db2 "CREATE SERVER SERVER200 TYPE DB2/LINUX VERSION '9.7' WRAPPER DRDA AUTHID \"db2inst1\" PASSWORD \"db2inst1\" OPTIONS( ADD DBNAME 'DMS200')" DB20000I SQL 命令成功完成。
3.5 建立用戶映射
1.db2 "create user mapping for db2inst1 server server200 options (add remote_authid 'db2inst1',add remote_password 'db2inst1')" DB20000I SQL 命令成功完成。
3.6 建立暱稱
1.db2 CREATE NICKNAME db2inst1.test FOR SERVER200.DB2INST1.test 注意:區分表名的大小寫
這時就能夠在本地庫查詢別的庫的表了 Select * from db2inst1.test
參考文獻:
--建立編目節點
db2 catalog tcpip node bm<節點名稱> remote 88.100.201.4<編目的IP> server 50004<端口號> --建立別名
db2 catalog DB dhl<數據庫名稱> as ccc<數據庫別名> at node bm<節點名稱>
--建立編目數據庫
db2 catalog database testdb1<數據庫名稱> at node cdc<節點名稱>
--鏈接數據庫
db2 connect to ccc<數據庫別名> user db2inst4<用戶名> using db2inst4<密碼>
--刪除編目節點
db2 uncatalog node cdc<節點名稱>
--刪除編目數據庫
db2 uncatalog database testdb0<數據庫名稱>
打開以後,輸入
db2
進入db2編輯模式,以下所示:
下面的命令順序執行:
update dbm cfg using Federated YES; // 開啓數據庫聯合查詢
db2stop force;
db2start; // 重啓數據庫方可生效
接下來,須要鏈接到具體的數據庫,舉個例子,假若有A庫和B庫,如今你要在A庫中訪問B庫的表,那麼這裏鏈接的就是A庫了
connect to [數據庫名稱] user [用戶名] using [密碼]
此時的[數據庫名稱]就是A庫了。
順序執行以下命令:
create wrapper drda; // 建立DRDA包裝器(WRAPPER)
create server [數據庫服務器別名] type db2/AIX version 9 wrapper drda authorization ["用戶名"] password ["密碼"] options(dbname ['數據庫名稱']); // 建立服務器(SERVER)
這裏,咱們將數據庫服務器別名命名爲:B,後邊會用到的。
create user mapping for ["用戶名"] SERVER ["數據庫服務器別名"] OPTIONS (REMOTE_AUTHID ['用戶名'] , REMOTE_PASSWORD ['密碼']); // 建立用戶映射
此處的,數據庫服務器別名應爲:B,與上文對應。
create nickname NK_Student for 數據庫服務器別名.用戶名.Student; // 建立表的暱稱
這裏的數據庫服務器別名與上對應爲:B。
至此,你就能夠像這樣在A庫中訪問B庫中的Student表了:select * from NK_Student。