19c CDB Physical Standby增量恢复遇到RMAN-00600 [5041]
1.现象
Standby: SQL> select to_char(current_scn) from v$database; 20712091
# 取消日志应用
DGMGRL> connect sys@czhstd as sysdba Password: Connected to "czhstd" Connected as SYSDBA. DGMGRL> show database czhstd; Database - czhstd Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 0 seconds ago) Apply Lag: 0 seconds (computed 0 seconds ago) Average Apply Rate: 0 Byte/s Real Time Query: ON Instance(s): czhstd Database Status: SUCCESS DGMGRL> EDIT DATABASE czhstd SET STATE = 'APPLY-OFF';
Primary:
RMAN> BACKUP INCREMENTAL FROM SCN 20712091 DATABASE FORMAT '/tmp/ForStandby_%U' tag 'FORSTANDBY'; scp /tmp/ForStandby* standby:/tmp
Standby:
RMAN> catalog start with '/tmp/'; RMAN> recover database noredo; RMAN-00600: internal error, arguments [5041] [2] [16813038] [20712091] []
2.原因
Recover Database noredo Is Failing with (RMAN-00600: internal error, arguments [5041]) while performing roll forward of Physical standby (Doc ID 2319557.1)
# 附件有该文档
Format: RMAN-00600 [5041] [a] [b] [c] [d]
Error [5041]
Arg [a] File Number
Arg [b] scn in the file header
Arg [c] backup scn (used in from scn clause)
failure is because b < c
大概意思是,有数据文件头SCN低于增量备份from scn,导致无法应用增量备份,很奇怪,以前11g版本查出来scn直接就可以增量备份恢复了,下面开始排查。
3.解决
3.1 查询是否是有数据文件SCN低于增量恢复的SCN
select hxfil FILENUMBER,con_id, fhsta STATUS, fhscn SCN, fhrba_seq SEQUENCE,fhafs,FHDBI,fhdbn,fhtnm from x$kcvfh order by fhsta; 16813038
# 查到有一个PDB$SEED的种子PDB的数据文件低于增量备份SCN,查看主库PDB$SEED的数据文件SCN,
# 也高于目标端,需要根据最低SCN再次增量备份才能正常恢复。
3.2 再次恢复
Primary:
RMAN> BACKUP INCREMENTAL FROM SCN 16813038 DATABASE FORMAT '/tmp/ForStandby_%U' tag 'FORSTANDBY'; scp /tmp/ForStandby* standby:/tmp
Standby:
RMAN> catalog start with '/tmp/'; RMAN> recover database noredo;
3.3 恢复standby controlfile
Primary:
RMAN> backup current controlfile for standby format '/tmp/ctl_std.bak'; $ scp /tmp/ctl.std.bak bak:/tmp/
Standby:
RMAN> shutdown immediate; RMAN> startup nomount; RMAN> restore controlfile from '/tmp/ctl_std.bak'; RMAN> report schema;
# 检查是否有数据文件size为0,如果有检查是否在正确位置,如果数据文件均0或个别为0,则使用catalog start with手工注册备库正确的数据文件位置,
# 然后switch database/datafile to copy切换到正确位置。
tempfile位置不正确,备库需要手工处理。
(1)db_file_name_convert参数未正确设置
主库的tempfile在备库db_file_name_convert设置正确可以转换以及db_create_file_dest设置启用OMF时,可以在打开数据库时自动创建,
如果未正确创建,调整参数,重启备库会再次创建。
(2)主库新增加的tempfile是无法在备库正确创建的,需要手工增加。
ALTER TABLESPACE TEMP ADD TEMPFILE 'path' size n;
(3)如果备库无法正确创建tempfile,需要手工处理
# alter tablespace temp add tempfile 'path' size n; # alter database tempfile 'path' drop including datafiles;