问题描述

RMAN备份失败,报错如下:

 

channel ch1: starting piece 1 at 02-NOV-12

released channel: ch1

RMAN-00571:

RMAN-00569: ==== ERROR MESSAGE STACK FOLLOWS ============

RMAN-00571: =========

RMAN-03009: failure of backup command on ch1 channel at 11/02/2012 04:03:19

ORA-19566: exceeded limit of 0 corrupt blocks for file /oradata3/o219g2/income_gs_main_tst_tbs12.dbf

RMAN>

Recovery Manager complete.

 

一般坏块处理过程

1、首先确定是什么段、哪个段坏了,是索引还是表? 
执行以下语句看哪个段坏了
SQL>Select b.segment_name,b.segment_type from dba_extents a, dba_segments b
where a.file_id=<F> and <B> between a.block_id and a.block_id+a.blocks-1
and a.segment_name=b.segment_name and a.owner=b.owner;
这里的 F 指的是 file#,B 指的是 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; 
             D、 更名原表,并把 tab_tmp 更名为 tab03
                  SQL>alter table tab03 rename to tab03_bak;
                  SQL>alter table tab_tmp to tab03; 
             E、 在 tab03 上重新创建索引、约束、授权、 trigger 等对象 
             F、 利用表之间的业务关系,把坏块中的数据补足。

 

 

本次处理过程

1.  使用dbv检查一下是否有数据坏块

 

[oracle@svr1-219 backup_script]$ dbv file=/oradata3/o219g2/income_gs_main_tst_tbs12.dbf

DBVERIFY: Release 10.2.0.4.0 - Production on Fri Nov 2 11:52:58 2012

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

DBVERIFY - Verification starting : FILE = /oradata3/o219g2/income_gs_main_tst_tbs12.dbf

Page 386924 is marked corrupt

Corrupt block relative dba: 0x0d85e76c (file 54, block 386924)

Bad check value found during dbv:

Data in bad block:

 type: 6 format: 2 rdba: 0x0d85e76c

 last change scn: 0x02d1.805a7552 seq: 0x1 flg: 0x06

 spare1: 0x0 spare2: 0x0 spare3: 0x0

 consistency value in tail: 0x75520601

 check value in block header: 0x584e

 computed block checksum: 0xfbab

 

Page 404230 is marked corrupt

Corrupt block relative dba: 0x0d862b06 (file 54, block 404230)

Bad check value found during dbv:

Data in bad block:

 type: 6 format: 2 rdba: 0x0d862b06

 last change scn: 0x02d1.805a7552 seq: 0x1 flg: 0x06

 spare1: 0x0 spare2: 0x0 spare3: 0x0

 consistency value in tail: 0x75520601

 check value in block header: 0x339

 computed block checksum: 0x7b41

 

 

 

DBVERIFY - Verification complete

Total Pages Examined         : 512000

Total Pages Processed (Data) : 304782

Total Pages Failing   (Data) : 0

Total Pages Processed (Index): 115775

Total Pages Failing   (Index): 0

Total Pages Processed (Other): 9000

Total Pages Processed (Seg)  : 0

Total Pages Failing   (Seg)  : 0

Total Pages Empty            : 82441

Total Pages Marked Corrupt   : 2

Total Pages Influx           : 0

Highest block SCN            : 2163414262 (721.2163414262)

[oracle@svr1-219 backup_script]$

 

 

 

 

 

2.  查看是什么对象存在坏块

 

SQL> SELECT  segment_type, owner, segment_name

  2            FROM dba_extents

  3           WHERE file_id = 54

  4             and 386924 between block_id AND block_id + blocks - 1;

 

     SEGMENT_TYPE       OWNER                          SEGMENT_NAME

 ------------------ ------------------- ------------------------------------------------

        INDEX              INCOME_GS_MAIN_TST             PK_T_RPT_SOA_RECON_DETAIL

SQL> SELECT  segment_type, owner, segment_name

  2            FROM dba_extents

  3           WHERE file_id = 54

  4             and 404230 between block_id AND block_id + blocks - 1;

 

      SEGMENT_TYPE       OWNER                          SEGMENT_NAME

------------------ ------------------ -----------------------------------

        INDEX              INCOME_GS_MAIN_TST             PK_T_RPT_SOA_RECON_DETAIL

 

3.  处理坏块

上面显示是索引,这样处理起来比较简单,删除重建就可以了

 

©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. cront计划任务的详细讲解
  2. 【ASM】ASMLIB 系列
  3. 优盘提示位置不可用无法访问,磁盘结构损坏且无法读取咋办???
  4. 使用shell脚本实现自动备份MySQL数据库
  5. Centos8 中如何缩减 XFS 分区格式的根目录
  6. 数栈数据安全案例:混合云环境数据库备份容灾实现
  7. 保留最新N份备份目录脚本
  8. Oracle OCR的备份与恢复
  9. 文件系统和磁盘管理

随机推荐

  1. 找到多维Python数组的维度[重复]
  2. 怎么统计android编译时候的warning警告的
  3. Python十题(第2课)
  4. 流畅python学习笔记:第十二章:子类化内置类
  5. Pandas concat:ValueError:传递值的形状为b
  6. Python中类的使用(5私有属性)
  7. 求助:Python是否可以用一行代码来同时给变
  8. 【Python】torrentParser1.04 增加获得磁
  9. Python常用模块-摘要算法(hashlib)
  10. python魔法方法、构造函数、序列与映射、