在一次培训中进行数据库相关热备恢复,正常情况下按照老师的步骤可能是没有问题的,但是往往出问题的时候更多我们预知不到的,这个时候对数据库排查显得尤为重要。
在进行数据库恢复演练前进数据库的热备:backup database;
1)在后面进行相关增量备份:
SQL> backup database increment with backupdir '/dm8/backup/full' to incrbak3 backupset '/dm8/backup/incr/incrbak03';
backup database increment with backupdir '/dm8/backup/full' to incrbak3 backupset '/dm8/backup/incr/incrbak03';
[-8116]:检查点LSN小于基备份集END_LSN.
已用时间: 00:00:01.817. 执行号:0.
2)对于此错误,理解为里面执行,可能是备份的增量太少导致,索引执行相关检查点操作:
alter system switch logfile;
再次执行相关增量备份,仍然报错;
3)而此时继续按照原计划在数据库上删除数据库相关,main.dbf文件,验证数据库恢复
4)通过dmrman进行恢复
RMAN> recover database '/dm8/data/dmtest/dm.ini' with archivedir '/dm8/arch';
recover database '/dm8/data/dmtest/dm.ini' with archivedir '/dm8/arch';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[297787], file_lsn[297787]
[611]:恢复操作未完成
RMAN> restore database '/dm8/data/dmtest/dm.ini' from backupset '/dm8/data/dmtest/bak/DB_dmtest_FULL_20220505_080315_951399';
restore database '/dm8/data/dmtest/dm.ini' from backupset '/dm8/data/dmtest/bak/DB_dmtest_FULL_20220505_080315_951399';
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:01][Remaining:00:00:00]Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
restore successfully.
time used: 00:00:02.317
RMAN> recover database '/dm8/data/dmtest/dm.ini' with archivedir '/dm8/arch';
recover database '/dm8/data/dmtest/dm.ini' with archivedir '/dm8/arch';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[297787], file_lsn[297787]
[611]:恢复操作未完成
4)再次启动数据库,数据库启动报faild错误,此时已经可以明确的数据库无法正常启动,问题出在recover。
[dmdba@redis bin]$ ./DmServicedmtestsvr restart
DmServicedmtestsvr service is stopped.
Starting DmServicedmtestsvr: [ FAILED ]
file dm.key not found, use default license!
version info: develop
DM Database Server x64 V8 4-2-18-21.08.20-146029-10013-ENT startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2022-08-20
Instance DMTESTSVR startup failed, execute 'recover database ... update db_magic' in dmrman.
[dmdba@redis bin]$ ./DmServicedmtestsvr stop
DmServicedmtestsvr service is stopped.
[dmdba@redis bin]$ ./DmServicedmtestsvr start
Starting DmServicedmtestsvr: [ FAILED ]
file dm.key not found, use default license!
version info: develop
DM Database Server x64 V8 4-2-18-21.08.20-146029-10013-ENT startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2022-08-20
Instance DMTESTSVR startup failed, execute 'recover database ... update db_magic' in dmrman.
5)通过检查/arch归档目录发现,日志都是很老时间的日志,没有最新的日志进入到归档,检查相关dmarch.ini配置
dmdba@redis dmtest]$ cat dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = ¡¡m8/arch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 10240
ARCH_FLUSH_BUF_SIZE = 0
[dmdba@redis dmtest]$ cd ¡¡m8/arch
-bash: cd: ¡¡m8/arch: No such file or directory
[dmdba@redis dmtest]$ cd ¡¡m8
-bash: cd: ¡¡m8: No such file or directory
发现为操作导致归档添加的归档墓不存在,修改相关配置arch_dest=/dm8/arch
6)由于归档日志不存在,也就是这段时间也没有新日志更新到数据库,此时只能用数据库全量备份恢复进行不完全恢复。
RMAN> restore database '/dm8/data/dmtest/dm.ini' from backupset '/dm8/data/dmtest/bak/DB_dmtest_FULL_20220505_080315_951399'
restore database '/dm8/data/dmtest/dm.ini' from backupset '/dm8/data/dmtest/bak/DB_dmtest_FULL_20220505_080315_951399'
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:01][Remaining:00:00:00]Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
restore successfully.
time used: 00:00:02.300
RMAN> recover database '/dm8/data/dmtest/dm.ini';
recover database '/dm8/data/dmtest/dm.ini';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[297787], file_lsn[297787]
[-8267]:未指定或者指定归档目录无效
RMAN>recover database '/dm8/data/dmtest/dm.ini';
[-8301]:第[1]行,第[0]列[recover]附近出现错误[-2007]:语法分析出错
RMAN> recover database '/dm8/data/dmtest/dm.ini';
recover database '/dm8/data/dmtest/dm.ini';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[297787], file_lsn[297787]
[-8267]:未指定或者指定归档目录无效
RMAN> recover database '/dm8/data/dmtest/dm.ini' with archivedir '/dm8/arch';
recover database '/dm8/data/dmtest/dm.ini' with archivedir '/dm8/arch';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[297787], file_lsn[297787]
[611]:恢复操作未完成
RMAN> recover database '/dm8/data/dmtest/dm.ini' from backupset '/dm8/data/dmtest/bak/DB_dmtest_FULL_20220505_080315_951399'
recover database '/dm8/data/dmtest/dm.ini' from backupset '/dm8/data/dmtest/bak/DB_dmtest_FULL_20220505_080315_951399'
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[297787], file_lsn[297787]
EP:0 total 0 pkgs applied, percent: 0%
EP:0 total 1 pkgs applied, percent: 14%
EP:0 total 2 pkgs applied, percent: 28%
EP:0 total 3 pkgs applied, percent: 42%
EP:0 total 4 pkgs applied, percent: 57%
EP:0 total 5 pkgs applied, percent: 71%
EP:0 total 6 pkgs applied, percent: 85%
EP:0 total 7 pkgs applied, percent: 100%
recover successfully!
time used: 00:00:02.299
RMAN> recover database '/dm8/data/dmtest/dm.ini' update db_magic;
recover database '/dm8/data/dmtest/dm.ini' update db_magic;
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[298993], file_lsn[298993]
recover successfully!
time used: 984.515(ms)
7)数据库正常启动,由于恢复状态数据库不是开启,不能进行相关日志切换动作,再次切换日志,查看相关/dm8/arch日志是否有相关日志生成。
8)收尾工作,立马进行数据库全备。
总结:数据库全备没有问题,增量备份报错时间过短,误以为是没有做检查点,实质为归档日志路径配错导致日志无法落盘到归档目录,最好只能进行不完全恢复。