AI智能
改变未来

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

方法一、删除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’;

–修改ORACLEHOME/dbs目录下的pfile文件,指向spfile文件[oracle@primarydb1dbs]ORACLE_HOME/dbs目录下的pfile文件,指向spfile文件[oracle@primarydb1 dbs]ORACLEH​OME/dbs目录下的pfile文件,指向spfile文件[oracle@primarydb1dbs] 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 © 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) 打赏
未经允许不得转载:爱站程序员基地 » oracle adg进行failover角色切换后修复adg