1、數(shù)據(jù)庫(kù)鏈路的建立語(yǔ)法一般是:CREATE DATABASE LINK [db_link_name] CONNECT TO
[user_name] IDENTIFIED BY [passWord] USING '[tns_name]';
其中:
[DB_LINK_NAME]:是所要連接的數(shù)據(jù)庫(kù)的服務(wù)名,也就是該數(shù)據(jù)庫(kù)的真實(shí)名稱(通常就是SID)。
[USRE_NAME]:是所要連接的用戶名稱。
[PASSWORD]:是所要連接的用戶的密碼。
[TNS_NAME]:是所要連接的數(shù)據(jù)庫(kù)的服務(wù)命名,也就是在本機(jī)上建立的NET8服務(wù)命名。
2、當(dāng)使用當(dāng)前用戶做為連接者時(shí),語(yǔ)法可以是:CREATE DATABASE LINK [db_link_name] CONNECT TO CURRENT_USER USING '[tns_name]' (某些情況下這種方法建立的數(shù)據(jù)庫(kù)鏈路都未處于活動(dòng)狀態(tài),不知道是不是語(yǔ)法有誤,暫不推薦使用)。
3、當(dāng)使用已連接用戶做為連接者時(shí),語(yǔ)法可以是:CREATE DATABASE LINK [db_link_name]
USING '[tns_name]' 。
4、要建立公共的數(shù)據(jù)庫(kù)鏈路語(yǔ)法可以是:只要在CREATE后加PUBLIC關(guān)鍵字就可以了。
5、假如你在init.ora文件里的global_names = true只能用上面的方法,如果global_names =false,[DB_LINK_NAME]不一定要是數(shù)據(jù)庫(kù)的真實(shí)名稱,可以是一個(gè)隨意的名字。也就是說,當(dāng)global_names = true時(shí),數(shù)據(jù)庫(kù)的每一個(gè)用戶只能有一個(gè)數(shù)據(jù)庫(kù)鏈路,而當(dāng)global_names = false時(shí),每一個(gè)用戶都可以建立N多個(gè)鏈路,但一般情況下是沒有意義的。
二、數(shù)據(jù)庫(kù)鏈路的使用:
1、數(shù)據(jù)庫(kù)鏈路的主要用途就是實(shí)現(xiàn)對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)的訪問,你可以通過數(shù)據(jù)庫(kù)鏈路直接對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)
的表進(jìn)行讀寫,也可以在本地建立遠(yuǎn)程數(shù)據(jù)庫(kù)的視圖和同意詞,另外在進(jìn)行雙機(jī)熱備份時(shí)也要用到數(shù)據(jù)庫(kù)鏈路。
2、直接訪問:SELECT * FROM [user_name].[table_name]@[db_link_name];INSERT,UPDATE,DELETE等也同樣適用。
3、建立同義詞:CREATE SYNONYM [user_name].[synonym_name] FOR [user_name].[table_name]@
[db_link_name] ; 視圖也是一個(gè)道理。
4、由于雙機(jī)熱備是另一個(gè)復(fù)雜的問題,本文暫不贅述。如果想在兩個(gè)數(shù)據(jù)庫(kù)間實(shí)現(xiàn)幾個(gè)表的同步,做一個(gè)雙機(jī)太復(fù)雜,可以考慮用觸發(fā)器來解決,在觸發(fā)器中用以上方法引用遠(yuǎn)程表,對(duì)其進(jìn)行插入,刪除也可以做到同步。
參考示例如下:
數(shù)據(jù)庫(kù)之間的鏈接建立在DATABASE LINK上。要?jiǎng)?chuàng)建一個(gè)DB LINK,必須先在每個(gè)數(shù)據(jù)庫(kù)服務(wù)器上設(shè)置鏈接字符串。
1、鏈接字符串即服務(wù)名,首先在本地配置一個(gè)服務(wù)名,地址指向遠(yuǎn)程的數(shù)據(jù)庫(kù)地址,服務(wù)名取為將來你要使用的數(shù)據(jù)庫(kù)鏈名:
2、創(chuàng)建數(shù)據(jù)庫(kù)鏈接,
進(jìn)入系統(tǒng)管理員SQL>操作符下,運(yùn)行命令:
SQL>create public database link beijing connect to scott identified by tiger using 'tobeijing';
則創(chuàng)建了一個(gè)以scott用戶和北京數(shù)據(jù)庫(kù)的鏈接beijing,我們可以查詢北京的scott數(shù)據(jù):
SQL>select * from emp@beijing;
這樣就可以把深圳和北京scott用戶的數(shù)據(jù)做成一個(gè)整體來處理。
3、建立同義詞,為了使有關(guān)分布式操作更透明,Oracle數(shù)據(jù)庫(kù)里有同義詞的對(duì)象synonym
SQL>create synonym bjscottemp for emp@beijing;
于是就可以用bjscottemp來替代帶@符號(hào)的分布式鏈接操作emp@beijing。
4、查看所有的數(shù)據(jù)庫(kù)鏈接,進(jìn)入系統(tǒng)管理員SQL>操作符下,運(yùn)行命令:
SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';
如果子使用數(shù)據(jù)連接出現(xiàn)錯(cuò)誤ORA-02085
SQL> SHOW PARAMETER GLOBAL_NAMES
global_names boolean
TRUE
SQL> ALTER SYSTEM SET GLOBAL_NAMES=FALSE;
簡(jiǎn)單查了一下,Piner的faq上沒有,前面也沒有人提到。
使用數(shù)據(jù)連接可以很方便的引用其它數(shù)據(jù)庫(kù)的數(shù)據(jù),但是設(shè)置不當(dāng)可能遇到ORA-02085錯(cuò)誤。如果被連接對(duì)方的GLOBAL_NAMES參數(shù)設(shè)置成了TRUE,那么要求數(shù)據(jù)庫(kù)連接與對(duì)方實(shí)例名有相同的名稱。這樣就可以通過下面3中的任意一種方法來解決:
1.修改對(duì)方的GLOBAL_NAMES參數(shù)為FALSE
2.將對(duì)方的GLOBAL_NAME設(shè)置成與數(shù)據(jù)庫(kù)連接相同的名稱
3.將數(shù)據(jù)庫(kù)連接刪掉重新創(chuàng)建成與對(duì)方實(shí)例名相同的數(shù)據(jù)庫(kù)連接。下面是測(cè)試結(jié)果:
SQL> CREATE PUBLIC DATABASE LINK "MASTER.COM" USING 'ORA9I';
數(shù)據(jù)庫(kù)鏈接已創(chuàng)建。
SQL> SELECT * FROM DUAL@MASTER.COM;
SELECT * FROM DUAL@MASTER.COM
*
ERROR 位于第 1 行:
ORA-02085: 數(shù)據(jù)庫(kù)鏈接MASTER.COM與ORA9I相連結(jié)
SQL> SHOW PARAMETER GLOBAL_NAMES
global_names boolean
TRUE
select * from v$parameter where name = 'global_names';
SQL> ALTER SYSTEM SET GLOBAL_NAMES=FALSE;
或者修改D:/Oracle/admin/einfo/pfile/init.ora文件中g(shù)lobal_names = false,重啟數(shù)據(jù)庫(kù)。
SQL> SELECT * FROM DUAL@MASTER.COM;
X
SQL> ALTER SYSTEM SET GLOBAL_NAMES=TRUE;
系統(tǒng)已更改。
SQL> SELECT * FROM DUAL@MASTER.COM;
SELECT * FROM DUAL@MASTER.COM
ERROR 位于第 1 行:
ORA-02085: 數(shù)據(jù)庫(kù)鏈接MASTER.COM與ORA9I相連結(jié)
SQL> ALTER DATABASE RENAME GLOBAL_NAME TO MASTER.COM;
數(shù)據(jù)庫(kù)已更改。
SQL> SELECT * FROM DUAL@MASTER.COM;
新聞熱點(diǎn)
疑難解答
圖片精選