Decode360's Blog

          業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
          GLOBAL_NAMES參數研究
          ?
          ??? 最近在配置Stream時,發現必須要把GLOBAL_NAMES參數的指設置為TRUE,具體原因為何不知。但是發現在設置了該參數之后,數據庫每天的物化視圖刷新出現了問題。之后查明原因,是DBLINK出現了問題。隨后研究了一下GLOBAL_NAMES這個參數,發現其實很有意思的事情是:GLOBAL_NAMES參數并不是用來控制GLOBAL_NAME的,而是用來限制DBLINK的使用。下面簡單了解一下這個參數:
          ?
          ??? GLOBAL_NAMES參數的作用,簡單得說來就是:當GLOBAL_NAMES參數設置為TRUE時,使用DBLINK的名稱必須與被連接庫的GLOBAL_NAME一致。本來是想做幾個簡單的測試,但是發現網上已經有人寫過了,想想要再配置數據庫也比較麻煩,就直接拷過來了:
          ?
          ************************************************************************************

          http://space.itpub.net/69924/viewspace-192128
          當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的數據庫鏈接。
          ******************************************************************************************************
          ?
          ?
          ?
          ?
          posted on 2009-06-27 20:49 decode360 閱讀(627) 評論(0)  編輯  收藏 所屬分類: 07.Oracle
          主站蜘蛛池模板: 富民县| 马山县| 漳平市| 闽侯县| 舒兰市| 巴楚县| 娄底市| 肃宁县| 东台市| 万全县| 广宁县| 石楼县| 嘉兴市| 东兴市| 万载县| 邵东县| 修文县| 舟曲县| 新竹县| 七台河市| 舒城县| 启东市| 焦作市| 仙游县| 额济纳旗| 慈溪市| 文安县| 田阳县| 龙里县| 咸宁市| 佛学| 鄂尔多斯市| 洮南市| 凤翔县| 濉溪县| 甘洛县| 体育| 卓资县| 兰考县| 沙坪坝区| 明溪县|