RDBMS11.2.0.3
在使用备份进行创建DataGuard备库的时候,打开数据库的时候,提示ORA-10458、ORA-01152、ORA-01110错误。
原因:在数据库进行备份的时候,仅仅备份了数据文件,没有备份归档文件。
解决方法:使用归档日志进行recover,然后再open备库。
-- BTW,今天使用凌晨的备份,搭建DataGuard,也把备份的归档copy出来了,recover后,进行Open备库,提示这个。解决方法,将主库上的归档日志copy出来(在第一次recover失败的时候,会提示需要哪些归档,从那个归档开始copy出来),然后进行recover就可以了。 recover完毕,打开备库正常。(BTW,三套库,就这一套需要copy归档出来,其他的2套库都不需要,同样都是使用备份+归档创建备库)。
MOS上有两个文档可以参考。
Incomplete recovery gives ORA-01152 (Doc ID 278856.1)
ORA-10458 ORA-01152 while bringing standby in READ ONLY mode (Doc ID 2140754.1)
附加:创建备库的方法
1 配置好主备库的参数
2 在主库上创建备库的控制文件 (将主库的控制文件备份为备库控制文件)
3 恢复主库的控制文件。然后mount数据库,这个时候,在alert log中,就可以看到主库的日志会传到备库上
4 在备库上restore database;
5 在备库上recover database;
6 打开备库(这样打开是没有问题的,如果还报标题的错误,则需要找到归档日志,进行再次recover)
7 应用日志。
END
-- 2020-11-21 add
在recover的时候,如果缺少归档日志,则recover的界面,会提示missing 归档之类的字样,将归档日志copy过来后,就可以继续recover了(也可以从备份的归档日志中,进行recover,RMAN会读取归档的备份,直接进行recover,而不需要单独restore出来归档日志文件,从归档日志文件的备份中就可以直接recover,也就是说,只要要归档日志的备份,就可以了。)。
当recover到以下情况的时候(是指unknown archived log),就可以open resetlogs了,或者打开备库了。
v$datafile是从oracle的控制文件中获得的数据文件的信息
v$datafile_header是从数据文件的头部
在正常运行下,两者的检查点SCN值是一致的,但当datafile出现损坏时可以用v$datafile_header确定应用重做的起始SCN,而v$datafile可确定应用重做的结束SCN值
SQL> select file#, status, to_char(checkpoint_change#) from v$datafile; -- 控制文件 较大 ,
FILE# STATUS TO_CHAR(CHECKPOINT_CHANGE#)
---------- ------- ----------------------------------------
1 SYSTEM 36953212812
2 ONLINE 36953212812
3 ONLINE 36953212812
4 ONLINE 36953212812
5 ONLINE 36953212812
6 ONLINE 36953212812
7 ONLINE 36953212812
8 ONLINE 36953212812
9 ONLINE 36953212812
10 ONLINE 36953212812
10 rows selected.
SQL> select file#, status, fuzzy, to_char(checkpoint_change#) from v$datafile_header; -- 数据较旧
FILE# STATUS FUZ TO_CHAR(CHECKPOINT_CHANGE#)
---------- ------- --- ----------------------------------------
1 ONLINE NO 36945010948
2 ONLINE YES 36945010948
3 ONLINE NO 36945010948
4 ONLINE NO 36945010948
5 ONLINE YES 36945010948
6 ONLINE YES 36945010948
7 ONLINE YES 36945010948
8 ONLINE YES 36945010948
9 ONLINE YES 36945010948
10 ONLINE YES 36945010948
10 rows selected.
SQL>
end