Oracle 19C Data Guard基础运维-03 Failovers(物理)

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

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

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",共同学习,共同成长!!!

请使用浏览器的分享功能分享到微信等