dataguard 更換IP,service_name(二)

selectshen發表於2014-11-03
http://blog.itpub.net/28539951/viewspace-1312403/中講到,如果我們只是簡單的switchover,
客戶端的tnsnames裡存的可是之前的IP和service_name,此時客戶端就需要修改tnsnames裡對應的IP
和service_name,如果是B/s程式還好,直接的C/S程式每個客戶端都要修,有時甚至已經不現實.
所以常常會在switchover之後,還要修改對應的IP和service_name.最近產生了一個個人覺得比較好
的方案,就是我們只需要修改IP就可以了,不需要修改service_name,而是在建dataguard時就加
一個共有的service_name,客戶端連線都透過這個service_name,而主從之間的傳輸可用原本預設
的service_name(常常就是各自的sid).新加的service_name可以透過靜態註冊或動態註冊都可以.

上面講的主要意思也就是加一個公共的service_name,在切換之後只用改相關的IP資訊就可以了,
要改IP的地方大概有/etc/hosts,/etc/sysconfig/network-scripts/ifcfg-eth0,
$ORACLE_HOME/network/admin/tnsnames.ora就可以了.

如果事前沒有加一個公共的service_name,想要在switchover後不用修改service_name,也是有辦法的,
只是相對比較麻煩一點.
以下是實施:
--DB1
os:rhel5.6 ip:123.0.0.52 oracle version:10.2.0.4 sid:rh10g03 db_role:primary
--DB2
os:rhel5.6 ip:123.0.0.54 oracle version:10.2.0.4 sid:rh10g02 db_role:standby
       假如使用者現在連線的service_name=rh10g03.現在switchover後,修改IP後,如果只是單純的在DB2上
靜態或動態註冊一個service_name=rh10g03,使用者是可以正常連線了.但你的DB2現在無法傳日誌到DB1了,
service_name=rh10g03被DB2佔用了,無法連線到DB1了.
       這時的解決辦法就是,在DB1上靜態或動態註冊一個別的service_name,例如rh10g03t,並lsnrctl reload.
       在DB2的$ORACLE_HOME/network/admin/tnsnames.ora中新增:
       RH10G03T =
       (DESCRIPTION =
               (ADDRESS = (PROTOCOL = TCP)(HOST = 123.0.0.54)(PORT = 1521))  ##這時注意雙方的IP已經換了,DB1是54
               (CONNECT_DATA =
               (SERVER = DEDICATED)
               (SERVICE_NAME = rh10g03t)
               )
       )
       然後在DB2上:
               sqlplus / as sysdba
               alter system set log_archive_dest_2='service=rh10g03t lgwr  
                       ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=rh10g02)';
       修改傳入standby時用的service名就可以了.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28539951/viewspace-1319352/,如需轉載,請註明出處,否則將追究法律責任。

相關文章