2种处理和恢复Oracle损坏数据块的方法

    作者:课课家更新于: 2019-02-27 20:11:14

    软考,您想通过吗?一次通过才是硬道理

      遇到Oracle数据库出现损坏的数据块时相信大家都会非常头疼,如果不懂得方法处理和恢复起来需要花费大量的时间和精力。那么到底我们有没有什么特别的办法来解决这个问题呢?为此在本文中课课家笔者就为大家简单介绍2种种处理和恢复Oracle损坏数据块的方法给大家参考参考,希望能帮助到大家。

    2种处理和恢复Oracle损坏数据块的方法_考试认证_Oracle认证_Oracle_课课家

     


     

      备份的情况下进行恢复

      ● 如果我们在无备份的情况下进行数据恢复的操作无疑会造成数据的丢失,正确的方法是我们将数据进行导出然后重建表再进行导入的操作以达到尽量恢复损坏数据块中的数据的目的。但是当遇到有坏块时却不允许导出的,比如我们输入以下命令:

      Exp test/test file=t.dmp tables=t;

      导出命令在执行中会报ORA-01578错误。错误提示会提示哪个文件号的文件以及文件中的哪个块被损坏,比如:ORA—01578:Oracle数据块损坏(文件号4,块号35)

      ● 针对以上的提示首先我们要查询那些对象被损坏,具体我们可以通过以下命令来实现:

      Select tablespace_name,segment_type,owner,segment_name

      From dba_extents

      Where file_id=4 and 35 between block_id and block_id+blocks-1;

      如果我们发现被损坏的块是索引我们则可以通过索引重建来解决;

      如果我们发现损坏的是数据(segment_type为table),我们则可以通过设置以下内部事件使得Exp操作跳过坏块:

      Alter session set events=’10231 Trace name context forever,level 10’;

      ● 完成输入后我们重新执行导出命令并导出相关的表,然后执行DropTable命令删除相关表,最后重建表并导入数据就可以了。

      


     

      通过Rman进行恢复

      ● 如果我们要想通过Rman进行恢复数据库的操作,那么我们首先要存在Rman的最新备份集,然后再执行以下命令:

      RMAN>backup validate datafile 2;检查2号数据文件是否存在坏块

      执行查询:select * from v$database_block_corruption where file#=2;

      ● 如果查询到2号文件存在坏块的情况的话则将在结果集中显示损坏的块号。最后我们根据显示结果执行以下命令来进行恢复操作:

      RMAN>blockrecove rdatafile 2 block 14 from backupset;

      ● 执行以上这个命令后我们就可以恢复坏块且不会造成数据丢失。但是需要我们注意的是要想实现我们必须使数据库在归档模式下运行,不然RMAN无法发挥作用。

      


     

      以上就是2种处理和恢复Oracle损坏数据块的方法的介绍,如果大家觉得有用不妨记下笔记方便到时随时拿出来对照使用吧。另外如果大家觉得笔者的文章中有不足的地方时笔者欢迎大家对本文章中出现的讲解提出自己的个人建议,对出现错误的地方提出批评,笔者会诚心接纳大家的建议和批评 ,并根据大家提出的建议和批评作出相应的修改工作。最后笔者希望本篇文章对大家学习Oracle能够起到一定的帮助作用!

课课家教育

未登录