在
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名就可以了.
客户端的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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28539951/viewspace-1319352/