Decode360's Blog

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

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
          GLOBAL_NAMES參數(shù)研究
          ?
          ??? 最近在配置Stream時(shí),發(fā)現(xiàn)必須要把GLOBAL_NAMES參數(shù)的指設(shè)置為TRUE,具體原因?yàn)楹尾恢5前l(fā)現(xiàn)在設(shè)置了該參數(shù)之后,數(shù)據(jù)庫(kù)每天的物化視圖刷新出現(xiàn)了問(wèn)題。之后查明原因,是DBLINK出現(xiàn)了問(wèn)題。隨后研究了一下GLOBAL_NAMES這個(gè)參數(shù),發(fā)現(xiàn)其實(shí)很有意思的事情是:GLOBAL_NAMES參數(shù)并不是用來(lái)控制GLOBAL_NAME的,而是用來(lái)限制DBLINK的使用。下面簡(jiǎn)單了解一下這個(gè)參數(shù):
          ?
          ??? GLOBAL_NAMES參數(shù)的作用,簡(jiǎn)單得說(shuō)來(lái)就是:當(dāng)GLOBAL_NAMES參數(shù)設(shè)置為TRUE時(shí),使用DBLINK的名稱必須與被連接庫(kù)的GLOBAL_NAME一致。本來(lái)是想做幾個(gè)簡(jiǎn)單的測(cè)試,但是發(fā)現(xiàn)網(wǎng)上已經(jīng)有人寫過(guò)了,想想要再配置數(shù)據(jù)庫(kù)也比較麻煩,就直接拷過(guò)來(lái)了:
          ?
          ************************************************************************************

          http://space.itpub.net/69924/viewspace-192128
          當(dāng)GLOBAL_NAMES參數(shù)設(shè)置為TRUE時(shí),使用DATABASE LINK時(shí),DATABASE LINK的名稱必須與被連接庫(kù)的GLOBAL_NAME一致。下面做一個(gè)測(cè)試,在測(cè)試中,創(chuàng)建數(shù)據(jù)庫(kù)鏈接的庫(kù)為XJ(WINDOWS 2003 ORACLE 10g 10.2.0.1),被鏈接的庫(kù)為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
          ?
          可以看到這個(gè)被鏈接的庫(kù)其global_names參數(shù)為FALSE。
          ?
          要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)鏈接的庫(kù)的配置:
          ?
          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ù)庫(kù)鏈接已創(chuàng)建。
          ?
          SQL> select * from dual@test_link ;
          ?
          D
          -
          X
          ?
          可以看到數(shù)據(jù)庫(kù)鏈接工作正常。
          ?
          在DMDB庫(kù)上將global_names設(shè)為TRUE:
          ?
          SQL> alter system set global_names=true;
          ?
          系統(tǒng)已更改。
          ?
          在XJ庫(kù)上再次查詢,并新建一個(gè)DATABASE LINK再進(jìn)行查詢:
          ?
          SQL> select * from dual@test_link ;
          ?
          D
          -
          X
          ?
          SQL> create database link test_link2 connect to test identified by test using 'DMDB';
          ?
          數(shù)據(jù)庫(kù)鏈接已創(chuàng)建。
          ?
          SQL> select * from dual@test_link2 ;
          ?
          D
          -
          X
          ?
          此時(shí)可以看數(shù)據(jù)庫(kù)鏈接工作正常。我們?cè)賹J庫(kù)的global_names參數(shù)設(shè)置為TRUE:
          ?
          SQL> alter system set global_names=true;
          ?
          系統(tǒng)已更改。
          ?
          SQL> select * from dual@test_link2 ;
          select * from
          dual@test_link2
          ?????????????????? *
          第 1 行出現(xiàn)錯(cuò)誤:
          ORA-02085: 數(shù)據(jù)庫(kù)鏈接 TEST_LINK2 連接到 DMDB
          ?
          SQL> select * from dual@test_link
          select * from dual@test_link
          ?????????????????? *
          第 1 行出現(xiàn)錯(cuò)誤:
          ORA-02085: 數(shù)據(jù)庫(kù)鏈接 TEST_LINK 連接到 DMDB
          ?
          而再次將XJ庫(kù)的global_names設(shè)為FALSE,則數(shù)據(jù)庫(kù)鏈接又可用了。
          SQL> alter system set global_names=false;
          ?
          系統(tǒng)已更改。
          ?
          SQL> select * from dual@test_link ;
          ?
          D
          -
          X
          ?
          SQL> select * from dual@test_link2 ;
          ?
          D
          -
          X
          ?
          再將DMDB庫(kù)的global_names設(shè)為FALSE,數(shù)據(jù)庫(kù)鏈接仍然可用:
          ?
          在DMDB庫(kù)上:
          ?
          SQL> alter system set global_names=false;
          ?
          系統(tǒng)已更改。
          ?

          在XJ庫(kù)上:
          ?
          SQL> select * from dual@test_link ;
          ?
          D
          -
          X
          ?
          可以看到,鏈接仍然可以用。
          如果在DMDB庫(kù)上創(chuàng)建鏈接到XJ庫(kù)上,可以觀察到同樣的結(jié)果。
          可以得出一個(gè)結(jié)論:global_names參數(shù)設(shè)置為FALSE,影響的是創(chuàng)建數(shù)據(jù)庫(kù)鏈接的那個(gè)庫(kù)對(duì)數(shù)據(jù)庫(kù)鏈接的使用。也就是說(shuō),如果一個(gè)庫(kù)(實(shí)例)的global_names參數(shù)設(shè)值為TRUE,則該庫(kù)連接其他庫(kù)的數(shù)據(jù)庫(kù)鏈接,其名稱必須要與被連接的庫(kù)的global_name相同:
          ?
          在XJ庫(kù)上:
          ?
          SQL> alter system set global_names=true;
          ?
          系統(tǒng)已更改。
          ?
          SQL> create database link dmdb connect to test identified by test using 'dmdb';
          ?
          數(shù)據(jù)庫(kù)鏈接已創(chuàng)建。
          ?
          SQL> select * from dual@dmdb ;
          ?
          D
          -
          X
          SQL> select * from
          dual@test_link ;
          select * from
          dual@test_link
          *
          第 1 行出現(xiàn)錯(cuò)誤:
          ORA-02085: 數(shù)據(jù)庫(kù)鏈接 TEST_LINK 連接到 DMDB
          ?

          SQL> select * from dual@test_link2 ;
          select * from
          dual@test_link2
          ?????????????????? *
          第 1 行出現(xiàn)錯(cuò)誤:
          ORA-02085: 數(shù)據(jù)庫(kù)鏈接 TEST_LINK2 連接到 DMDB
          ?

          如果在GLOBAL_NAMES設(shè)置為TRUE的情況下,如果要建多個(gè)數(shù)據(jù)庫(kù)鏈接到同一個(gè)庫(kù),怎么辦呢?因?yàn)閿?shù)據(jù)庫(kù)鏈接的名稱必須與目標(biāo)庫(kù)的GLOBAL_NAME相同。可以按如下的方法:
          ?
          SQL> create database linkdmdb@link1connect to test identified by test using 'dmdb';
          ?
          數(shù)據(jù)庫(kù)鏈接已創(chuàng)建。
          ?
          SQL> create database linkdmdb@link2connect to test identified by test using 'dmdb';
          ?
          數(shù)據(jù)庫(kù)鏈接已創(chuàng)建。
          ?
          SQL> select * fromdual@dmdb ;
          ?
          D
          -
          X
          ?
          SQL> select * fromdual@dmdb@link1 ;
          ?
          D
          -
          X
          ?
          SQL> select * fromdual@dmdb@link2 ;
          ?
          D
          -
          X
          ?
          也就是在GLOBAL_NAME后面加上@再加上一個(gè)標(biāo)識(shí)。這樣就能夠創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)鏈接到同一目標(biāo)庫(kù)上了。
          ?
          另外在創(chuàng)建數(shù)據(jù)庫(kù)鏈接時(shí),不能給其他SCHEMA創(chuàng)建鏈接,這是因?yàn)閿?shù)據(jù)庫(kù)鏈接(database link)其名稱可以含有'.'即點(diǎn)號(hào)。比如A用戶想給B用戶創(chuàng)建一個(gè)DBLINK名叫LINKB,CREATE DATABASE LINK B.LINKB ......, 這個(gè)語(yǔ)句將會(huì)實(shí)際創(chuàng)建一個(gè)A用戶下的名為B.LINKB的數(shù)據(jù)庫(kù)鏈接。
          ******************************************************************************************************
          ?
          ?
          ?
          ?
          posted on 2009-06-27 20:49 decode360 閱讀(633) 評(píng)論(0)  編輯  收藏 所屬分類: 07.Oracle
          主站蜘蛛池模板: 扶余县| 长阳| 汽车| 安化县| 遵义市| 吉木萨尔县| 囊谦县| 公安县| 迁西县| 苏尼特右旗| 靖州| 清徐县| 泊头市| 南漳县| 平原县| 浮梁县| 广昌县| 阿巴嘎旗| 南靖县| 伊春市| 德兴市| 肇州县| 西藏| 志丹县| 石狮市| 长阳| 衡东县| 满洲里市| 观塘区| 青阳县| 拉萨市| 义马市| 湟源县| 上饶市| 来宾市| 古浪县| 略阳县| 峨山| 喀什市| 深州市| 霍林郭勒市|