数据块损坏一多都发生在硬件故障上,例如内存,换页区,IO子系统,以及磁盘驱动器等发生问题时,引发数据在写和读的时候破坏了数据块的结构.如何可以发现自己的数据块是否发生损坏呢?
1.查看ALERT LOG 如果发生损坏一般都会在ALERT LOG里有记录.
如:
Corrupt block relative dba: 0x0180024c (file 6, block 588)
Bad check value found during buffer read
Data in bad block:
type: 6 format: 2 rdba: 0x0180024c
last change scn: 0x0000.000d4ded seq: 0x9a flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x4ded069a
check value in block header: 0xaab
computed block checksum: 0x303d
2.使用DBV工具来检查(可以在数据文件使用的时候使用此工具,但是建议不这样用).
页 588 标记为损坏
Corrupt block relative dba: 0x0180024c (file 6, block 588)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0180024c
last change scn: 0x0000.000d4ded seq: 0x9a flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x4ded069a
check value in block header: 0xaab
computed block checksum: 0x303d
3.使用ANALYZE 命令.
scott@ORA10> analyze table test validate structure;
analyze table test validate structure
*
第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 6, 块号 588)
ORA-01110: 数据文件 6: 'C:ORACLEPRODUCT10.2.0ORADATAORA10TEST01.DBF'
4.使用ALTER SYSTEM DUMP DATAFILE 6 BLOCK 588;(来查看SCN 的SEQ 如果为0XFF 块被标记为损坏)
如:sys@ORA10> oradebug setmypid
已处理的语句
sys@ORA10> oradebug tracefile_name
c:oracleproduct10.2.0adminora10udumpora10_ora_5768.trc
scn: 0x0000.00000000 seq: 0xff flg: 0x00 tail: 0x000006ff(SCN 为0 说明是MEDIA 损坏,SEQ 0XFF 说明是SOFT 损坏)
5.使用EVENT 10232 在PFILE里指定EVENT='10232 TRACE NAME CONTEXT FOREVER,LEVEL 10'
这样会在发现BLOCK CORRUPTION 的时候DUMP 出TRACE 信息
如:
Corrupt block relative dba: 0x01800086 (file 6, block 134)
Bad check value found during buffer read
Data in bad block:
type: 6 format: 2 rdba: 0x01800086
last change scn: 0x0000.000bd90f seq: 0x1e flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xd90f061e
check value in block header: 0x395f
computed block checksum: 0x2d30
Reread of rdba: 0x01800086 (file 6, block 134) found same corrupted data
table scan: segment: file# 6 block# 11
skipping corrupt block file# 6 block# 134
*** 2008-08-28 16:39:11.453
*** 2008-08-28 16:39:11.453 60680 kcrr.c
ARCH: Archival disabled due to shutdown: 1089
*** 2008-08-28 16:39:12.468 60680 kcrr.c
ARCH: Archival disabled due to shutdown: 1089
6.使用EXP工具(此方法SYSTEM表空间的CORRUPTION 可能不能发现)
如: EXP SYSTEM/ADMIN FULL=Y FILE=/dev/null
. . 正在导出表 TEST
EXP-00056: 遇到 ORACLE 错误 1578
ORA-01578: ORACLE 数据块损坏 (文件号 6, 块号 588)
ORA-01110: 数据文件 6: 'C:ORACLEPRODUCT10.2.0ORADATAORA10TEST01.DBF'
7.使用RMAN 工具(只有此方法能发现HWM 以上的数据块损坏)
如:
通道 ORA_DISK_1: 正在启动段 1 于 28-8月 -08
ORA-19566:超出块损坏限制:0
............................
8.使用SELECT * FROM TABLENAME;做FULL TABLE SCAN 同样也会标记出损坏的块。[@more@]