高級復制與global_names、global_name、DBLINK之間的聯系

高級復制與global_names、global_name、DBLINK、DB_name、DB_domain之間的聯系

高級復制環境中,包括ORACLE在內的所有文檔都要求初始參數global_names的值必須要設為TRUE,其實這不是必須的,下面分段說說它們的聯系。

1、global_name怎麼得到的?

為了更清晰地標識數據庫,建議global_name=db_name.db_domain,當然global_name也可以隨意設置成你喜歡的名字。

在創建數據庫時,系統會根據初始參數DB_name、DB_domain的值設置global_name=db_name.db_domain,如果建庫時db_domain的值為空,則global_name=db_name;在創建完數據庫後,db_domain初始參數就沒有作用了,你修改db_domain初始參數不會改變global_name的值,修改global_name的值也不會影響db_domain初始參數(感覺db_domain慘兮兮的,至少在下“小菜”目前還沒發現該參數的其它用處)。當然也不會影響db_name初始參數的值。

2、修改global_name的值

global_name除了建庫時自動生成,也可以手動更改,有些應用中,如高級復制,更改global_name後需重啟instance才能生效。

查看global_name的值(來源於global_name視圖):

SQL> select * from global_name;

GLOBAL_NAME
---------------------------------
TAOM

修改global_name的值:

方法一:

SQL> alter database rename global_name to test.com;

資料庫已被更改

SQL> select * from global_name;

GLOBAL_NAME
----------------------------------------------------
TEST.COM

方法二:有時在將global_name修改成xx.com類似的格式後,想把後面domain那部份去掉,通過上面的命令怎麼改也不行,比如再通過命令SQL> alter database rename global_name to taom,得到global_name的結果卻是taom.com,那麼通過下面方法可以更改:

通過toad工具查看創建global_name視圖的script得到該視圖的源表是sys.PROPS$,

SQL> select * from sys.PROPS$ where name='GLOBAL_DB_NAME';
資料列將會被截斷


NAME                                                         VALUE$
------------------------------------------------------------ -------------
GLOBAL_DB_NAME                                               TEST.COM

直接conn "/as sysdba"登陸sys帳號,直接修改sys.PROPS$表,執行update sys.PROPS$ set value$='taom' where name='GLOBAL_DB_NAME';

3、global_names、global_name、DBLINK之間的關系

global_names初始參數僅存在建立DBLINK時有以下限制作用:

當庫A的global_names=true時,庫A建立到其它任何庫的DBLINK時,其中dblink的名稱必須是對方庫的global_name,其它庫建立到A庫DBLINK的方式不變。

不然在執行分布式DML操作,出現 錯誤提示

                              *
 ERROR 在行 1:
ORA-02085: database link ABC connects to TAOM

 

如果在庫A的同一個schema下(即同一個命名空間)需要向其它庫建立多條DBLINK路徑時,由格式如下

create database link a.global_name@dblink_1 connect to username by password using tnsnet_name;

create database link a.global_name@dblink_2 connect to username by password using tnsnet_name;

以上作用,結合下文第四點,可以更完整的保証數據庫環境,以不發生名稱錯亂。

雖然做高級復制時,包括oracle官方在內的所有文檔都強調要求global_names=true,其它這不是必須的,隻是保証庫名稱環境一致性。

4、高級復制與global_name、DBLINK之間的關系

當高級復制中master def site創建復制組時,定義主站點會自動將global_name的值作為自己站點的dblinkl名稱注冊到系統表中

execute dbms_repcat.create_master_repgroup('rep_test');

 

然後在定義主站點在添加其它主站點時,定義主站點自動將前面以global_name注冊到系統表中自己站點的DBLINK名稱,同步到其它所有主站點,所有主站點都會以定義主站點以global_name注冊的dblink與定義主站點同步。

 

execute dbms_repcat.suspend_master_activity (gname => 'rep_hh');

 

以下,taom是定義主站點,添加主站點taom2,在主站點查詢到的節點信息。

SQL> select * from dba_repsites;

GNAME        DBLINK       MA SN MASTER_COMME MA PROP_UPDATES MY GROUP_OWNER
------------ ------------ -- -- ------------ -- ------------ -- ----------------
REP_HH       TAOM2        N                  Y             2 N  PUBLIC
REP_HH       TAOM         Y                  Y             0 Y  PUBLIC

 

高級復制環境中,global_name可以隨意設置,但無論global_name是什麼,無論是定義主站點,還是主站點,DBLINK的名稱一定要與對方的global_name相同,不然不能同步。這也就是為什麼強調global_names要設為true的原因(global_names設為true後,建立到對方的DBLINK必須與對方的GLOBAL_NAME相同)

 

以上經過實驗,高級復制中,global_names=false,且global_name不等於db_name,但等於DBLINK名稱,復制組可以正常同步。

 

 

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7608831/viewspace-675728/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7608831/viewspace-675728/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值