DBV工具的使用

DBV是一个外部命令,能够执行物理数据结构的完整性检查。DBV只能检查可缓存管理的块(数据块),所以只能用于数据文件,不支持控制文件和重做日志文件的块检查。DBV使用于offline或者online的数据文件,也可也验证备份文件,但是备份文件只能是rman的copy命令或者操作系统的cp(win下是copy)命令备份的数据文件。控制文件和重做日志文件的检查可以用DBMS_HM包完成。
    DBV有两种命令行接口,一是验证数据文件的数据块,二是验证段。下面分别做测试:
    一、验证数据文件的数据块
    在这种模式下数据库可处在打开或关闭状态。
[email protected]>create table scott.test as select * from dba_objects where rownum <=100;
Table created.

---查出test表所在的数据文件和开始的块id以及块数量
[email protected]>select a.file_id,a.block_id,a.blocks,b.name
  2  from dba_extents a,v$datafile b
  3  where a.file_id=b.file# and a.owner=‘SCOTT‘ and a.segment_name=‘TEST‘;
FILE_ID   BLOCK_ID      BLOCKS NAME
---------- ---------- ---------- ---------------------------------------------
     4      520           8 /u01/app/oracle/oradata/orcl/users01.dbf

---查出表中记录所在的块
[email protected]>select distinct dbms_rowid.rowid_block_number(rowid) from scott.test;
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------
                 523
                 524

---破坏有记录的数据块
[[email protected] ~]$ dd of=/u01/app/oracle/oradata/orcl/users01.dbf bs=8192 conv=notrunc seek=524 <<EOF
> abcdefghicklmn
> EOF
0+1 records in
0+1 records out
15 bytes (15 B) copied, 3.1499e-05 s, 476 kB/s

---执行dbv命令检查数据文件
[[email protected] ~]$ dbv file=/u01/app/oracle/oradata/orcl/users01.dbf blocksize=8192
DBVERIFY: Release 11.2.0.3.0 - Production on Sat Jan 12 14:45:56 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/orcl/users01.dbf
Page 524 is marked corrupt                    ---数据块524标记为坏块
Corrupt block relative dba: 0x0100020c (file 4, block 524)
Bad header found during dbv: 
Data in bad block:
 type: 97 format: 2 rdba: 0x68676665
 last change scn: 0x6e6d.6c6b6369 seq: 0xa flg: 0x04
 spare1: 0x63 spare2: 0x64 spare3: 0x0
 consistency value in tail: 0x65790602
 check value in block header: 0x2f5b
 computed block checksum: 0xad06

DBVERIFY - Verification complete

Total Pages Examined         : 1920
Total Pages Processed (Data) : 1161
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 39
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 398
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 321
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 1205628 (0.1205628)

Pages--表示数据块
Total Pages Examined --表示文件中的数据块总数量
Total Pages Processed--表示已检查数据块的数量
Total Pages Failing--表示检查失败的数据块数量
Total Pages Marked Corrupt--表示数据块已损坏
Total Pages Influx--表示同一时间正在读和写的数据块数量。如果数据库是打开状态,当DBV运行时多次读数据块得到一个一致的映像,但是因为数据库是打开的,可能同一数据块在读的时候又有写入的动作,DBV不能得到一个一致的数据块映像

DBV除了能检查有内容的数据块,可以检查空数据块,这充分证明了dbv是从物理层面上验证数据块的完整性。
[[email protected] ~]$ dd of=/u01/app/oracle/oradata/orcl/users01.dbf bs=8192 conv=notrunc seek=526 <<EOF
> abcdefghijklmn
> EOF
0+1 records in
0+1 records out
15 bytes (15 B) copied, 3.0521e-05 s, 491 kB/s

[[email protected] ~]$ dbv file=/u01/app/oracle/oradata/orcl/users01.dbf blocksize=8192
 
DBVERIFY: Release 11.2.0.3.0 - Production on Sat Jan 12 15:11:51 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/orcl/users01.dbf
Page 524 is marked corrupt                ---数据块524标记为坏块
Corrupt block relative dba: 0x0100020c (file 4, block 524)
Bad header found during dbv: 
Data in bad block:
 type: 97 format: 2 rdba: 0x68676665
 last change scn: 0x6e6d.6c6b6369 seq: 0xa flg: 0x04
 spare1: 0x63 spare2: 0x64 spare3: 0x0
 consistency value in tail: 0x65790602
 check value in block header: 0x2f5b
 computed block checksum: 0xad06

Page 526 is marked corrupt                ---空数据块526也标记为坏块
Corrupt block relative dba: 0x0100020e (file 4, block 526)
Bad header found during dbv: 
Data in bad block:
 type: 97 format: 2 rdba: 0x68676665
 last change scn: 0x6e6d.6c6b6a69 seq: 0xa flg: 0x04
 spare1: 0x63 spare2: 0x64 spare3: 0x0
 consistency value in tail: 0x64b30601
 check value in block header: 0x54c2
 computed block checksum: 0xa5cd

DBVERIFY - Verification complete

Total Pages Examined         : 1920
Total Pages Processed (Data) : 1160
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 39
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 398
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 321
Total Pages Marked Corrupt   : 2
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 1205628 (0.1205628)

DBV可以检查ASM管理的数据文件,但是数据库要求是open状态,同时要使用选项USERID,例如:
    dbv userid=system/oracle file=+DATAa/orcl/datafile/users01.dbf blocksize=8192

DBV验证rman的backup as copy命令备份的数据文件,例如:
RMAN> backup as copy datafile 5;

Starting backup at 12-JAN-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=15 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
output file name=/u01/app/oracle/fast_recovery_area/ORCL/datafile/o1_mf_example_8h22vb6m_.dbf tag=TAG20130112T150617 RECID=2 STAMP=804524793
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25
Finished backup at 12-JAN-13

[[email protected] ~]$ dbv file=/u01/app/oracle/fast_recovery_area/ORCL/datafile/o1_mf_example_8h22vb6m_.dbf

DBVERIFY: Release 11.2.0.3.0 - Production on Sat Jan 12 15:08:08 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

DBVERIFY - Verification starting : FILE = /u01/app/oracle/fast_recovery_area/ORCL/datafile/o1_mf_example_8h22vb6m_.dbf

DBVERIFY - Verification complete

Total Pages Examined         : 44240
Total Pages Processed (Data) : 6600
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 1148
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 2841
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 33651
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 1126464 (0.1126464)

二、验证段
    验证段的时候要求数据库必须处在open状态,还需要提供拥有SYSDBA权限的帐号进行查询,查询段的命令格式例如:
    dbv userid=system/oracle segment_id=tsn.segfile.segblock
    tsn--表示表空间id
    segfile--表示段头所在数据文件号
    segblock--表示段头数据块号
    这三个值可以通过数据字典sys_dba_segs获取,相关的列分别是TABLESPACE_ID、 HEADER_FILE和HEADER_BLOCK

[email protected]>select tablespace_id,header_file,header_block
  2  from sys_dba_segs
  3  where owner=‘SCOTT‘ and segment_name=‘TEST‘;

TABLESPACE_ID HEADER_FILE HEADER_BLOCK
------------- ----------- ------------
        4        4       522

[[email protected] ~]$ dbv userid=system/oracle segment_id=4.4.522

DBVERIFY: Release 11.2.0.3.0 - Production on Sat Jan 12 15:26:30 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

DBVERIFY - Verification starting : SEGMENT_ID = 4.4.522
Page 524 is marked corrupt
Corrupt block relative dba: 0x0100020c (file 4, block 524)
Bad header found during dbv: 
Data in bad block:
 type: 97 format: 2 rdba: 0x68676665
 last change scn: 0x6e6d.6c6b6369 seq: 0xa flg: 0x04
 spare1: 0x63 spare2: 0x64 spare3: 0x0
 consistency value in tail: 0x65790602
 check value in block header: 0x2f5b
 computed block checksum: 0xad06

Page 526 is marked corrupt
Corrupt block relative dba: 0x0100020e (file 4, block 526)
Bad header found during dbv: 
Data in bad block:
 type: 97 format: 2 rdba: 0x68676665
 last change scn: 0x6e6d.6c6b6a69 seq: 0xa flg: 0x04
 spare1: 0x63 spare2: 0x64 spare3: 0x0
 consistency value in tail: 0x64b30601
 check value in block header: 0x54c2
 computed block checksum: 0xa5cd

DBVERIFY - Verification complete

Total Pages Examined         : 8
Total Pages Processed (Data) : 3
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 2
Total Pages Processed (Seg)  : 1
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 0
Total Pages Marked Corrupt   : 2
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 1205628 (0.1205628)

三、其他
    dbv命令帮助:
[[email protected] ~]$ dbv

DBVERIFY: Release 11.2.0.3.0 - Production on Sat Jan 12 15:48:28 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Keyword     Description                    (Default)
----------------------------------------------------
FILE        File to Verify                 (NONE)
START       Start Block                    (First Block of File)
END         End Block                      (Last Block of File)
BLOCKSIZE   Logical Block Size             (8192)
LOGFILE     Output Log                     (NONE)
FEEDBACK    Display Progress               (0)
PARFILE     Parameter File                 (NONE)
USERID      Username/Password              (NONE)
SEGMENT_ID  Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN    Highest Block SCN To Verify    (NONE)
            (scn_wrap.scn_base OR scn)

编写脚本一次检查多个数据文件
    保存下列脚本为dbv_all.sh文件。
#!/bin/bash
DATADIR=$1
BLOCKSIZE=$2
cd $DATADIR
ls -1 *.dbf | while read FILE
do
    dbv file=$FILE blocksize=$BLOCKSIZE
done

给脚本执行的权限。
[[email protected] ~]$ chmod +x dbv_all.sh

执行脚本。
[[email protected] ~]$ ./dbv_all.sh /u01/app/oracle/oradata/orcl 8192 >> dbv_all.log 2>&1

查看执行结果。
[[email protected] ~]$ more dbv_all.log

转:http://blog.csdn.net/seertan/article/details/8496445

时间: 2024-12-15 01:36:30

DBV工具的使用的相关文章

Oracle的DBV工具

DBV(DBVERIFY)是Oracle提供的一个命令行工具,它可以对数据文件物理和逻辑两种一致性检查.但是这个工具不会检查索引记录和数据记录的匹配关系,这种检查必须使用analyze validate structure命令. 这个工具有如下特点: 以只读的方式打开数据文件,在检查过程中不会修改数据文件的内容. 可以在线检查数据文件,而不需要关闭数据库. 不能检查控制文件和日志文件,只能检查数据文件. 这个工具可以检查ASM文件,但数据库必须Open状态,并且需要通过USERID指定用户,比如

linux命令dd

原文链接: http://blog.csdn.net/adaptiver/article/details/6672592 dd 使用dd这个linux命令可以创建一定大小文件. linux创建文件命令:dd命令把指定的输入文件拷贝到指定的输出文件中,并且在拷贝的过程中可以进行格式转换.语法:CODE:[Copy to clipboard]dd [选项]QUOTE:if =输入文件(或设备名称).of =输出文件(或设备名称).ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数.

Oracle corrupt block(坏块) 详解

转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接 在看坏块之前,先看几个相关的链接,在后面的说明中,会用到链接中的一些内容. ORA-600 各个参数含义说明 http://blog.csdn.net/tianlesoftware/article/details/6645809 Oracle 不同故障的恢复方案 http://blog.csdn.net/tianlesoftware/ar

【翻译自mos文章】V$BACKUP_DATAFILE 中显示file#=0 有损坏

来源于: V$BACKUP_DATAFILE Shows Corruptions for File #0 (文档 ID 399113.1) 适用于: Oracle Database - Enterprise Edition - Version 9.2.0.1 to 11.1.0.6 [Release 9.2 to 11.1] Information in this document applies to any platform. 症状: 当查询v$backup_datafile时,发现对于fi

使用BBED模拟Oracle数据库坏块

BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用.该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接. 1.安装BBED [[email protected] lib]$ pwd /u02/app/product/10.2.0/db_1/rdbms/lib [[email protected] lib

AppAssure备份Windows平台Oracle数据库

环境: AppAssure Core : 5.4.3.106 Oracle:  11g Enterprise Edition Release 11.2.0.1.0 -64bit OS: Windows Server 2012 R2 (Core Server and OracleDB) 备份恢复步骤如下: 1. 检查数据库模式, 查看数据库是否处于归档模式中 sqlplus / as sysdba SQL > archive log list 2. 若为非归档,则修改数据库归档模式 SQL > 

对Oracle数据库坏块的理解

1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说的物理坏块和逻辑坏块. 在每一个数据块的头部有一个校验和字段,每当数据块要被写回磁盘前,Oracle都会重新计算 这个数据块的校验和,并记录到这个字段最终写会磁盘.下次数据块被读入内存,Oracle会重新 计算数据块的校验和,并和块头的字段相比较,如果有差异,Oracle就知道这个数据块有错误, 会

检测ORACLE数据块损坏的方法汇总

1:使用初始化参数 使用初始化参数db_block_checksum\db_block_checking可以设置数据库对块的物理一致性和逻辑一致性检查. Db_block_checksum:物理一致性检查,默认开启.始终对system表空间数据进行检查,如果开启还会对日志进行检查,开启后会有1-2%的性能影响,建议开启. Db_block_checking:逻辑一致性检查,默认未开启.始终对system表空间进行检查,如果开启会有1-10%的性能影响.DML越频繁,性能影响越大.不建议开启. 有

【转】基于RMAN实现坏块介质恢复(blockrecover)

本文转自:乐沙弥的世界 对于物理损坏的数据块,我们可以通过RMAN块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据块.恢复整个数据库或数据文件那不是大炮用来打蚊子,有点不值得!但前提条件是你得有一个可用的RMAN备份存在,因此,无论何时备份就是一切.本文演示了产生坏块即使用RMAN实现坏块恢复的全过程. 1.创建演示环境 SQL> select * from v$version where rownum<2;