Oracle 19C Data Guard
基础运维
-0
3 Failovers(
物理
)
原主库
原备库
Failovers
新主库
独立库
192.168.31.90
192.168.31.100
192.168.31.100
192.168.31.90
cjcdb
chendb
chendb
cjcdb
Failover
:
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
ORACLE instance started.
Total System Global Area 1375728192 bytes
Fixed Size
9134656 bytes
Variable Size
1107296256 bytes
Database Buffers
251658240 bytes
Redo Buffers
7639040 bytes
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
ORACLE instance started.
Total System Global Area 1375728192 bytes
Fixed Size
9134656 bytes
Variable Size
1107296256 bytes
Database Buffers
251658240 bytes
Redo Buffers
7639040 bytes
Database mounted.
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
增量追加数据。
欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!