oracle adg进行failover角色切换后修复adg

22 篇文章 0 订阅

方法一、删除failed 主数据库,重新利用新主库搭建standby备库

1、dbca删除failed库(删除failed库前最好备份一下spfile文件,方便后续修改)

(或者使用drop database删除failed库)

2、清理归档日志

3、配置spfile

--从主库生成pfile文件(最好是删除failed库前备份一下spfile文件,这样修改比较简单,就不用从正常库复制了)
create pfile='/home/oracle/pfile_20200220.ora' from spfile='+DATADG/testdbdg/spfiletestdbdg.ora';

--修改pfile文件

--生成新备库的spfile文件
create spfile='+DATADG/testdb/spfiletestdb.ora' from pfile='/home/oracle/pfile_20200114.ora';

--修改$ORACLE_HOME/dbs目录下的pfile文件,指向spfile文件
[oracle@primarydb1 dbs]$ cat inittestdb1.ora 
SPFILE='+DATADG/testdb/spfiletestdb.ora'

[oracle@primarydb2 dbs]$ cat inittestdb2.ora 
SPFILE='+DATADG/testdb/spfiletestdb.ora'

4、配置密码文件

copy到备库1号机:
scp orapwtestdb2 oracle@10.xxx.xxx.221:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwtestdb1

copy到备库2号机:
scp orapwtestdb2 oracle@10.xxx.xxx.222:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwtestdb2

5、在新备库中创建pfile文件中的相关目录

[oracle@standbydb1 ~]$ mkdir -p /u01/app/oracle/admin/testdb/adump

[oracle@standbydb2 ~]$ mkdir -p /u01/app/oracle/admin/testdb/adump

6、将数据库注册到asm中

在节点1的oracle用户下执行:

[oracle@primarydb1 ~]$ srvctl add database -d testdb -o /u01/app/oracle/product/11.2.0/db_1
[oracle@primarydb1 ~]$ srvctl add instance -d testdb -i testdb1 -n primarydb1
[oracle@primarydb1 ~]$ srvctl add instance -d testdb -i testdb2 -n primarydb2

7、将2台实例启动到nomount状态

SYS@testdb1> startup nomount

SYS@testdb2> startup nomount

8、rman连接

[oracle@primarydb1 ~]$ rman target sys/xxx@testdbdg auxiliary sys/xxx@testdb

Recovery Manager: Release 11.2.0.4.0 - Production on Thu Feb 20 14:16:08 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: TESTDB (DBID=2812581150)
connected to auxiliary database: TESTDB (not mounted)

9、duplicate

RMAN> duplicate target database for standby from active database nofilenamecheck;

10、开库

SYS@testdb1> select open_mode from gv$database;

OPEN_MODE
--------------------
MOUNTED

SYS@testdb1> alter database open;

11、启用实时日志应用

SYS@testdb1> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

12、将2号实例打开

SYS@testdb2> startup

13、检查

备库:
SYS@testdb1> select name,database_role,open_mode,protection_mode from gv$database;

NAME	  DATABASE_ROLE    OPEN_MODE		PROTECTION_MODE
--------- ---------------- -------------------- --------------------
TESTDB	  PHYSICAL STANDBY READ ONLY WITH APPLY MAXIMUM PERFORMANCE
TESTDB	  PHYSICAL STANDBY READ ONLY WITH APPLY MAXIMUM PERFORMANCE

主库:
SYS@testdbdg1> select name,database_role,open_mode,protection_mode from gv$database;

NAME	  DATABASE_ROLE    OPEN_MODE		PROTECTION_MODE
--------- ---------------- -------------------- --------------------
TESTDB	  PRIMARY	   READ WRITE		MAXIMUM PERFORMANCE
TESTDB	  PRIMARY	   READ WRITE		MAXIMUM PERFORMANCE

------------------------------重建完成----------------------------------------

方法二、利用Flashback Database策略,将数据库恢复到failover之前的时间点。(前题:主库开启了闪回)

1、确定旧备用数据库成为主数据库的SCN。

--在新的主数据库上,执行以下查询以确定旧备用数据库成为新主数据库的SCN:
SYS@testdbdg1> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;


TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)
----------------------------------------
7745387

2、闪回failed的主数据库

关闭旧的主数据库(如有必要),将其mount,并将其闪回到步骤1中查询出来的STANDBY_Become_primary_SCN值。
[oracle@primarydb1 ~]$ srvctl  stop  database -d testdb

SYS@testdb1> startup mount

SYS@testdb1> FLASHBACK DATABASE TO SCN 7745387;

3、将数据库转换为物理备用数据库

3.1在旧的主数据库执行以下语句

SYS@testdb1> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
(以上在将控制文件转换为备用控制文件成功后dismount数据库。)

3.2关库,并重新打开

SYS@testdb1> SHUTDOWN IMMEDIATE;

SYS@testdb1> STARTUP;

4、开始将redo日志重新传输到新的物理备用数据库。

(在新的主数据库执行以下sql)

4.1、查询归档日志路径状态

SELECT s.DEST_NAME,s.STATUS FROM V$ARCHIVE_DEST_STATUS s where s.DESTINATION is not null;

4.2、如果归档路径状态异常,则运行

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

4.3、执行日志切换以确保备用数据库开始从新的主数据库接收重做数据,并验证是否已成功发送该数据。在新的主数据库执行以下SQL语句:

SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION,ERROR,SRL FROM V$ARCHIVE_DEST_STATUS;

5、在新的物理备用数据库上启用Redo Apply

SYS@testdb1> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
(当发生主备角色切换时,redo日志应用会自动停止,因此备库需要执行1次或者多次的日志应用,直到scn号大于旧备用数据库成为新主数据库的SCN号)
(实践:主库需要多次切换归档:ALTER SYSTEM SWITCH LOGFILE;

6、确认状态

备库:
SYS@testdb1> select database_role,switchover_status from gv$database;

DATABASE_ROLE	 SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY NOT ALLOWED
PHYSICAL STANDBY NOT ALLOWED

主库:
SYS@testdbdg1> select database_role,switchover_status from gv$database;

DATABASE_ROLE	 SWITCHOVER_STATUS
---------------- --------------------
PRIMARY 	 SESSIONS ACTIVE
PRIMARY 	 SESSIONS ACTIVE
---------------闪回修复完成----------

方法三、利用RMAN备份将Primary恢复到failover之前,重新进行日志弥补、角色切换

1、确定旧备用数据库成为主数据库的SCN。

在新的主数据库上,执行以下查询以确定旧备用数据库成为新主数据库的SCN:
SYS@testdbdg1> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;


TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)
----------------------------------------
7745387

2、Restore and recover 全库

RMAN> RUN    {
      SET UNTIL SCN <standby_became_primary_scn + 1>;      
	  RESTORE DATABASE;      RECOVER DATABASE;     
	  }

SQL> RECOVER DATABASE USIING BACKUP CONTROLFILE UNTIL CHANGE ->  <standby_became_primary_scn + 1>;

3、将数据库转换为物理备用数据库

3.1、转换

SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

3.2、重启

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;

4、开始将redo日志重新传输到新的物理备用数据库。

(在新的主数据库执行以下sql)

4.1、查询归档日志路径状态

SELECT s.DEST_NAME,s.STATUS FROM V$ARCHIVE_DEST_STATUS s where s.DESTINATION is not null;

4.2、如果归档路径状态异常,则运行

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

4.3、执行日志切换以确保备用数据库开始从新的主数据库接收重做数据,并验证是否已成功发送该数据。在新的主数据库执行以下SQL语句:

SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION,ERROR,SRL FROM V$ARCHIVE_DEST_STATUS;

5、在新的物理备用数据库上启用Redo Apply

SYS@testdb1> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

---------------rman备份完成----------

谨记:心存敬畏,行有所止。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值