Oracle 19C Data Guard基础运维-04 Failovers疑问?

来源:这里教程网 时间:2026-03-03 15:32:04 作者:

Oracle 19C Data Guard 基础运维 -0 4 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   关于failover的疑问? 模拟主库意外宕机,并且存在archive gap ,查看主库上有 3 个归档文件没有传到备库,但是在备库端查看 v$archive_gap 显示却是空的? 并且没有使用过 snapshot standby ,在备库端执行 ALTER DATABASE FAILOVER TO chendb ; 时没有报错提示,由于归档缺失,备库failover 成功后,丢失了大量数据。 为什么备库明明有archive gap 但在 v$archive_gap 里查询不到呢?在存在 archive gap 时,为什么备库执行 ALTER DATABASE FAILOVER TO chendb; 可以成功,最终导致数据丢失呢? 实验过程如下: 场景二:有归档间隙 主库模拟故障,模拟归档gap 先停掉备库: 不接收主库产生的 redo 或归档数据 SQL> shutdown immediate 主库:生成测试数据,生成redo 和归档数据 ---session 1 SQL> declare begin   for i in 1 .. 1000 000  loop     insert into test1 values (i);     commit;   end loop; end; 插入数据期间,生成了3 个归档文件 [oracle@cjcos01 arch]$ pwd /arch ...... cjcpdb_arch_1_74_1030641846.arc cjcpdb_arch_1_75_1030641846.arc cjcpdb_arch_1_76_1030641846.arc 强制关闭主库 SQL> shutdown abort 主库重命名新产生的三个归档文件,模拟归档gap [oracle@cjcos01 arch]$ mv cjcpdb_arch_1_74_1030641846.arc cjcpdb_arch_1_74_1030641846.arc.bak [oracle@cjcos01 arch]$ mv cjcpdb_arch_1_75_1030641846.arc cjcpdb_arch_1_75_1030641846.arc.bak [oracle@cjcos01 arch]$ mv cjcpdb_arch_1_76_1030641846.arc cjcpdb_arch_1_76_1030641846.arc.bak 主库重命名system01.dbf 模拟数据库故障 [oracle@cjcos01 arch]$ cd /u01/app/oracle/oradata/CJCDB/ [oracle@cjcos01 CJCDB]$ mv system01.dbf system01.dbf.bak 主库启动失败 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 open_mode from v$database; OPEN_MODE -------------------- MOUNTED 启动备库: 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? SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap; no rows selected 查看备库归档日志确实少了3个 (74,75,76),但是为什么 v$archive_gap没有数据呢? 3 备库取消 DG 应用 ( 关闭 MRP) SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; Database altered. 4 尝试备库在缺少归档日志情况下执行 failover, 居然没有报错? SQL> ALTER DATABASE FAILOVER TO chendb; Database altered. 也可以正常open 数据库 SQL> alter database open; Database altered. 由于缺失归档,所有在执行完failover后,丢失了 999999条数据。 SQL> Select * from test1; ID --- 1 欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!

相关推荐