DBVERIFY工具用來驗證資料檔案的物理結構。
DBVERIFY工具的主要目的是為了檢查資料檔案的物理結構,包括資料檔案是否損壞,是否存在邏輯壞塊,以及資料檔案中包含何種類型的資料。
DBVERIFY工具可以驗證ONLINE或OFFLINE的資料檔案。不管資料庫是否開啟,都可以訪問資料檔案。一個最簡單的訪問資料檔案的例子:
E:oracle>dbv file=e:oracleoradataytk92users01.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:oracleoradataytk92users01.dbf
DBVERIFY - 驗證完成
檢查的頁總數 :8160處理的頁總數(資料):6867失敗的頁總數(資料):0處理的頁總數(索引):743失敗的頁總數(索引):0處理的頁總數(其它):270處理的總頁數 (段) : 0失敗的總頁數 (段) : 0空的頁總數 :280標記為損壞的總頁數:0匯入的頁總數 :0
可以看到,dbverify給出的結果包括資料檔案包括的BLOCK數量,其中包括多少個資料區塊,多少個索引塊,多少空塊,多少個已經被標誌為壞塊的塊,多少個壞塊。
對於DBVERIFY工具,高版本可以自動識別低版本資料庫,比如11g的dbv訪問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:oracleoradataytk92users01.dbf
DBVERIFY - 驗證完成
檢查的頁總數: 8160處理的頁總數 (資料): 7192失敗的頁總數 (資料): 0處理的頁總數 (索引): 415失敗的頁總數 (索引): 0處理的頁總數 (其它): 273處理的總頁數 (段) : 0失敗的總頁數 (段) : 0空的頁總數: 280標記為損壞的總頁數: 0流入的頁總數: 0加密的總頁數 : 0最高塊 SCN : 1963808326 (1.1963808326)
但是低版本的dbv訪問高版本會報錯:
E:oracle>dbv file=e:oracleoradataytk102yangtk01.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:oracleoradataytk102yangtk01.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也可以驗證資料檔案的拷貝。
這個拷貝指的是通過RMAN的COPY命令或者作業系統命令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:ORACLEORADATAYTK92USERS01.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