Oracle Current Redo log损坏后恢复数据库.doc_第1页
Oracle Current Redo log损坏后恢复数据库.doc_第2页
Oracle Current Redo log损坏后恢复数据库.doc_第3页
Oracle Current Redo log损坏后恢复数据库.doc_第4页
Oracle Current Redo log损坏后恢复数据库.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档名称文档密级Current Redo log损坏后恢复数据库禤梓桥 00109548关键字: 10513事件,_allow_resetlogs_corruption,_corrupted_rollback_segments,dba_rollback_segs,ORA-6002662,ORA-6002663,ORA-6004136。适用场景: 1. 当前redo log文件发生物理或逻辑损坏;且没有可用的redo log备份; 2. 没有可用于恢复的备份; 3. rman恢复时间过长或备份太旧,不满足业务快速恢复的要求。如何判定损坏日志状态为CURRENT: 1. 以startup启动后,检查alert日志,从”Started redo scan”日志信息开始如下类似的错误信息:Started redo scanORA-00313: 无法打开日志组 3 (用于线程 1) 的成员ORA-00312: 联机日志 3 线程 1: F:APPX00109548ORADATAORCLREDO03.LOGORA-27041: 无法打开文件OSD-04002: 无法打开文件O/S-Error: (OS 2) 系统找不到指定的文件。Aborting crash recovery due to error 313或者Started redo scanORA-368 signalled during: ALTER DATABASE OPEN.注意:如果alert只有ORA-368错误,没有报告具体的redo log文件时,需要先按照损坏redo log文件状态为非current的办法处理,当无法恢复数据库时,才按以下恢复步骤尝试恢复。 2. 在startup启动报错后,此时数据库处于MOUNT状态,查看损坏的文件状态是否为CURRENT:SQLselect member, l.status, l.group# from v$log l, v$logfile f where l.group#=f.group#;MEMBER STATUS GROUP#- - -F:APPX00109548ORADATAORCLREDO01.LOG INACTIVE 1F:APPX00109548ORADATAORCLREDO02.LOG INACTIVE 2F:APPX00109548ORADATAORCLREDO03.LOG CURRENT 3恢复步骤: 确认损坏redo log文件为current时,执行以下操作:步骤1:将spfile转存为pfile.ora,并在pfile.ora文件中添加_allow_resetlogs_corruption=true。1.1转存spfileSQLcreate pfile=d:pfile.ora from spfile;编辑d:pfile.ora文件,添加如下参数:*._allow_resetlogs_corruption=true1.2正常关闭数据库SQLshutdown immediate;步骤2:以pfile文件启动实例并将数据库挂载SQLstartup pfile=d:pfile.ora mount;步骤3:执行recover database until cancel,并输入cancelSQLrecover database until cancel;ORA-00279: 更改 1546960 (在 10/17/2012 09:26:37 生成) 对于线程 1 是必需的ORA-00289: 建议:F:APPX00109548PRODUCT11.1.0DB_1RDBMSARC00048_0796850999.001ORA-00280: 更改 1546960 (用于线程 1) 在序列 #48 中指定日志: =suggested | filename | AUTO | CANCELcancel alter database open resetlogs; 注意:1.此时可能打不开数据库,或者打开数据库后alert日志有ORA-6002662、ORA-6002663、ORA-6004136、ORA-6004194、ORA-6004197等错误。ORA-6002662、ORA-6002663等错误通常是因为在实例崩溃时事务已经将数据块写入到数据文件中。ORA-6002023、ORA-6004136、ORA-6004194、ORA-6004197等错误是因为undo表空间中的数据需要恢复。 2. 如果SYSTEM表空间的数据损坏,将无法恢复数据库, 如果是业务用的数据文件, 考虑删除这些损坏的文件后,接着按以下操作执行。 步骤5:在pfile.ora文件中增加如下参数并MOUNT数据库编辑d:pfile.ora文件,添加和修改如下参数:*.event=10513 trace name context forever,level 2undo_management=manual startup pfile=d:pfile.ora mount注意:startup restrict模式无法打开数据库。步骤6:执行recover database操作,并打开数据库(recover database验证数据库文件是否有问题,可不做)SQLrecover database;完成介质恢复。SQLalter database open; select segment_name, tablespace_name, status from dba_rollback_segs;SEGMENT_NAME TABLESPACE_NAME STATUS - - - SYSTEM SYSTEM ONLINE _SYSSMU22_1350439519$ UNDOTBS1 OFFLINE _SYSSMU21_1350439519$ UNDOTBS1 OFFLINE _SYSSMU20_1350439519$ UNDOTBS1 NEEDS RECOVERY _SYSSMU19_1350439519$ UNDOTBS1 OFFLINE _SYSSMU18_1350439519$ UNDOTBS1 OFFLINE _SYSSMU17_1350439519$ UNDOTBS1 OFFLINE _SYSSMU16_1350439519$ UNDOTBS1 OFFLINE _SYSSMU15_1350439519$ UNDOTBS1 OFFLINE _SYSSMU14_1350439519$ UNDOTBS1 OFFLINE _SYSSMU13_1350439519$ UNDOTBS1 OFFLINE _SYSSMU12_1350439519$ UNDOTBS1 OFFLINE 注意:1. 当exp命令在执行过程中报ORA-01555错误时,此时不要试着将UNDOTBS1空间扩大,这是因为实例崩溃时数据库中未提交事务占用了大量的回滚段,在打开数据库后undo表空间仍然有数据需要恢复,即使UNDOTBS1表空间增大,这些可用空间依然不能使用。2.UNDOTBS1表空间中存在NEEDS RECOVERY的回滚段需要记录到pfile中,并要重建该undo表空间。步骤8:设置参数记录损坏的回滚段,重启后删除并重建UNDOTBS1表空间8.1 编辑d:pfile.ora文件,添加如下参数:*._corrupted_rollback_segments=_SYSSMU20_1350439519$ #上述查询中NEEDS RECOVERY状态的回滚段,如果有多个需要记录的回滚端,设置形式为:*._corrupted_rollback_segments=SEGMENT_NAME1, SEGMENT_NAME2,8.2 正常关闭数据库SQLshutdown immediate;8.3 重启数据库SQLstartup pfile=d:pfile.ora;8.4 删除UNDOTBS1表空间SQLdrop tablespace undotbs1 including contents and datafiles;8.5 重建UNDOTBS1表空间(以下仅是样例)SQLcreate undo tablespace undotbs1 datafile F:appx00109548oradataorclundotbs1.dbf size 8192m;步骤9:关闭数据库,以原来的spfile参数文件正常启动数据库SQLshutdown immediate;SQLstartup;小结: 1. 在步骤4打开数据库时,如果没有ORA-6002662,ORA-6002663,ORA-6004136等错误,那么不需要执行步骤56的操作。这通常是事务中DML操作的数据块没有写到数据文件,而是在buffer cache中,因此不需要设置10513事件和_corrupted_rollback_segments,这时按照步骤9操作,观察是否能正常打开、是否有相应的ORA-600错误,如果没有即可正常使用。 2. 在步骤5必须将undo_management修改为manual,否则在dba_rollback_segs表中可能无法展现有问题的回滚段,从而在数据库正常运行中报ORA-6002023和ORA-6004136错误。3. 当在恢复过程中发生ORA-6002662、ORA-6002663错误,不论回滚段是否有损坏的情况,建议都重建undo表空间,避免在业务正常运行时发生ORA-01555错误。 Redo log损坏验证: 1. 在正常的数据库中创建一张小数据表t_smalltable,模拟DML操作时,数据块完全在buffer cache的情况 1.1建立t_smalltable表和索引SQLcreate table t_smalltable as select * from all_objects; SQLcreate index ix_smalltable_objectid on t_smalltable(object_id); 1.2 模拟未提交事务SQLupdate t_smalltable set owner=lower(owner);1.3 在另一个窗口,以sys用户登录将数据库强行关闭SQLconn / as sysdbaSQLshutdown abort;1.4将操作系统上的所有重做日志删除2. 在正常的数据库中创建一张大数据表t_bigtable,模拟DML操作时,有部分数据块写到磁盘的情况 2.1建立t_bigtable表SQLcreate table t_bigtable as select * from all_objects; SQLbegin for i in 1.10 loop insert into t_bigtable select * from t_bigtable; end loop

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论