Oracle工具——DBVERIFY

yangtingkun發表於2009-03-26

DBVERIFY工具用來驗證資料檔案的物理結構。

 

 

DBVERIFY工具的主要目的是為了檢查資料檔案的物理結構,包括資料檔案是否損壞,是否存在邏輯壞塊,以及資料檔案中包含何種型別的資料。

DBVERIFY工具可以驗證ONLINEOFFLINE的資料檔案。不管資料庫是否開啟,都可以訪問資料檔案。一個最簡單的訪問資料檔案的例子:

E:\oracle>dbv file=e:\oracle\oradata\ytk92\users01.dbf blocksize=8192

DBVERIFY: Release 9.2.0.4.0 - Production on 星期四 3 26 21:17:44 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

DBVERIFY - 驗證正在開始 : FILE = e:\oracle\oradata\ytk92\users01.dbf


DBVERIFY -
驗證完成

檢查的頁總數         8160
處理的頁總數(資料):6867
失敗的頁總數(資料):0
處理的頁總數(索引):743
失敗的頁總數(索引):0
處理的頁總數(其它):270
處理的總頁數 ()  : 0
失敗的總頁數 ()  : 0
空的頁總數            280
標記為損壞的總頁數:0
匯入的頁總數           0

可以看到,dbverify給出的結果包括資料檔案包括的BLOCK數量,其中包括多少個資料塊,多少個索引塊,多少空塊,多少個已經被標誌為壞塊的塊,多少個壞塊。

對於DBVERIFY工具,高版本可以自動識別低版本資料庫,比如11gdbv訪問9i的資料庫:

DBVERIFY: Release 11.1.0.6.0 - Production on 星期四 3 26 21:34:28 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

DBVERIFY - 開始驗證: FILE = e:\oracle\oradata\ytk92\users01.dbf


DBVERIFY -
驗證完成

檢查的頁總數: 8160
處理的頁總數 (資料): 7192
失敗的頁總數 (資料): 0
處理的頁總數 (索引): 415
失敗的頁總數 (索引): 0
處理的頁總數 (其它): 273
處理的總頁數 ()  : 0
失敗的總頁數 ()  : 0
空的頁總數: 280
標記為損壞的總頁數: 0
流入的頁總數: 0
加密的總頁數        : 0
最高塊 SCN            : 1963808326 (1.1963808326)

但是低版本的dbv訪問高版本會報錯:

E:\oracle>dbv file=e:\oracle\oradata\ytk102\yangtk01.dbf blocksize=8192

DBVERIFY: Release 9.2.0.4.0 - Production on 星期四 3 26 21:42:06 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

DBVERIFY - 驗證正在開始 : FILE = e:\oracle\oradata\ytk102\yangtk01.dbf
匯入的頁1 - 可能是介質損壞
***
Corrupt block relative dba: 0x00000001 (file 0, block 1)
Fractured block found during dbv:
Data in bad block -
 type: 0 format: 0 rdba: 0x00000000
 last change scn: 0x0000.00000000 seq: 0x0 flg: 0x00
 consistency value in tail: 0x00000010
 check value in block header: 0x0, block checksum disabled
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***

標記為損壞的頁2
***
Corrupt block relative dba: 0x00000002 (file 0, block 2)
Bad header found during dbv:
Data in bad block -
 type: 2 format: 0 rdba: 0x00000000
 last change scn: 0x0000.00000000 seq: 0x0 flg: 0x00
 consistency value in tail: 0x00000000
 check value in block header: 0x0, block checksum disabled
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***

.
.
.
匯入的頁16384 - 可能是介質損壞
***
Corrupt block relative dba: 0x00004000 (file 0, block 16384)
Fractured block found during dbv:
Data in bad block -
 type: 0 format: 0 rdba: 0x00000000
 last change scn: 0x0000.00000000 seq: 0x0 flg: 0x00
 consistency value in tail: 0x00000000
 check value in block header: 0x0, block checksum disabled
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***

 

DBVERIFY - 驗證完成

檢查的頁總數         16384
處理的頁總數(資料):0
失敗的頁總數(資料):0
處理的頁總數(索引):0
失敗的頁總數(索引):0
處理的頁總數(其它):0
處理的總頁數 ()  : 0
失敗的總頁數 ()  : 0
空的頁總數            0
標記為損壞的總頁數:16384
匯入的頁總數           10744

DBV工具還有一種在資料庫開啟的情況下使用的,驗證指定段的用法:

SQL> CONN /@YTK92 AS SYSDBA
已連線。
SQL> SELECT TABLESPACE_ID, HEADER_FILE, HEADER_BLOCK
  2  FROM SYS_DBA_SEGS
  3  WHERE SEGMENT_NAME = 'T_T';

TABLESPACE_ID HEADER_FILE HEADER_BLOCK
------------- ----------- ------------
            9           9         1387

這種方法需要查詢表空間ID、段頭所在的資料檔案ID和以及段頭所在表空間ID,要獲取這個資訊可以透過SYS使用者查詢SYS_DBA_SEGS檢視。需要注意的是,Oracle文件給出的SYS_USER_SEGS檢視只能查詢SYS使用者的段,要查詢普通使用者的段資訊,需要訪問SYS_DBA_SEGS

E:\oracle>dbv userid=yangtk/yangtk segment_id=9.9.1387

DBVERIFY: Release 9.2.0.4.0 - Production on 星期四 3 26 21:56:19 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

DBVERIFY - 正在啟動驗證: SEGMENT_ID = 9.9.1387


DBVERIFY -
驗證完成

檢查的頁總數         512
處理的頁總數(資料):470
失敗的頁總數(資料):0
處理的頁總數(索引):26
失敗的頁總數(索引):0
處理的頁總數(其它):15
處理的總頁數 ()  : 1
失敗的總頁數 ()  : 0
空的頁總數            0
標記為損壞的總頁數:0
匯入的頁總數           0

這種方式要求資料庫處於開啟的狀態。

由於dbv可以在例項關閉情況下驗證資料檔案,因此dbv也可以驗證資料檔案的複製。

這個複製指的是透過RMANCOPY命令或者作業系統命令cp複製的資料檔案,而不是RMAN生成的備份集格式。

E:\oracle>rman target /

恢復管理器: 版本9.2.0.4.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

連線到目標資料庫: YTK92 (DBID=1285986946)

RMAN> run
2> {
3> copy datafile 'E:\ORACLE\ORADATA\YTK92\USERS01.DBF' to 'e:\userbak.dbf';
4> }

啟動 copy 26-3 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=17 devtype=DISK
通道 ORA_DISK_1: 已複製資料檔案 9
輸出檔名=E:\USERBAK.DBF recid=1 stamp=682554612
完成 copy 26-3 -09

RMAN> exit


恢復管理器完成。

E:\oracle>dbv file=e:\userbak.dbf blocksize=8192

DBVERIFY: Release 9.2.0.4.0 - Production on 星期四 3 26 22:33:13 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

DBVERIFY - 驗證正在開始 : FILE = e:\userbak.dbf


DBVERIFY -
驗證完成

檢查的頁總數         8160
處理的頁總數(資料):7192
失敗的頁總數(資料):0
處理的頁總數(索引):415
失敗的頁總數(索引):0
處理的頁總數(其它):273
處理的總頁數 ()  : 0
失敗的總頁數 ()  : 0
空的頁總數            280
標記為損壞的總頁數:0
匯入的頁總數           0

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-580296/,如需轉載,請註明出處,否則將追究法律責任。

相關文章