Oracle數據庫GLOBAL_NAMES參數的相關知識是本文我們主要要介紹的內容,當GLOBAL_NAMES參數設置為TRUE時,使用DATABASE LINK時,DATABASE LINK的名稱必須與被連接庫的GLOBAL_NAME一致。下面做一個測試,在測試中,創建數據庫鏈接的庫為XJ(Windows 2003 ORACLE 10g 10.2.0.1),被鏈接的庫為DMDB(Linux AS5 Oracle 10g 10.2.0.1 RAC)。
首先查看DMDB的相關配置:
- SQL> show parameter global_names
- NAME TYPE VALUE
- ------------------------------------ ----------- ---------
- global_names boolean FALSE
- SQL> select * from global_name;;
- GLOBAL_NAME
- ----------------------------------------------------------
- DMDB
可以看到這個被鏈接的庫其global_names參數為FALSE。
要創建數據庫鏈接的庫的配置:
- 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';
- 數據庫鏈接已創建。
- SQL> select * from dual@test_link ;
- D
- -
- X
可以看到數據庫鏈接工作正常。
在DMDB庫上將global_names設為TRUE:
SQL> alter system set global_names=true;
系統已更改。
在XJ庫上再次查詢,並新建一個DATABASE LINK再進行查詢:
- SQL> select * from dual@test_link ;
- D
- -
- X
- SQL> create database link test_link2 connect to test identifIEd by test using 'DMDB';
- 數據庫鏈接已創建。
- SQL> select * from dual@test_link2 ;
- D
- -
- X
此時可以看數據庫鏈接工作正常。我們再將XJ庫的global_names參數設置為TRUE:
- SQL> alter system set global_names=true;
- 系統已更改。
- SQL> select * from dual@test_link2 ;
- select * from dual@test_link2
- *第 1 行出現錯誤:
- ORA-02085: 數據庫鏈接 TEST_LINK2 連接到 DMDB
- SQL> select * from dual@test_link
- select * from dual@test_link
- *第 1 行出現錯誤:
- ORA-02085: 數據庫鏈接 TEST_LINK 連接到 DMDB
- 而再次將XJ庫的global_names設為FALSE,則數據庫鏈接又可用了。
- SQL> alter system set global_names=false;
- 系統已更改。
- SQL> select * from dual@test_link ;
- D
- -
- X
- SQL> select * from dual@test_link2 ;
- D
- -
- X
再將DMDB庫的global_names設為FALSE,數據庫鏈接仍然可用:
- 在DMDB庫上:
- SQL> alter system set global_names=false;
- 系統已更改。
- 在XJ庫上:
- SQL> select * from dual@test_link ;
- D
- -
- X
可以看到,鏈接仍然可以用。如果在DMDB庫上創建鏈接到XJ庫上,可以觀察到同樣的結果。可以得出一個結論:global_names參數設置為FALSE,影響的是創建數據庫鏈接的那個庫對數據庫鏈接的使用。也就是說,如果一個庫(實例)的global_names參數設值為TRUE,則該庫連接其他庫的數據庫鏈接,其名稱必須要與被連接的庫的global_name相同:
- 在XJ庫上:
- SQL> alter system set global_names=true;
- 系統已更改。
- SQL> create database link dmdb connect to test identifIEd by test using 'dmdb';
- 數據庫鏈接已創建。
- SQL> select * from dual@dmdb ;
- D
- -
- X
- SQL> select * from dual@test_link ;
- select * from dual@test_link
- *
- 第 1 行出現錯誤:
- ORA-02085: 數據庫鏈接 TEST_LINK 連接到 DMDB
- SQL> select * from dual@test_link2 ;
- select * from dual@test_link2
- *第 1 行出現錯誤:
- ORA-02085: 數據庫鏈接 TEST_LINK2 連接到 DMDB
如果在GLOBAL_NAMES設置為TRUE的情況下,如果要建多個數據庫鏈接到同一個庫,怎麼辦呢?因為數據庫鏈接的名稱必須與目標庫的GLOBAL_NAME相同。可以按如下的方法:
- SQL> create database linkdmdb@link1connect to test identifIEd by test using 'dmdb';
- 數據庫鏈接已創建。
- SQL> create database linkdmdb@link2connect to test identifIEd by test using 'dmdb';
- 數據庫鏈接已創建。
- SQL> select * fromdual@dmdb ;
- D
- -
- X
- SQL> select * fromdual@dmdb@link1 ;
- D
- -
- X
- SQL> select * fromdual@dmdb@link2 ;
- D
- -
- X
也就是在GLOBAL_NAME後面加上@再加上一個標識。這樣就能夠創建多個數據庫鏈接到同一目標庫上了。
另外在創建數據庫鏈接時,不能給其他SCHEMA創建鏈接,這是因為數據庫鏈接(database link)其名稱可以含有'.'即點號。比如A用戶想給B用戶創建一個DBLINK名叫LINKB,CREATE DATABASE LINK B.LINKB ......, 這個語句將會實際創建一個A用戶下的名為B.LINKB的數據庫鏈接。
關於Oracle數據庫GLOBAL_NAMES參數的相關知識就介紹到這裡了,希望本次的介紹能夠對您有所收獲!