在Oracle中,解釋GLOBAL_NAMES設爲TRUE的用途。程序員
GLOBAL_NAMES指明鏈接數據庫的方式。若是這個參數設置爲TRUE,那麼在創建數據庫連接時就必須用相同的名字鏈接遠程數據庫。面試
當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。網絡
要建立數據庫連接的庫的配置:app
如下是代碼片斷: SQL> show parameter global_names NAME TYPE VALUE ------------------------------------ ----------- ------- global_names boolean FALSE SQL> select * from global_name; GLOBAL_NAME -------------------------------------------------------- XJ |
而後作下面的操做:ide
如下是代碼片斷: |
能夠看到數據庫連接工做正常。測試
在DMDB庫上將global_names設爲TRUE:spa
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程序員面試筆試寶典》,做者:小麥苗
DB寶分享的IT資料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag
● 本文做者:小麥苗,只專一於數據庫的技術,更注重技術的運用
● 做者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列題目來源於做者的學習筆記,部分整理自網絡,如有侵權或不當之處還請諒解
● 版權全部,歡迎分享本文,轉載請保留出處
● QQ:646634621 QQ羣:23016159九、618766405
● 微信:lhrbestxh
● 微信公衆號:DB寶
● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最實用的技能培訓
● 題目解答如有不當之處,還望各位朋友批評指正,共同進步
長按下圖識別二維碼或微信掃描下圖二維碼來關注小麥苗的微信公衆號:DB寶,學習最實用的數據庫技術。
本文分享自微信公衆號 - DB寶(lhrdba)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。