ITPub博客

首页 > 数据库 > Oracle > DG物理standby,Failover之后原primary重回DG

DG物理standby,Failover之后原primary重回DG

原创 Oracle 作者:panpong 时间:2014-09-09 10:19:00 0 删除 编辑

DG物理standby,Failover之后原primary重回DG

       如果failover之前,主备都开了flashback,当原主库恢复正常后,则可通过以下步骤重回DG;

步骤1.在新主库上查询failover时的SCN

SQL> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;

 

步骤2.在原主库上flashback 到failover时的scn

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT;

SQL> FLASHBACK DATABASE TO SCN standby_became_primary_scn;

 

步骤3.转换原主库到备库状态

SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT;

 

步骤4.同步、应用日志

 原主库:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

 

在原主库上flashback 到failover时的scn时报错的处理:

由于原主库没有开flashback,以至于flashback失败,然后通过recover database后

SQL> select checkpoint_change# from v$database;

 

CHECKPOINT_CHANGE#

------------------

          20359173

 

SQL> flashback database to scn 20359173;

flashback database to scn 20359173

*

ERROR at line 1:

ORA-38729: Not enough flashback database log data to do FLASHBACK.

查询一下能闪回的最早scn,

SQL> select oldest_flashback_scn,

     to_char(oldest_flashback_time,'YYYY-MM-DD HH24:MI:SS')

    from v$flashback_database_log;

OLDEST_FLASHBACK_SCN TO_CHAR(OLDEST_FLAS

-------------------- -------------------

            20382748 2014-03-05 15:24:16

 

这个明显是flashback开的太迟,没有足够的日志;为了能使数据库回到scn为20359173的点上,做一次不完全恢复;

Rman>run{

Startup force mount;

Set until scn=20359173; # SET UNTIL SCN ;

Restore database;

Recover database;

}

执行过程中仍然报错ORA-38729,查询了CHECKPOINT_CHANGE#仍是20382748,以为没有成功,然后又做了一次不完全恢复:

RMAN>shutdown immediate

RMAN>startup mount

RMAN>restore database until scn 20359173;

RMAN>recover database until scn 20359173;

查询了CHECKPOINT_CHANGE#仍是20382748,于是再一次做不完全恢复:

SQL>recover database until change 20359173;

Media recovery complete.

很快就完成了恢复;此时,尝试如下操作:

SQL> select switchover_status from v$database;

 

SWITCHOVER_STATUS

--------------------

NOT ALLOWED

 

SQL> alter database open read only;

alter database open read only

*

ERROR at line 1:

ORA-16005: database requires recovery

 

最后直接执行主库转备库操作,顺利完成;

SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

 

Database altered.

查询日志,新主库已经开始传日志文件,日志文件传完后启动备库的日志用也可以顺利进行,一直到实时同步;

 

通过以上的操作,可以推测不完全恢复应该是成功的推到了指定SCN处,只是查询SCN地方不对;现在猜测应该查询v$database的current_scn字段,有待日后考证;

 

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

请登录后发表评论 登录
全部评论
数据库工程师,熟悉Oracle,Postgresql,MySQL等主流关系型数据库运维,调优,一直活跃在运维一线。了解Python,Django,简单自动化运维系统开发。

注册时间:2009-03-06

  • 博文量
    142
  • 访问量
    392355