dataguard 切換后更换IP,service_name

本帖最后由 selectshen 于 2014-10-28 16:55 编辑

测试DB信息:
--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

先做一个简单的switchover
-----------------DB1
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE  
           
----上条语句的结果如果是to_standby,切换就不需要加with session shutdown
SQL> alter database commit to switchover to physical standby with session shutdown;  


Database altered.    
SQL> shutdown immediate;
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  599785472 bytes
Fixed Size                  2085776 bytes
Variable Size             293604464 bytes
Database Buffers          297795584 bytes
Redo Buffers                6299648 bytes
Database mounted.
SQL> alter database recover managed standby database disconnect from session   ;

Database altered.

---------------DB2
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

SQL> alter database commit to switchover to primary;

Database altered.

SQL> alter database open;

Database altered.

SQL> alter system switch logfile;                                          
System altered.

SQL> /

System altered.
--如果你的没有出什么错的话,应该可以看到,就表示已经switchover成功了.
---------------DB2
SQL> select process,thread#,sequence#,status from v$managed_standby;

PROCESS      THREAD#  SEQUENCE# STATUS
--------- ---------- ---------- ------------
ARCH               1        281 CLOSING
ARCH               1        282 CLOSING
LNS                1        283 WRITING

---------------DB1
SQL> select process,thread#,sequence#,status from v$managed_standby;

PROCESS      THREAD#  SEQUENCE# STATUS
--------- ---------- ---------- ------------
ARCH               0          0 CONNECTED
ARCH               1        280 CLOSING
MRP0               1        283 WAIT_FOR_LOG
RFS                1        283 IDLE
RFS                0          0 IDLE

顺便说一下failover,failover时是不用管DB1了,因為假设或事实DB1已经掛了,
只需在DB2上alter database recover managed standby database finish force;应用日誌,
然后alter database commit to switchover to primary;就行了.

    上面的很简单,但生產环境可能就不只是这样了.如果我们只是简单的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就是primary默认的service_name,
当switchover后,如果在要在新的primary上能让用户连接,就要加这个service_name.但如果加了这个
service_name,原有的主从就会因為名称的冲突无法传输.这时的解决办法可以是重建standby或是修改
sid等,就比较复杂了.
以下测试修改IP:
--假设客户端连接的IP:123.0.0.52 service_name:rh10g   这里的service_name已经是两边有加的service_name
通过DB1和DB2在 listener.ora中加入:
(SID_DESC =
     (SID_NAME = rh10g03)
     (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
     (global_dbname = rh10g)
用于静态註册.或是通过在DB1和DB2中执行:
SQL> alter system set service_names=rh10g;
用于动态註册.
--------------------DB1
--需要先把DB1的IP改為一个中间IP:123.0.0.55,避免修改IP后冲突
--修改里面IP对应的主机名
vi /etc/hosts
123.0.0.55      srhel10g03
--修改IP為中间IP123.0.0.55
vi /etc/sysconfig/network-scripts/ifcfg-eth0
--修改tnsnames.ora
RH10G02 =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 123.0.0.52)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = rh10g02)
   )
 )

RH10G03 =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 123.0.0.54)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = rh10g03)
   )
 )

--重啟网路
service network restart
---------------------------DB2
--修改里面IP对应的主机名
vi /etc/hosts
123.0.0.52      srhel10g02
--修改IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0
--修改tnsnames.ora
RH10G02 =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 123.0.0.52)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = rh10g02)
   )
 )

RH10G03 =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 123.0.0.54)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = rh10g03)
   )
 )

--重啟网路
service network restart
-------------------------DB1
--修改里面IP对应的主机名
vi /etc/hosts
123.0.0.54     srhel10g03
----修改正确IP 123.0.0.54
vi /etc/sysconfig/network-scripts/ifcfg-eth0
--重啟网路
service network restart
-------------------------DB2
--网路修改完后,在DB2上切几次日誌检测是否正常

上面是switchover的方法,如果是failover那就简单了,直接通过静态或动态註册加入原primary的service_name,
然后修改IP就可以了.

--dataguard的几个参数:
log_archive_config='DG_CONFIG=(orcl01,orcl02)'
log_archive_dest_1='LOCATION=/u09/archivelog/orcl01 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl01'
LOG_ARCHIVE_DEST_2='SERVICE=orcl02 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,primary_ROLE) DB_UNIQUE_NAME=orcl02'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=defer
FAL_SERVER=orcl02
FAL_CLIENT=orcl01
db_file_name_convert='orcl02','orcl01' scope=spfile;
log_file_name_convert='orcl02','orcl01' scope=spfile;
standby_file_management=auto

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

转载于:http://blog.itpub.net/28539951/viewspace-1312403/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值