oracle dataguard坏块,DataGuard 环境rman恢复主库坏块一例

环境:oracle 10g dataguard环境

问题:

ERROR:

ORA-01578: ORACLE data block corrupted (file # 4, block # 558)

ORA-01110: data file 4: '/data/oracle/oradata/primary/users01.dbf'

主库坏块报错

由于是DG环境,考虑从备用库COPY数据文件,利用rman恢复坏块

1.在主库上先查出出现坏块的object

SELECT   segment_name,

file_id,

block_id,

blocks,

block_id + blocks - 1 largest

FROM   dba_extents

WHERE   block_id = (SELECT   MAX (block_id)

FROM   dba_extents

WHERE   block_id < 558 AND file_id = 4)

AND file_id = 4;

SEGMENT_NAME        FILE_ID   BLOCK_ID     BLOCKS    LARGEST

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

TEST                   4        553          8        560

看到是test表上有坏块

2.用dbv检查datafile,查看一共有多少坏块

[oracle@primary bin]$ $ORACLE_HOME/bin/dbv file=/data/oracle/oradata/primary/users01.dbf

DBVERIFY: Release 10.2.0.3.0 - Production on Wed Apr 28 16:22:13 2010

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

DBVERIFY - Verification starting : FILE = /data/oracle/oradata/primary/users01.dbf

Page 558 is marked corrupt

Corrupt block relative dba: 0x0100022e (file 4, block 558)

Bad header found during dbv:

Data in bad block:

type: 4 format: 7 rdba: 0x0100022e

last change scn: 0x0000.0004af86 seq: 0x1 flg: 0x04

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

consistency value in tail: 0xaf860601

check value in block header: 0x84e4

computed block checksum: 0xf502

DBVERIFY - Verification complete

Total Pages Examined         : 1120

Total Pages Processed (Data) : 261

Total Pages Failing   (Data) : 0

Total Pages Processed (Index): 72

Total Pages Failing   (Index): 0

Total Pages Processed (Other): 255

Total Pages Processed (Seg)  : 0

Total Pages Failing   (Seg)  : 0

Total Pages Empty            : 531

Total Pages Marked Corrupt   : 1

Total Pages Influx           : 0

Highest block SCN            : 309453 (0.309453)

坏块只有1个处理起来还是比较简单

3.先暂时跳过坏块,用户临时可用

sqlplus "/as sysdba"

declare

begin

dbms_repair.skip_corrupt_blocks (

schema_name => 'TEST',

object_name => 'TEST',

object_type => dbms_repair.table_object,

flags => dbms_repair.skip_flag);

end;

/

4.rman的方法恢复

停备库,从备库得到最新的users01.dbf,改名为users01.dbf.bak传到主库

scp  user01.dbf  192.168.6.2:/home/oracle

主库  mv /home/oracle/users01.dbf   /home/oracle/user01.dbf.bak

在主库上作

rman nocatalog

connect target

catalog datafilecopy '/home/oracle/users01.dbf.bak';

list copy of database;

run {

blockrecover datafile 4 block 558;

}

RMAN> catalog datafilecopy '/home/oracle/users01.dbf.bak';

cataloged datafile copy

datafile copy filename=/home/oracle/users01.dbf.bak recid=2 stamp=717525968

RMAN> list copy of database;

List of Datafile Copies

Key     File S Completion Time Ckp SCN    Ckp Time        Name

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

2       4    A 28-APR-10       338972     28-APR-10       /home/oracle/users01.dbf.bak

RMAN> run {

2>           blockrecover datafile 4 block 558;

3>           }

Starting blockrecover at 28-APR-10

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=142 devtype=DISK

channel ORA_DISK_1: restoring block(s) from datafile copy /home/oracle/users01.dbf.bak

starting media recovery

media recovery complete, elapsed time: 00:00:03

Finished blockrecover at 28-APR-10

RMAN>

5.关闭NOSKIP_FLAG

declare

begin

dbms_repair.skip_corrupt_blocks (

schema_name => 'TEST',

object_name => 'TEST',

object_type => dbms_repair.table_object,

flags => dbms_repair.NOSKIP_FLAG);

end;

/

恢复完成,重新启动备库恢复!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值