暂无图片
请教oracle rman恢复中遇到的问题
我来答
分享
去IOE从我做起
2022-12-04
请教oracle rman恢复中遇到的问题

求教是否因为controlfile的备份集产生的时间较晚,所以rman恢复必须要一个archive日志才可以。

    问题说明:RMAN-06555:datafile 1 must be restored from backup create before 02-DEC-22

    情景提要:我在生产库上备份了一份FULLDB的database,语句如下:

                    backup database format 'FULL****.bkp' tag='FULLDB';

                     产生了controlfile的备份集和datafile的备份集各一份。在rman恢复过程中,recover database报错RMAN-06555。list backup发现controlfile的ckp scn为:2998612783  数据文件的ckp scn为:2998583023。

    问题想法:之前一直说rman恢复一定需要一个archive的dbf文件,所以我这边有个猜想,是因为controlfile的ckp大于数据文件的ckp导致需要前滚操作。

                       那再精细到位,我应该要哪一个archivelog呢?【在生产库做的查询】

                        我通过 archive log list 找到这几个日志

                          oldest online log sequence     31343

                          next log sequence                   31345

                          current log sequence              31345

                    我的猜想:需要在生产库备份前先看一眼,查看当前current log sequence   A的数值,在备份结束后再次执行archive log list  查看current log sequence B 的数值    拿取A-B中间所有的archive.dbf文件【目前我是一股脑 扔了三个最近的dbf文件上去,但是恢复完了才想起来这个问题】。

                    请各位大佬帮帮忙看看思路是否正确。


    

    

                    

我来答
添加附件
收藏
分享
问题补充
9条回答
默认
最新
去IOE从我做起

兄弟们  我回来了,趁着第二次做数据恢复 我验证了部分的猜想。我在rman备份前查看了数据库的archive log list 并记录下来了

详情如下【一共做了两个库的恢复,库A和库B】

库A

【我认为备份脚本的执行语句也会影响当前归档日志,我在数据库备份前执行了 alter system archive log current】

以下为我执行后的archive log list

Oldest online log sequence     18343

Next log sequence to archive   18345
Current log sequence           18345

可以看到当前日志序列sequence号为18345 

为了恢复  我上传了从18343——18359的archive log文件到 测试环境

恢复情况如下:【请重点关注加粗加下划线的部分语句】


RMAN> recover database;


Starting recover at 28-DEC-22
using channel ORA_DISK_1


starting media recovery


archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18345_1053708266.dbf thread=1 sequence=18345
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18346_1053708266.dbf thread=1 sequence=18346
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18347_1053708266.dbf thread=1 sequence=18347
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18348_1053708266.dbf thread=1 sequence=18348
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18349_1053708266.dbf thread=1 sequence=18349
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18350_1053708266.dbf thread=1 sequence=18350
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18351_1053708266.dbf thread=1 sequence=18351
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18352_1053708266.dbf thread=1 sequence=18352
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18353_1053708266.dbf thread=1 sequence=18353
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18354_1053708266.dbf thread=1 sequence=18354
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18355_1053708266.dbf thread=1 sequence=18355
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18356_1053708266.dbf thread=1 sequence=18356
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18357_1053708266.dbf thread=1 sequence=18357
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18358_1053708266.dbf thread=1 sequence=18358
archived log file name=/oracle/app/product/11.2.0/db_1/dbs/arch/1_18359_1053708266.dbf thread=1 sequence=18359
unable to find archived log
archived log thread=1 sequence=18360
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 12/28/2022 12:23:15
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 18360 and starting SCN of 70557253

RMAN> alter database open resetlogs;

database opened


如上可看到,rman恢复已经告诉我他是从哪个squence的日志文件开始读取的。所以是从18345这个文件开始 



开始验证

为了缩小范围archive log的范围,我恢复了库B

库B 【备份语句相同,但是这次我只拿了一个archivelog进行恢复】

以下为我执行archive log list的返回值

Oldest online log sequence     77071
Next log sequence to archive   77072
Current log sequence           77072

以上可知是77072的squence日志文件


恢复情况如下:【请重点关注加粗加下划线的部分语句】

RMAN> recover database;

Starting recover at 03-JAN-23
using channel ORA_DISK_1

starting media recovery

archived log file name=/d01/oracle/PROD/db/tech_st/11.1.0/dbs/arch/1_77072_86599995.dbf thread=1 sequence=77072
unable to find archived log
archived log thread=1 sequence=77073
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 01/03/2023 13:41:30
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 77073 and starting SCN of 17811459280

RMAN> alter database open resetlogs;

database opened


结论:

可知  如必须只放一个日志文件就是Current log sequence序号的文件


遗憾:

1、只进行了正向论证,没有反向论证。应剔除current log sequence的日志文件进行恢复 看会报什么错误。

2、因为我的数据库ddl和dml的时间基本都在跑批的时候,所以没办法验证 【当数据库备份期间,因为跑了大量ddl导致current log sequence改变,那到时候我需要放哪几个sequence序号的日志呢?】


暂无图片 评论
暂无图片 有用 0
暂无图片
游湖
可以重建控制文件
暂无图片 评论
暂无图片 有用 1
watson

路过学习下。

暂无图片 评论
暂无图片 有用 1
yBmZlQzJ
2022-12-04
一起学习
农夫三拳

recover的时间点早于数据文件的时间点,需要从更早的备份来恢复

暂无图片 评论
暂无图片 有用 1
yBmZlQzJ
2022-12-04
yBmZlQzJ

一起学习

暂无图片 评论
暂无图片 有用 2
zy

排队学习

暂无图片 评论
暂无图片 有用 0
游湖

学习了

暂无图片 评论
暂无图片 有用 1
鸿惊九天

排队学习

暂无图片 评论
暂无图片 有用 0
张sir

我有个思路:
1、把控制文件的scn和数据文件的scn都转换成时间。
2、把archivelog文件的日期和这个两个时间做比对。
3、涉及到的archivelog拿过去就ok了。

暂无图片 评论
暂无图片 有用 1
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏