實體上存放于網絡的多個Oracle資料庫,邏輯上可以看成一個單一的大型資料庫,使用者可以通過網絡對異地資料庫中的資料進行存取,而
實體上存放于網絡的多個Oracle資料庫,邏輯上可以看成一個單一的大型資料庫,使用者可以通過網絡對異地資料庫中的資料進行存取,而伺服器之間的協同處理
對于工作站使用者及應用程式而言是完全透明的,開發人員無需關心網絡的連結細節、資料在網絡節點中的具體分布情況和伺服器間的協調工作過程。資料庫之間的鍊
接建立在DATABASE LINK上。要建立一個DATABASE LINK,必須首先在建立連結的資料庫上設定連結字元串,即配置一個遠端資料庫的本地網絡服務名。
資料庫全局名稱可以用以下指令查出:
SQL>SELECT * FROM GLOBAL_NAME;
修改可以用以下語句來修改參數值:
SQL>ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;
oracle資料庫之間進行連接配接通訊:
建立資料庫連結的文法如下:
CREATE [PUBLIC] DATABASE LINK link_name
CONNECT TO username IDENTIFIED BY password
USING 'zytydic'
其中:
zytydic為本地tnsname.ora中定義的連結串,内容如下:
zytydic =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
)
)
注意:建立資料庫連結的帳号必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統權限,用來登入到遠端資料庫的帳号必須有CREATE SESSION權限。
這兩種權限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權限在DBA中)。一個公用資料庫連結對于資料庫中的所有使用者都是可用的,,而一個私有連結僅
對建立它的使用者可用。由一個使用者給另外一個使用者授權私有資料庫連結是不可能的,一個資料庫連結要麼是公用的,要麼是私有的。
建立資料庫連結時,還可以使用預設登入方式,即不指定遠端資料庫的使用者名和密碼:
create public database link test_default_type_dblink
using 'zytydic';
在不指定使用者名和密碼的情況下,ORACLE使用目前的使用者名和密碼登入到遠端資料庫,假如你本地是以emcd使用者登入的本地的資料庫db_A,那麼建立的DB
Link test_default_type_dblink就是以本地的使用者賬戶資訊建立的,當要以此DB Link連接配接檢視遠端的資料庫db_B的資料資訊時,前提必須是db_B上也有
同樣的賬戶存在,即db_B上也有賬戶emcd且密碼和db_A上的emcd的密碼也是一緻的,否則此DB Link不可用。USING後面指定的是連結字元串,也就是遠端
資料庫的網絡服務名,這個服務名儲存在TNSNAMES.ORA檔案中,在該檔案中定義了協定、主機名、端口和資料庫名。
如果有兩台資料庫伺服器db_A和db_B,db_A下使用者user_a需要用database link通路到db_B下user_b的資料時,有如下步驟:
(a).首先使用者user_b,這個使用者必須要有select 權限.
(b).在db_A上的tnsnames.ora中需要建立一個連接配接字元串,即上面的zytydic,可以從db_A連接配接到db_B.
(c).然後在登陸到db_A上建立db link,格式如下:
create database link link_A_to_B_name connect to user_b identified by user_b的password using 'tnsname_AtoB';
tnsname_AtoB就是到tnsname.ora中遠端主機的連接配接字元串
在我自己的機子上建立的實際的DB Link SQL語句如下:
create database link taowei_to_101 connect to ga_bzk identified by ga_bzk using 'zytydic';
(d).測試是否能夠讀取資料.
select * from [email protected]_AtoB_name結果為:DUMMY X表示設定成功
這時候就可以通過taowei_to_101檢視遠端主機上相關的資料資訊了:
select * from [email protected]_to_101;
删除資料庫連結的語句是:
DROP [PUBLIC] DATABASE LINK taowei_to_101
資料庫連結的引用
一般情況下引用資料庫連結,可以直接将其放到調用的表名或視圖名稱後面,中間使用一個 @ 作為分割符:
SELECT * FROM [email protected]_to_101;
對于經常使用的資料庫連結,可以建立一個本地的同義詞,友善使用:
CREATE SYNONYM tbl_bjflb__syn FOR [email protected]_to_101;
還可以建立一個本地的遠端視圖,友善使用:
CREATE VIEW tbl_bjflb AS SELECT * FROM [email protected]_to_101 where… ;
現在本視圖可與本地資料庫中的任何其它視圖一樣對待,也可以授權給其它使用者,通路此視圖,但該使用者必須有通路資料庫連結的權限。
對于另外一種情況,所要通路的表不在資料庫連結中指定的遠端帳戶下,但該帳戶有通路該表的權限,那麼我們在表名前要加上該表的使用者名:
SELECT * FROM [email protected]_to_101 ;
還可以建立快照(snapshot)通過dblink實作遠端資料自動傳輸。
檢視所有的資料庫連結,進入系統管理者SQL>操作符下,運作指令:
SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';

本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!