有关Oracle Data Guard Failover 的说明


在之前的两篇文章里都对Oracle Data GuardFailover 进行了说明,但是没有个系统的说明,所以在这篇把DGFailover 做个系统的说明。

 

       物理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

  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容