oracle


active或者current状态的redo文件损坏

<p>redo日志常规情况下有3中状态:inactive、active或current,inactive损坏不会丢失数据,但是active或current一般会造成数据丢失。</p> <p>查看redo的状态: SQL&gt;select group#,status from v$log;</p> <h1>inactive状态的日志损坏inactive状态的日志损坏导致数据库起不来</h1> <p>直接将对应的redo日志删除即可 SQL&gt; alter database drop logfile group 1;   Database altered. SQL&gt; alter database open; Database altered.</p> <p>备注,如果该联机日志还未完成归档,需使用如下命令删除 SQL&gt;alter database clear unarchived logfile group 3;</p> <h1>active、current状态的日志损坏导致数据库起不来</h1> <p>这种情况下,需要设置隐含参数“_allow_resetlogs_corruption”强制打开数据库(数据库会处于不一致状态),如下:</p> <ol> <li> <p>确定所有数据文件都不处于备份状态 SQL&gt; select 'alter database datafile '''||name||''' end backup;' from v$datafile; <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=4a4366c2c0f84b9f5321c962e64be9d8&amp;amp;file=file.png" alt="" /></p> </li> <li> <p>设置隐含参数,并重启到mount状态 SQL&gt;alter system set &quot;_allow_resetlogs_corruption&quot;=TRUE scope=spfile; <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=bccc31f5506157575e1082cfdc85bd13&amp;amp;file=file.png" alt="" /></p> </li> <li>使用open resetlogs方式强制打开数据库 SQL&gt;alter database open resetlogs;</li> </ol> <p><strong>注意事项</strong></p> <ol> <li>如果open resetlogs打开时提示需要进行恢复,可以使用recover database until cancel,然后输入所有可用的归档日志和联机日志,然后输入cancel取消恢复操作,再重新使用alter database open resetlogs方式打开数据库。</li> <li>将隐含参数去掉,重新打开数据库</li> <li>由于数据库中数据处于一种不一致状态,因此数据库打开后,需要立即进行全库导出和恢复</li> <li>建议使用 ANALYZE TABLE…VALIDATE STRUCTURE CASCADE 命令检查数据一致性(其它可以检查数据一致性的工具也可以)</li> <li>由于是强制方式(不一致方式)打开数据库,因此数据库发生故障前,未提交的数据可能被标记为提交状态</li> <li>强制打开数据库的过程中可能会遭遇其它ORA-600错误,如果第一个参数未400N,可能与回滚段有关,可再MOS查找解决方法,一一解决启动过程中遇到600错误,最后打开数据库,或者是2662,与SCN有关。</li> <li>如果时间允许,最好保留现场(将数据文件进行一次备份)</li> </ol> <p><strong>备注</strong> rac中一个节点(至少一个节点存活)的日志文件(active、current)丢失,处理方式如下: 1.关闭所有实例 2.在受损实例上,启动到mount状态 3.执行alter database open resetlogs命令 4.如果需要,先用recover database until cancel 命令模拟一次不完全恢复 5.实例启动成功后,启动其他实例 6.立即对数据库进行一次全备份</p>

页面列表

ITEM_HTML