暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

IT小Chen 2021-04-14
1331

原主库

原备库

 

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/

文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论