
原主库 | 原备库 |
Failovers | 新主库 | 独立库 |
192.168.31.90 | 192.168.31.100 | 192.168.31.100 | 192.168.31.90 | |
cjcdb | chendb | chendb | cjcdb |
Failover :
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/data-guard-concepts-and-administration.pdf
Figure 9-4 Failover to a Standby Database

Performing a Failover to a Physical Standby Database
主库意外宕机,并无法启动
场景一:没有归档间隙,零数据丢失
主库模拟故障:
重命名system数据文件
[oracle@cjcos01 CJCDB]$ pwd
/u01/app/oracle/oradata/CJCDB
[oracle@cjcos01 CJCDB]$ mv system01.dbf system01.dbf.bak
SQL> alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 5309
Session ID: 45 Serial number: 38130
备库日志:
2020-04-18T08:49:26.394680+08:00
rfs (PID:6276): Possible network disconnect with primary database
启动主库失败:
SQL> startup
......
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/CJCDB/system01.dbf'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
备库:3.100
1.检查dg恢复模式
SQL> select database_role,protection_level,protection_mode from v$database;
DATABASE_ROLE PROTECTION_LEVEL PROTECTION_MODE
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
2 检查archive_gap(没有gap说明备库执行failovers不会丢失数据)
SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;
no rows selected
检查没有归档gap后,最好在检查主从库归档日志是否完全同步,备库同步日志是否没有错误。
3 备库取消DG应用(关闭MRP)
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.
4 备库执行failover
---谨慎操作,确保数据已完全同步后再切换,避免切换后数据丢失。
SQL> ALTER DATABASE FAILOVER TO chendb;
Database altered.
5 打开备库
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED
SQL> alter database open;
Database altered.
6 新主库执行全备
7 新主库查看状态
SQL> select database_role,protection_level,protection_mode from v$database;
DATABASE_ROLE PROTECTION_LEVEL PROTECTION_MODE
---------------- -------------------- --------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
FAILED DESTINATION
SQL> insert into test1 select * from test1;
1 rows created.
SQL> commit;
Commit complete.
修复原主库
SQL> shutdown immediate
[oracle@cjcos01 CJCDB]$ mv system01.dbf.bak system01.dbf
SQL> startup
......
Database opened.
此时原主库变成的一个独立的数据库,可以读写方式打开
SQL> select database_role,protection_level,protection_mode from v$database;
DATABASE_ROLE PROTECTION_LEVEL PROTECTION_MODE
---------------- -------------------- --------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
尝试将原主库切换为physical standby
SQL> alter database commit to switchover to physical standby with session shutdown;
alter database commit to switchover to physical standby with session shutdown
*
ERROR at line 1:
ORA-16416: No viable Physical Standby switchover targets available
SQL> recover managed standby database using current logfile disconnect from session;
ORA-01665: control file is not a standby control file
此时原故障主库变成了一个独立的数据库,若想恢复成现有主库的Physical Standby,可以通过现有主库的数据进行重新搭建,或通过原故障主库failovers之前的备份,进行恢复,在通过现有主库进行rman增量追加数据。
更多数据库相关学习资料,可以查看我的ITPUB博客,网名chenoracle:
http://blog.itpub.net/29785807/





