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