决定是否允许恢复标志损坏的块:阶段3
当介质恢复遇到了问题,则预警日志可能会表明,如果允许将引起问题的块标记为损坏的块,则恢复是可以继续的。
预警日志包含块的信息:块的类型、块的地址、块属于的表空间。对于包含用户数据的块,预警日志也可以报告数据对象号。
在这种情况下如果允许标记有问题的块为损坏的,则数据库可以继续恢复。然而这种方式不总是建议的。
如果这个块是SYSTEM表空间中的重要的块,把这个块标记为损坏可能会最终阻止你打开恢复的数据库。
另一个考虑是这个恢复问题是否是独立的。
如果这个问题在后面立即跟了redo流中的许多其它问题,则可能想使用RESETLOGS选项打开数据库。
对于用户数据的块,可以查询数据库来发现哪个对象或表拥有这个块。
如果数据库没有打开,你可以使用只读方式打开,即使你正在恢复整个数据库备份。
下面的代码中断了恢复,以只读方式打开数据库:
CANCEL ALTER DATABASE OPEN READ ONLY; |
假设在alert_SID.log中报告的数据对象的编号为8031,则可以通过下面的查询确定所有者、对象名和对象类型。
SELECT OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE DATA_OBJECT_ID = 8031; |
判断一个恢复问题是否是独立的,可以运行一个诊断的试验恢复,这个试验恢复会扫描redo流,
但不会对恢复的数据库进行任何改变。如果试验恢复发现了任何恢复问题,则会在alert_SID.log中报告这些问题。
使用RECOVER…TEST开始一个试验恢复过程。
在已经做了上述调查之后可以遵循表 29.6中的指导来决定是否允许恢复允许损坏块。
表 29.6 允许对允许损坏的数据块的恢复
如果问题是… | 如果块是… | 则… |
不独立 |
| 应该能够使用RESETLOGS选项打开数据库。这个响应对于stuck恢复问题是非常重要的。因为stuck恢复问题可以被操作系统或存储系统丢失写操作而引起。如果操作系统或存储系统突然失败,则可以在多个块上引起stuck恢复问题。 |
独立 | 在SYSTEM表空间中 | 不损坏块,因为它可能会最终阻止你打开数据库。然而,有些时候在SYSTEM表空间的数据是不重要的。如果你必须损坏SYSTEM块并恢复所有的改变,则联系Oracle Support Service |
独立 | 索引数据 | 考虑破坏索引,因为索引可以在数据库被恢复之后被重建。 |
独立 | 用户数据 | 根据的数据的重要性来决定。如果继续数据文件恢复并且损坏了一个数据块,则会丢失在数据块中的数据。然而后面可以使用RMAN来执行快介质恢复,即在恢复完成之后。 |
独立 | 回滚或undo数据 | 如果所有的事务都被提交了,则可以考虑损坏回滚或undo数据块。如果产生这些undo信息的事务永远不被回滚,则数据库是不会受到伤害的。然而如果那些事务被回滚,则损坏undo数据块可能会引起问题。如果不确定,则联系Oracle Support Service |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1101388/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1101388/