有关Oracle Data Guard Failover 的说明

2014-11-24 17:59:07 · 作者: · 浏览: 1


物理Data Guard Failover Redo 的处理问题



Oracle Data Guard Linux 平台 Physical Standby 搭建实例



Failover 是失败切换。 这种情况下切换对redo 的处理,就显的很重要。如果处理好,就不会有数据丢失。 否则就会有数据丢失。



Oracle 11g里,Data Guard 切换多了一个新的功能:flush redo


Flush 能把没有发送的redo 从主库传送到standby库。 只要主库能启动到mount 状态,那么Flush 就可以把没有发送的归档和current online redo 发送到备库。


Flush语法:


SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;



这里的target_db_name 是我们在主库的db_unique_name 名称。 也就是在tnsnames.ora 文件配置的。 Flush 会将未发送的redo 从主库传到备库,并且等待redo standby 库上apply 之后返回成功。 所以只要Flush成功,那么Failover 就没有主句丢失。



如果说我们的Primary 已经不能启动到mount 状态,那么就只能按照之前的方法来。 Oracle 10g 下就是这么操作的。




. 正常的Failover


1.1 检查Gap


sql> select thread#, low_sequence#, high_sequence# from v$archive_gap;



如果有,将对应的归档文件copy到备库,在注册它


sql>alter database register physical logfile 'filespec1';



注意: 如果有Gap存在,并且没有解决。 那么是不能正常的进行一个Failover 只能进行一个强制的Failover 这种情况下会有数据丢失。


sql> alter database activate physical standby database;




1.2 解决gap问题后,进行切换



1.2.1 取消Apply


SQL> recover managed standby database cancel;



1.2.2 结束Apply


1)在oracle 10gR2 或之后的版本:如果在备用库上有备用库日志文件


SQL> alter database recover managed standby database finish; -- [force|wait|nowait]



在执行这个命令的时候,如果主库和备库之间的网络中断了。 那么备库的RFS进程就会等待网络的连接,直到TCP超时。 因此在这种情况下,我们就需要加上Foce 关键字。



2)在oracle 10gR2之前的版本:没有备库日志文件


SQL> alter database recover managed standby database finish skip standby logfile;


注意:如果执行了这条命令,就不能在进行recover standby database;



1.2.3 将备库切换成主库


SQL> alter database commit to switchover to primary;


SQL> shutdown immediate;


SQL> startup