來(lái)源:mustbelove的專欄
使用DB2聯(lián)合數(shù)據(jù)庫(kù),您可以使用一條SQL語(yǔ)句查詢多個(gè)數(shù)據(jù)源中的數(shù)據(jù)。奇妙的是,這些數(shù)據(jù)源可以多種多樣:即可以是多種關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),也可以是非關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),比如Microsoft Excel、xml等。本文將首先探討多個(gè)關(guān)系數(shù)據(jù)庫(kù)之間的聯(lián)合訪問(wèn)。
我們不如先來(lái)動(dòng)手配置一個(gè)簡(jiǎn)單的聯(lián)合數(shù)據(jù)庫(kù)實(shí)例來(lái)培養(yǎng)一下您的成就感,這樣可以為您理解聯(lián)合數(shù)據(jù)庫(kù)所設(shè)計(jì)的概念及繁多的參數(shù)選項(xiàng)增加一點(diǎn)信心。我一向喜歡這種文章風(fēng)格,我相信很多人也會(huì)喜歡的。
要進(jìn)行下面的試驗(yàn),您必須先安裝DB2 v8.2 ESE (Enterprise Server Edition) for Windows。DB2的安裝不是本文的討論范圍。
假如您的DB2已經(jīng)安裝好了,那就開(kāi)始吧。
1) 使用windows管理員權(quán)限的用戶登陸windows,筆者用的是Administrator。
2) 為了完成下面的演示,您還需要另外一個(gè)windows用戶,筆者使用安裝DB2的時(shí)候自動(dòng)創(chuàng)建的db2admin用戶。您當(dāng)然也可以使用其他windows用戶。
3) 確保您已經(jīng)創(chuàng)建了至少一個(gè)可用的實(shí)例。筆者使用缺省創(chuàng)建的DB2實(shí)例。您可以通過(guò)在命令窗口運(yùn)行DB2START命令來(lái)啟動(dòng)這個(gè)實(shí)例
4) 在DB2命令窗口運(yùn)行DB2 GET DBM CFG 來(lái)查看當(dāng)前實(shí)例的配置參數(shù),并確保FEDERATED參數(shù)設(shè)置為YES,您可以通過(guò)運(yùn)行DB2 UPDATE DBM CFG USING FEDERATED YES來(lái)設(shè)置這個(gè)參數(shù)。修改這個(gè)參數(shù)后,必須重新啟動(dòng)實(shí)例才會(huì)生效(DB2STOP/DB2START)
5) 卻保您已經(jīng)創(chuàng)建了DB2樣本數(shù)據(jù)庫(kù)SAMPLE,如果您還沒(méi)有創(chuàng)建,可以通過(guò)在DB2命令行窗口運(yùn)行db2sampl命令來(lái)創(chuàng)建它。此樣本數(shù)據(jù)庫(kù)包含了一些樣本表和數(shù)據(jù),使用這個(gè)數(shù)據(jù)庫(kù)作演示可以使我們節(jié)省一點(diǎn)時(shí)間。
6) 創(chuàng)建另外一個(gè)數(shù)據(jù)庫(kù),筆者使用名字TESTDB:
DB2 CREATE DB TESTDB
7) 運(yùn)行DB2CE命令打開(kāi)DB2命令編輯器,并在這兒完成下面的步驟。
8) 連接到sample數(shù)據(jù)庫(kù),并創(chuàng)建DRDA包裝器(WRAPPER).
CONNECT TO SAMPLE;
CREATE WRAPPER DRDA;
9) 創(chuàng)建服務(wù)器(SERVER)
CREATE SERVER TESTDB TYPE DB2/UDB VERSION '8.2' WRAPPER "DRDA" AUTHID "db2admin" PASSWORD "db2admin" OPTIONS( ADD DBNAME 'TESTDB', PASSWORD 'Y');
10) 創(chuàng)建用戶映射
CREATE USER MAPPING FOR "ADMINISTRATOR" SERVER "TESTDB" OPTIONS ( ADD REMOTE_AUTHID 'db2admin', ADD REMOTE_PASSWORD 'db2admin') ;
11) 使用db2admin用戶連接到TESTDB數(shù)據(jù)庫(kù)、創(chuàng)建表WORKITEM、并插入樣本數(shù)據(jù)。
CONNECT TO TESTDB USER db2admin USING db2admin;
CREATE TABLE WORKITEM (
ITEMNO CHAR(4) NOT NULL,
ITEMNAME VARCHAR(50) NOT NULL,
EMPNO CHAR(6),
PRIMARY KEY (ITEMNO)
);
INSERT INTO WORKITEM(ITEMNO,ITEMNAME,EMPNO) VALUES ('0001','測(cè)試程序模塊1','000010');
INSERT INTO WORKITEM(ITEMNO,ITEMNAME,EMPNO) VALUES ('0002','完成模塊2的開(kāi)發(fā)','000020');
INSERT INTO WORKITEM(ITEMNO,ITEMNAME,EMPNO) VALUES ('0003','聯(lián)系客戶A','000030');
12) 連接到SAMPLE數(shù)據(jù)庫(kù),并為TESTDB數(shù)據(jù)庫(kù)中的WORKITEM表創(chuàng)建昵稱:
CONNECT TO SAMPLE;
CREATE NICKNAME ADMINISTRATOR.WORKITEM FOR TESTDB.DB2ADMIN.WORKITEM;
13) OK,現(xiàn)在我們就可以在SAMPLE數(shù)據(jù)庫(kù)中使用TESTDB數(shù)據(jù)庫(kù)中的WORKITEM表了,而且還可以和SAMPLE數(shù)據(jù)庫(kù)的EMPLOYEE表聯(lián)合查詢:
SELECT * FROM WORKITEM;
我們來(lái)查詢由誰(shuí)來(lái)負(fù)責(zé)哪個(gè)工作項(xiàng)目:
SELECT A.ITEMNO,A.ITEMNAME,A.EMPNO,B.FIRSTNME,B.LASTNAME FROM WORKITEM A LEFT OUTER JOIN EMPLOYEE B ON A.EMPNO=B.EMPNO;
到此為止,SAMPLE數(shù)據(jù)庫(kù)就已經(jīng)變成了聯(lián)合數(shù)據(jù)庫(kù),您通過(guò)在SAMPLE數(shù)據(jù)庫(kù)中為TESTDB數(shù)據(jù)庫(kù)中的表或視圖創(chuàng)建昵稱來(lái)訪問(wèn)他們,很好玩吧。:)