在许多UNIX平台下,DBV要求数据文件有扩展名,如果没有可以通过建立链接的方法,然后对链接文件进行操作,比如:
- ln -s /dev/rdsk/mydevice /tmp/mydevice.dbf
某些平台,DBV工具不能检查超过2GB的文件,如果碰到DBV-100错误,请先检查文件大小,Metalink Bug 710888对这个问题有描述。
DBV只会检查数据块的正确性,但不会关心数据块是否属于哪个对象。
这个命令提供的参数如表10-1所示。
表10-1 DBV命令参数表
参 数 | 含 义 | 缺 省 值 |
FILE | 要检查的数据文件名 | 没有缺省值 |
START | 检查起始数据块号 | 数据文件的第一个数据块 |
END | 检查的最后一个数据块号 | 数据文件的最后一个数据块 |
BLOCKSIZE | 数据块大小,这个值要和数据库 的DB_BLOCK_SIZE参数值一致 | 缺省值8192 |
LOGFILE | 检查结果日志文件 | 没有缺省值 |
续表
参 数 | 含 义 | 缺 省 值 |
FEEDBACK | 显示进度 | 0 |
PARAFILE | 参数文件名 | 没有缺省值 |
USERID | 用户名、密码 | 没有缺省值 |
SEGMENT_ID | 段ID,参数格式 <tsn.segfile.segblock> | 没有缺省值 |
下面这个例子检查users01.dbf文件。
- 1. [oracle@dbs ~]dbv file=users01.dbf blocksize=2048
- 2.
- 3. DBVERIFY - Verification starting : FILE = users01.dbf
- 4. kdbchk: a row ends in the middle of another
- 5. tab=0 slot=1 begin=0x7a0 len=0x14
- 6. Page 3 failed with check code 5
- 7. Page 10 is marked software corrupt
- 8. Page 12 is marked software corrupt
- 9.
- 10. DBVERIFY - Verification complete
- 11.
- 12. Total Pages Examined : 512
- 13. Total Pages Processed (Data) : 1
- 14. Total Pages Failing (Data) : 1
- 15. Total Pages Processed (Index) : 0
- 16. Total Pages Failing (Index) : 0
- 17. Total Pages Empty : 507
- 18. Total Pages Marked Corrupt : 2
- 19. Total Pages Influx : 0
注意:这个工具的报告使用的是page作为单位,含义和data block相同。
除了检查数据文件,这个工具还允许检查单独的Segment,这时参数值的格式是<tsn.segfile.segblock>,如以下例子。
(1)查看对象的tsn、segfile、segblock属性:
- 1. SQL> select t.ts#, s.header_file, s.header_block
- 2. from v$tablespace t, dba_segments s
- 3. where s.segment_name='TAB1'
- 4. and t.name = s.tablespace_name;
- 5.
- 6. TS# HEADER_FILE HEADER_BLOCK
- 7. ------ ----------- ------------
- 8. 0 1 30297
(2)检查Segment:
- 1. [oracle@dbs ~]$ dbv userid=system/
- H2oisWater SEGMENT_ID= 0.1.30297
- 2.
- 3. DBVERIFY: Release 10.2.0.1.0 -
- Production on Wed Sep 10 11:03:10 2008
- 4.
- 5. Copyright (c) 1982, 2005, Oracle.
- All rights reserved.
- 6.
- 7. DBVERIFY - Verification starting : SEGMENT_ID = 0.1.30297
- 8.
- 9.
- 10. DBVERIFY - Verification complete
- 11.
- 12. Total Pages Examined : 25
- 13. Total Pages Processed (Data) : 21
- 14. Total Pages Failing (Data) : 0
- 15. Total Pages Processed (Index) : 0
- 16. Total Pages Failing (Index) : 0
- 17. Total Pages Processed (Other) : 0
- 18. Total Pages Processed (Seg) : 0
- 19. Total Pages Failing (Seg) : 0
- 20. Total Pages Empty : 4
- 21. Total Pages Marked Corrupt : 0
- 22. Total Pages Influx : 0
- 23. Highest block SCN : 656769 (0.656769)
1.使用dbv检查
D:\oradata\eygle>dbv file=EYGLE.DBF blocksize=8192
DBVERIFY: Release 10.1.0 .4.0 - Production on 星期六 6月 11 17:36:37 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
DBVERIFY - 开始验证: FILE = EYGLE.DBF
页 219 标记为损坏
Corrupt block relative dba: 0x010000db (file 4, block 219)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x010000db
last change scn: 0x0000.0005ee6d seq: 0x2 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xee6d0602
check value in block header: 0x9779
computed block checksum: 0x6141
页 1258 标记为损坏
Corrupt block relative dba: 0x010004ea (file 4, block 1258)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x010004ea
last change scn: 0x0000.00042681 seq: 0x2 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x26810602
check value in block header: 0x660b
computed block checksum: 0x9317
DBVERIFY - 验证完成
检查的页总数: 1280
处理的页总数 (数据): 150
失败的页总数 (数据): 0
处理的页总数 (索引): 127
失败的页总数 (索引): 0
处理的页总数 (其它): 1001
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 0
标记为损坏的总页数: 2
流入的页总数: 0
Highest block SCN : 428223 (0.428223)
2.使用RMAN检查坏块
D:\oradata\eygle>rman target /
恢复管理器: 版本 9.2.0 .6.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
连接到目标数据库: EYGLE (DBID=1365961916)
RMAN> backup validate datafile 4;
启动 backup 于 11-6月 -05
正在使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=17 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00004 name=D:\ORADATA\EYGLE\EYGLE.DBF
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 11-6月 -05
RMAN>
SQL> select * from v$database_block_corruption;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
4 219 1 0 FRACTURED
4 1258 1 0 FRACTURED