Oracle Block Recover

来源:互联网 发布:彩票开奖网站源码 php 编辑:程序博客网 时间:2024/05/18 01:57

      本文将介绍Oracle数据块损坏的处理方法,查看数据坏块所在数据文件号及块号可以对表进行一次全表扫描,如:
    select count(*) from tablename;

      一. 没有备份的情况下:

          1.使用exp/imp恢复
          在这种情况下肯定会造成数据的丢失,此时应采取将数据导出然后重建表再进行导入的方法,来尽量恢复损坏数据块中的数据,但是在有坏块的情况下是不允许导出的,如下命令:
          Exp user/passwd file=file.dmp tables=table;
            导出命令在执行中会报ORA-01578错误,在这错误提示中会提示那个文件号的文件以及这个文件中的哪个块被损坏,如:ORA— 01578:ORACLE 数据块损坏(文件号 6,块号 36)
          针对以上的提示首先查询那些对象被损坏:
          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;
          如果被损坏的块是索引,通常可以通过索引重建来解决,如果损坏的是数据egment_type为table,那么通过设置如下内部事件使得Exp 操作跳过坏块。
          Alter session set events=’10231 trace name context forever,level 10’;
          然后重新执行导出命令,导出相关的表,然后执行Drop Table命令删除相关表,之后重建表最后导入数据。
        2.使用DBMS_REPAIR恢复
          用DBMS_REPAIR当然也会丢失数据。这里不做详细的介绍,有兴趣的可以查看oracle的在线文档

      二. 有备份的情况下:

          1.存在Rman的最新备份集的情况下,执行如下命令:
          RMAN>backup validate datafile 6;检查6号数据文件是否存在坏块
          执行查询:select * from v$database_block_corruption where file#=6;
          如果6号文件存在坏块的话,那么将在结果集中有所显示,会显示损坏的块号,根据显示结果执行如下命令进行恢复:
          RMAN>blockrecover datafile 4 block 35 from backupset;
          该命令执行后即可恢复坏块,并且不会造成数据丢失,但是要求数据库必须要运行在归档模式下,否则RMAN无法发挥作用,而且通过RMAN做过最新的数据库备份
         2.存在数据文件的拷贝的情况下,使用bbed恢复。
           bbed就是英文block browse edit的缩写,用来直接查看和修改数据文件数据的一个工具。这个工具在windows和linux上面都有,但在linux下需要编译:
           然后把$ORACLE_HOME/rdbms/lib加到环境变量的PATH里面,就可以直接在命令中bbed了。BBED的缺省口令为blockedit,For Oracle Internal Use only 请谨慎使用Oracle不做技术支持。
          [oracle@test oracle]$ cd $ORACLE_HOME/rdbms/lib
          [oracle@test lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
          进入bbed后,可以使用help查看帮助
          BBED> help
          bbed的详细用法这里不做具体介绍。

            如果是由于ORA-00600: internal error code, arguments: [kddummy_blkchk], [47], [935468], [18038], [], [], [], [] 
解决办法是将db_block_checksum这个参数改为FALSE,
DB_BLOCK_CHECKING参数主要是用于数据块的逻辑一致检查,但只是块内,不包括块间的逻辑检查,比如索引项目的ROWID指向的是不存在的行等。主要用于防止在内存中损坏或数据损坏。由于是逻辑检查,因此引起的额外负荷比较高,甚至可以达到10%,因此对于一个繁忙的系统,特别是插入或更新操作很多的系统,性能影响是比较明显的。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子三门成绩全不及格家长该怎么办 宝宝快十个月了还不会爬怎么办 小孩写字老把手向里扭曲怎么办 孩子该上四年级了数学差的很怎么办 孩子上三年级了数学成绩好差怎么办 三年级数学老考70-80分怎么办 叛逆期的孩子用死来威胁家长怎么办 叛逆期的孩子抽烟喝酒家长该怎么办 大学遇到不好的老师加课怎么办 两岁的宝宝脾气古怪不听话怎么办 16个月宝宝不听话脾气大怎么办 如果你很害怕去面对一件事怎么办 孩子上幼儿园哭老师不理孩子怎么办 发现幼儿园给孩子吃药片该怎么办 做老师的打学生被家长投诉怎么办 学生认为老师向家长打报告怎么办 老师发打12分的试卷给家长怎么办 孩子在学校顶撞老师不让上学怎么办 被老师骂了不敢去学校怎么办 孩子不爱去幼儿园 总是哭怎么办呢 孩子在幼儿园被老师罚家长该怎么办 孩子不喜欢幼儿园里的体能课怎么办 初中叛逆期的孩子怎么办老师做法 二年级孩子不受老师待见怎么办 孩子该上初中了没学籍怎么办 四个多月的婴儿不喜欢看人怎么办 2个月婴儿不喜欢吃奶粉怎么办 想学习但是又学不进去怎么办 在省外读书 回来读高中学籍怎么办 一岁宝宝这几天不爱吃饭怎么办 2岁的宝宝吃多了怎么办 小孩吃了退烧药吐了怎么办 牙齿与牙齿之间有洞喜欢塞牙怎么办 胃有点烧心天天没食欲不饿怎么办 1岁半宝宝不吃饭光喝奶粉怎么办 一岁半宝宝光喝奶粉不吃饭怎么办 一岁半的宝宝光喝奶粉不吃饭怎么办 两岁半宝宝光喝奶粉不吃饭怎么办 宝宝9个月不好好吃饭奶粉怎么办 2岁半宝宝不愿意自己吃饭怎么办 一周岁多的宝宝不吃饭怎么办