首先对数据库进行rman备份,然后根据下列步骤操作
1.使用工具破坏数据块
可以使用UltraEdit或者WinHex打开文件修改某个数据块,然后保存。
2.访问损坏的数据
sqlplus "/ as sysdba" > startup ORACLE 例程已经启动。
Total System Global Area 59842188 bytes Fixed Size 454284 bytes Variable Size 33554432 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 |
3.检查坏块
select * from V$DATABASE_BLOCK_CORRUPTION;
也可以使用RMAN验证数据文件,以发现坏块:
首先查看模拟坏块的数据文件序号:
select file_name,tablespace_name,status,online_status from dba_data_files;
Select file_name,tablespace_name,file_id "AFN",relative_fno "RFN"
From dba_data_files;
RMAN> backup validate datafile 9;
此时alert_.log文件中会记录RMAN发现的坏块信息:
Corrupt block relative dba: 0x02401376 (file 9, block 4982)
Bad check value found during backing up datafile
Data in bad block:
type: 0 format: 2 rdba: 0x02401376
last change scn: 0x0000.00000000 seq: 0x1 flg: 0x05
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x00000001
check value in block header: 0xb636
computed block checksum: 0x1111
Reread of blocknum=4982, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Reread of blocknum=4982, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Reread of blocknum=4982, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Reread of blocknum=4982, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Reread of blocknum=4982, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Hex dump of (file 9, block 6927) in trace file e:\oracle\product\admin\azuay\udump\azuay_ora_2436.trc
Corrupt block relative dba: 0x02401b0f (file 9, block 6927)
Bad check value found during backing up datafile
Data in bad block:
type: 0 format: 2 rdba: 0x02401b0f
last change scn: 0x0000.00000000 seq: 0x1 flg: 0x05
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x00000001
check value in block header: 0xbe4f
computed block checksum: 0x1110
Reread of blocknum=6927, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Reread of blocknum=6927, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Reread of blocknum=6927, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Reread of blocknum=6927, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
Reread of blocknum=6927, file=E:\ORACLE\PRODUCT\ORADATA\AZUAY\CAS.DBF. found same corrupt data
5.查询RMAN发现的坏块信息
select * from v$database_block_corruption where file#=9;
6.执行恢复
RMAN> startup mount; RMAN> blockrecover datafile 9 block 5935 from backupset;
|
7.检查数据的恢复
SQL> alter database open;
数据库已更改。
SQL> select * from v$database_block_corruption where file#=9;
此时数据已经恢复,但是block corruption信息仍然记录在数据库中,直到下次validate才会清除这部分信息:
RMAN> backup validate datafile 9;
此时从数据库中查询,坏块信息被清除。
SQL> select * from v$database_block_corruption where file#=9;
未选定行