當(dāng)GLOBAL_NAMES參數(shù)設(shè)置為TRUE時,使用DATABASE LINK時,DATABASE LINK的名稱必須與被連接庫的GLOBAL_NAME一致。下面做一個測試,在測試中,創(chuàng)建數(shù)據(jù)庫鏈接的庫為XJ(WINDOWS 2003 ORACLE 10g 10.2.0.1),被鏈接的庫為DMDB(LINUX AS5 ORACLE 10g 10.2.0.1 RAC)
首先查看DMDB的相關(guān)配置:
SQL> show parameter global_names
NAME TYPE VALUE
------------------------------------ ----------- ---------
global_names boolean FALSE
SQL> select * from global_name;;
GLOBAL_NAME
----------------------------------------------------------
DMDB
可以看到這個被鏈接的庫其global_names參數(shù)為FALSE。
要創(chuàng)建數(shù)據(jù)庫鏈接的庫的配置:
SQL> show parameter global_names
NAME TYPE VALUE
------------------------------------ ----------- -------
global_names boolean FALSE
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------
XJ
然后做下面的操作:
SQL> create database link test_link connect to test identified by test using 'DMDB';
數(shù)據(jù)庫鏈接已創(chuàng)建。
D
-
X
可以看到數(shù)據(jù)庫鏈接工作正常。
在DMDB庫上將global_names設(shè)為TRUE:
SQL> alter system set global_names=true;
系統(tǒng)已更改。
在XJ庫上再次查詢,并新建一個DATABASE LINK再進(jìn)行查詢:
D
-
X
SQL> create database link test_link2 connect to test identified by test using 'DMDB';
數(shù)據(jù)庫鏈接已創(chuàng)建。
D
-
X
此時可以看數(shù)據(jù)庫鏈接工作正常。我們再將XJ庫的global_names參數(shù)設(shè)置為TRUE:
SQL> alter system set global_names=true;
系統(tǒng)已更改。
而再次將XJ庫的global_names設(shè)為FALSE,則數(shù)據(jù)庫鏈接又可用了。
SQL> alter system set global_names=false;
系統(tǒng)已更改。
D
-
X
D
-
X
再將DMDB庫的global_names設(shè)為FALSE,數(shù)據(jù)庫鏈接仍然可用:
在DMDB庫上:
SQL> alter system set global_names=false;
系統(tǒng)已更改。
在XJ庫上:
D
-
X
可以看到,鏈接仍然可以用。
如果在DMDB庫上創(chuàng)建鏈接到XJ庫上,可以觀察到同樣的結(jié)果。
可以得出一個結(jié)論:global_names參數(shù)設(shè)置為FALSE,影響的是創(chuàng)建數(shù)據(jù)庫鏈接的那個庫對數(shù)據(jù)庫鏈接的使用。也就是說,如果一個庫(實例)的global_names參數(shù)設(shè)值為TRUE,則該庫連接其他庫的數(shù)據(jù)庫鏈接,其名稱必須要與被連接的庫的global_name相同:
在XJ庫上:
SQL> alter system set global_names=true;
系統(tǒng)已更改。
SQL> create database link dmdb connect to test identified by test using 'dmdb';
數(shù)據(jù)庫鏈接已創(chuàng)建。
如果在GLOBAL_NAMES設(shè)置為TRUE的情況下,如果要建多個數(shù)據(jù)庫鏈接到同一個庫,怎么辦呢?因為數(shù)據(jù)庫鏈接的名稱必須與目標(biāo)庫的GLOBAL_NAME相同?梢园慈缦碌姆椒ǎ
數(shù)據(jù)庫鏈接已創(chuàng)建。
數(shù)據(jù)庫鏈接已創(chuàng)建。
D
-
X
D
-
X
D
-
X
也就是在GLOBAL_NAME后面加上@再加上一個標(biāo)識。這樣就能夠創(chuàng)建多個數(shù)據(jù)庫鏈接到同一目標(biāo)庫上了。
另外在創(chuàng)建數(shù)據(jù)庫鏈接時,不能給其他SCHEMA創(chuàng)建鏈接,這是因為數(shù)據(jù)庫鏈接(database link)其名稱可以含有'.'即點號。比如A用戶想給B用戶創(chuàng)建一個DBLINK名叫LINKB,CREATE DATABASE LINK B.LINKB ......, 這個語句將會實際創(chuàng)建一個A用戶下的名為B.LINKB的數(shù)據(jù)庫鏈接。
******************************************************************************************************