[转载]实例恢复详细分析总汇
<p>信息来源: it168</p><p> I. 数据库是处于关闭状态的。<br /></p><div> 试图打开数据库时报ORA-1157和ORA-1110错误,这时的解决方法取于数据库是否是正常shutdown的(使用normal或immediate选项。<br /></div><div> I.A.数据库是正常shutdown的<br /></div><div> 如果数据数据库是正常shutdown的,最简单的解决方法是以offline drop选项删除丢失或损坏的数据文件,以restriceted模式打个数据库,删除并重建这个数据文件所属的那个回滚表空间。如果数据库是以shutdown abort或自己崩溃掉的则不要遵循这个过程。<br /></div><div> 步骤如下:<br /></div><div> 1、确认数据库是正常shutdown的。可以检查alter.log这个文件,定位到最后几行看是否可以看到如下的信息:<br /></div><div> "alter database dismount <br /></div><div> Completed: alter database dismount" <br /></div><div> 这当然也包括以正常方式shutdown,接然试图启动数据库确失败的状况。如果最近一次你是以shutdown abort方式关闭数据库的或数据库是自己crashed掉的,你应用使用下面的I.B的方法。<br /></div><div> 2、在init<sid>.ora中把属于丢失数据文件的回滚段从ROLLBACK_SEGMENTS参数中去掉。如果你不能确信是哪个回滚段,可以简单的把ROLLBACK_SEGMENTS这个参数注释掉。<br /></div><div> 3、以restricted模式mount数据库<br /></div><div> STARTUP RESTRICT MOUNT;<br /></div><div> 4、Offline drop丢失或损坏的那个数据文件。<br /></div><p /><div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px"><pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed"><div id="3"><div><!--Code highlighting produced by Actipro CodeHighlighter (freeware)[url]http://www.CodeHighlighter.com/--[/url]><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">ALTER</span><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">DATABASE</span><span style="COLOR: #000000"> DATAFILE </span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000"><full_path_file_name></span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000"> OFFLINE </span><span style="COLOR: #0000ff">DROP</span><span style="COLOR: #000000">;</span></div></div></pre></div><p /><div><br /><br /> 5、打开数据库<br /></div><div> ALTER DATABASE OPEN;<br /></div><div> 如果返回"Statement processed"这条信息,转到第7步.<br /></div><div> 如果得到ORA-604,ORA-376,和ORA-1110错误,转到第6步。<br /></div><div> 6、因为打开数据库失败,shutdown掉数据库并且编辑int<SID>.ora这个文件。注释掉ROLLBACK_SEGMENTS这个参数,并且在init<SID>.ora文件中加入如下一行:<br /></div><div> _corrupted_rollback_segments = (<rollback1>,...,<rollbackN> )<br /></div><div></div><div> 需要注意的是这个参数只能在指定的情况下或在oracle的全球持术支持的指导下才应使用,然后以restricted模式打开数据库:<br /></div><div> STARTUP RESTRICT<br /></div><div> 7、删除掉那个文件所属的回滚段表空间。<br /></div><p /><div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px"><pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed"><div id="5"><div><!--Code highlighting produced by Actipro CodeHighlighter (freeware)[url]http://www.CodeHighlighter.com/--[/url]><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">DROP</span><span style="COLOR: #000000"> TABLESPACE <tablespace name</span><span style="COLOR: #808080">></span><span style="COLOR: #000000"> INCLUDING CONTENTS;</span></div></div></pre></div><p /><div><br /> 8、重建回滚段表空间及回滚段,创建完后使它们online. <br /></div><div> 9、使数据库所有用户都可用。<br /></div><p /><div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px"><pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed"><div id="7"><div><!--Code highlighting produced by Actipro CodeHighlighter (freeware)[url]http://www.CodeHighlighter.com/--[/url]><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">ALTER</span><span style="COLOR: #000000"> SYSTEM DISABLE RESTRICTED SESSION;</span></div></div></pre></div><p /><div><br /> 10、在init<SID>.ora中把你重新创建的回滚段再一次包括进来,如果你使用了第6步则移除掉CORRUPTED_ROLLBACK_SEGMENTS这个参数。<br /></div><div> I.B.数据库不是正常shutdown的<br /></div><div> 这种情况,数据库最近一次是用shutdown abort或crashed掉关闭,回滚段中几乎一定包含着活动的事务。因此,坏的那个数据文件不能脱机(offline)或是drop掉,你必需从备份恢复这个文件。如果数据为是处于非归档模式的,只有最近的一些事务日志还没有被重写掉的情况你才能成功恢复这个文件。如果这个文件的备份也是无效的,联系一下oracle的技术支持吧。<br /></div><div> 步骤如下:<br /></div><div> 1、从备份中恢复丢失的那个数据文件.<br /></div><div> 2、mount 上数据库<br /></div><div> 3、执行如下的查询:<br /></div><p /><div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px"><pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed"><div id="9"><div><!--Code highlighting produced by Actipro CodeHighlighter (freeware)[url]http://www.CodeHighlighter.com/--[/url]><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">FILE</span><span style="COLOR: #000000">#,NAME,STATUS </span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000"> V$DATAFILE;</span></div></div></pre></div><p /><div id="10"><br /> 如果数据文件的状态是offline的,你必需先把它联机了:<br /></div><p /><div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px"><pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed"><div id="11"><div><!--Code highlighting produced by Actipro CodeHighlighter (freeware)[url]http://www.CodeHighlighter.com/--[/url]><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">ALTER</span><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">DATABASE</span><span style="COLOR: #000000"> DATAFILE </span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000"><full_path_file_name></span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000"> ONLINE;</span></div></div></pre></div><p /><div id="12"><br /> 4、执行如下的查询:<br /></div><p /><div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px"><pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed"><div id="13"><div><!--Code highlighting produced by Actipro CodeHighlighter (freeware)[url]http://www.CodeHighlighter.com/--[/url]><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000"> V1.</span><span style="COLOR: #0000ff">GROUP</span><span style="COLOR: #000000">#, MEMBER, SEQUENCE#, FIRST_CHANGE# </span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000"> V$</span><span style="COLOR: #ff00ff">LOG</span><span style="COLOR: #000000"> V1, V$LOGFILE V2 </span><span style="COLOR: #0000ff">WHERE</span><span style="COLOR: #000000"> V1.</span><span style="COLOR: #0000ff">GROUP</span><span style="COLOR: #000000"># </span><span style="COLOR: #808080">=</span><span style="COLOR: #000000"> V2.</span><span style="COLOR: #0000ff">GROUP</span><span style="COLOR: #000000"># ; </span></div></div></pre></div><p /><div><br /><br /> 这将列出所有的联机的重做日志和他们的序号及首次改变号(first change numbers).<br /></div><div> 5、如果这个数据库是非归档模式的,执行如下的查询:<br /></div><p /><div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px"><pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed"><div id="15"><div><!--Code highlighting produced by Actipro CodeHighlighter (freeware)[url]http://www.CodeHighlighter.com/--[/url]><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000"></span><span style="COLOR: #0000ff">FILE</span><span style="COLOR: #000000">#, CHANGE# </span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000"> V$RECOVER_FILE; </span></div></div></pre></div><p /><div><br /> 如果其中的CHANG#比4中的最小的那个FIRST_CHANGE#大的话,用联机日志就可以完成恢复。<br /></div><div> 6、如果CHANG#比4中的最小的那个FIRST_CHANGE#小,则数据库是不能恢复的,可以联系一下oracle的技术支持。 <br /></div><div> 译者插入:如果你真是非归档方式且这个文件的备份也是无效的,如果你认为可以丢失回滚段中的那事务,你可以用I.A中从第6步的方法,这时可以打开数据库。</div>页:
[1]
