oracle坏块简单测试修复步骤

使用dbv查看坏块,dbv file=xxx.dbf
DBVERIFY: Release 11.2.0.1.0 - Production on Tue Aug 16 11:31:47 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Keyword     Description                    (Default)
----------------------------------------------------
FILE        File to Verify                 (NONE)
START       Start Block                    (First Block of File)
END         End Block                      (Last Block of File)
BLOCKSIZE   Logical Block Size             (8192)
LOGFILE     Output Log                     (NONE)
FEEDBACK    Display Progress               (0)
PARFILE     Parameter File                 (NONE)
USERID      Username/Password              (NONE)
SEGMENT_ID  Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN    Highest Block SCN To Verify    (NONE)

            (scn_wrap.scn_base OR scn)   

或者使用视图v$database_block_corruption;

然后
1、执行以下语句看哪个段坏了
Select b.segment_name, b.segment_type
  from dba_extents a, dba_segments b
 where a.file_id =&FNO
   and &BLOCK between a.block_id and a.block_id + a.blocks - 1
   and a.segment_name = b.segment_name
   and a.owner = b.owner;
这里的 &FNO 指的是 file#,&BLOCK 指的是 block#
2. 如果是物理坏块,分几种情况:
    1)如果是文件系统且做了raid的,在messages里会显示具体哪个磁盘出问题了,更换磁盘,系统会自动恢复磁盘。
    2)如果是文件系统且没做raid,但有备份和归档,在messages里会显示具体哪个磁盘出问题了,更换磁盘,然后用数据文件备份和归档、在线日志恢复到最后的时间点。
    3)如果是文件系统且没做raid,没有备份,那么就要按下面的步骤3里的操作恢复好坏块后,再更换磁盘。
    4)如果是asm管理磁盘阵列,将亮红灯的磁盘拔掉,换个新的,系统会自动恢复磁盘。
3. 如果是逻辑坏块,就看是索引坏块还是表坏块。
    如果是索引坏块,那么直接删除索引,重建索引就好。
    如果是表坏块,分三种情况:
        1)有rman备份,利用rman备份恢复坏块。命令:blockrecover datafile file# block block# from backupset;
        2)没有rman备份,只有exp备份,且备份可用,那么删除这个表,重新导入。
        3)如果没有备份,以表tab03为例,按下面的步骤处理:
             A、 以 tab03的 owner 连入 oracle
             B、 使用诊断事件 10231,跳过坏块检查
                  SQL> ALTER SYSTEM SET EVENTS '10231 trace name context forever,level 10';
             C 、创建一个临时表 tab_tmp 的表中除坏块的数据都检索出来
                  SQL>CREATE TABLE tab_tmp as select * from tab03;
                  SQL>ALTER SYSTEM SET EVENTS '10231 trace name context off';
             D、 更名原表,并把 tab_tmp 更名为 tab03
                  SQL>alter table tab03 rename to tab03_bak;
                  SQL>alter table tab_tmp to tab03;
             E、 在 tab03 上重新创建索引、约束、授权、 trigger 等对象

             F、 利用表之间的业务关系,把坏块中的数据补足。

            G,如果要删除之前的表空间,或者表

                 alter database datafile '/ora01/oradata/tbs_data01.dbf' offline drop;
                  alter tablespace tbs1 including contents;

              删除表,drop table  table1 pruge;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值