环境: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;
/
恢复完成,重新启动备库恢复!!