Oracle DBVERIFY 工具介绍
生活随笔
收集整理的這篇文章主要介紹了
Oracle DBVERIFY 工具介绍
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
??? Oracle DBVERIFY是一個(gè)可以用來查看數(shù)據(jù)庫物理文件正確性的外部命令工具,由Oracle軟件自帶。可以在線/離線情況下對數(shù)據(jù)庫進(jìn)行檢查,甚至可以對數(shù)據(jù)庫的備份文件進(jìn)行檢查。并可以在數(shù)據(jù)發(fā)生錯(cuò)誤或破壞時(shí)對數(shù)據(jù)庫進(jìn)行診斷,以幫助進(jìn)行恢復(fù)。當(dāng)然數(shù)據(jù)庫可以直接使用DBMS_REPAIR來實(shí)現(xiàn)這個(gè)功能,但是兩者還是有所區(qū)別的,所以有必要來學(xué)習(xí)一下。
?
??? 首先給出Oracle官方對DBVERIFY的介紹:
?
DBVERIFY: Offline Database Verification Utility
?
DBVERIFY is an external command-line utility that performs a physical data structure integrity check. It can be used on offline or online databases, as well on backup files. You use DBVERIFY primarily when you need to ensure that a backup database (or datafile) is valid before it is restored, or as a diagnostic aid when you have encountered data corruption problems.
Because DBVERIFY can be run against an offline database, integrity checks are significantly faster.
?
DBVERIFY checks are limited to cache-managed blocks (that is, data blocks). Because DBVERIFY is only for use with datafiles, it will not work against control files or redo logs.
?
?
?
??? 接下來講一下DBVERIFY的用法。DBVERIFY可以有2種用法,一種是對datafile進(jìn)行檢查,另一種是對segment進(jìn)行檢查。兩者都是使用“dev”命令進(jìn)行,但是所用的格式和結(jié)果都有所差異,下面看一下:
?
?
一、使用DBVERIFY檢查單個(gè)datafile的Disk Blocks
?
??? 在這個(gè)模式下面,DBVERIFY掃描某個(gè)datafile中的一個(gè)或者多個(gè)Disk Blocks,并生成一份結(jié)果。需要注意的是:如果datafile使用ASM(Automatic Storage Management)進(jìn)行文件存儲,則需要提供一個(gè)USERID,因?yàn)镈BVERIFY需要連接到這個(gè)ASM文件。
?
??? 對datafile的DBVERIFY命令語法如下:
?
??? dbv [ USERID=username/password ]
??????? FILE = filename
????? | { START = block_address | END = block_address }
????? | BLOCKSIZE = integer
????? | LOGFILE = filename
????? | FEEDBACK = integer
????? | HELP? = { Y | N }
????? | PARFILE = filename
??? ? ??? 對語法做一些說明: ??? ??? USERID:?? 指定用戶名/密碼,在ASM存儲環(huán)境下使用; ??? FILE:???? 提供需要檢測的datafile名(需要指定文件的完整路徑); ??? START:??? 指定verify開始的block地址。如果沒有指定,則默認(rèn)從第一個(gè)block開始; ??? END:????? 指定verify結(jié)束的block地址。如果沒有指定,則默認(rèn)為最后一個(gè)block; ??? BLOCKSIZE:如果你的block size不是2k,那么必須指定這個(gè)參數(shù),否則返回DBV-00103錯(cuò)誤; ??? LOGFILE:? 指定最終結(jié)果的輸出文本。如果不定義,則直接在執(zhí)行終端顯示; ??? FEEDBACK: 回饋DBVERIFY在檢查過程中的信息,跟的參數(shù)n代表n頁。如果n=0則表示買有; ??? HELP:???? 提供在線幫助; ??? PARFILE:? 使用parameter file來存儲設(shè)定的參數(shù),然后每次直接調(diào)用執(zhí)行 ? ? ??? 下面就是一個(gè)最簡單的例子來使用DBVERIFY: ? % dbv FILE=t_db1.dbf FEEDBACK=100
DBVERIFY: Release 10.2.0.3.0 - Production on Mon Aug 17 12:21:58 2009 Copyright (c) 1982, 2005, Oracle.? All rights reserved.
DBVERIFY - Verification starting : FILE = t_db1.dbf ? ................................................................................
? ? DBVERIFY - Verification complete
?
Total Pages Examined???????? : 9216
Total Pages Processed (Data) : 2044
Total Pages Failing?? (Data) : 0
Total Pages Processed (Index): 733
Total Pages Failing?? (Index): 0
Total Pages Empty??????????? : 5686
Total Pages Marked Corrupt?? : 0 ? Total Pages Influx?????????? : 0
??? 說明: ? ??? Pages = Blocks ??? Total Pages Examined = number of blocks in the file ??? Total Pages Processed = number of blocks that were verified (formatted blocks) ??? Total Pages Failing (Data) = number of blocks that failed the data block checking routine ??? Total Pages Failing (Index) = number of blocks that failed the index block checking routine ??? Total Pages Marked Corrupt = number of blocks for which the cache header is invalid, thereby making it impossible for DBVERIFY to identify the block type ??? Total Pages Influx = number of blocks that are being read and written to at the same time. If the database is open when DBVERIFY is run, DBVERIFY reads blocks multiple times to get a consistent image. But because the database is open, there may be blocks that are being read and written to at the same time (INFLUX). DBVERIFY cannot get a consistent image of pages that are in flux. ? ? 二、使用DBVERIFY檢查Segment ? ??? 在這個(gè)模式下面,可以使用DBVERIFY來檢測一個(gè)表or索引的segment的可用性。指定segment的所有鏈表均會被檢測。需要注意的是,該模式下需要提供一個(gè)SYSDBA的用戶和密碼,因?yàn)樾枰獜臄?shù)據(jù)庫中獲取的segment的信息。 ? ??? 當(dāng)使用這個(gè)模式時(shí),針對的那個(gè)segment會被加鎖。如果是一個(gè)索引的segment,則所在的父表被加鎖。(IOT沒有父表) ??? 對segment的DBVERIFY命令語法如下:
??? dbverify_seg ::= ? ????? dbv USERID = username/password
????? | SEGMENT_ID = tsn.segfile.segblock
????? | LOGFILE = filename
????? | FEEDBACK = integer
????? | HELP? = { Y | N }
????? | PARFILE = filename?
??? ? ??? 對語法做一些說明: ? ??? USERID:??? 必須指定用戶名和密碼; ??? SEGMENT_ID:需要指定segment id; ??????? 這個(gè)ID由3部分組成,分別是Tablespace_ID、Segment_Header_File_Number、Segment_Header_Block_Number ??????? 3者中間用'.'隔開。可以用這段SQL來直接查詢得到: ??????? select a.ts# || '.' || b.header_file || '.' || b.header_block
????????? from v$tablespace a, dba_segments b
???????? where a.name = b.tablespace_name ?????????? and b.segment_name = 'segment_name'; ??? LOGFILE:??? 指定最終結(jié)果的輸出文本。如果不定義,則直接在執(zhí)行終端顯示; ??? FEEDBACK:? 回饋DBVERIFY在檢查過程中的信息,跟的參數(shù)n代表n頁。如果n=0則表示買有; ??? HELP:????? 提供在線幫助; ??? PARFILE:?? 使用parameter file來存儲設(shè)定的參數(shù),然后每次直接調(diào)用執(zhí)行 ?
??? 舉個(gè)例子: ? % dbv USERID=hr/hr SEGMENT_ID=1.2.67
DBVERIFY - Verification starting : SEGMENT_ID = 1.2.67
?
DBVERIFY - Verification complete
?
Total Pages Examined???????? : 8
Total Pages Processed (Data) : 0
Total Pages Failing?? (Data) : 0
Total Pages Processed (Index): 1
Total Pages Failing?? (Index): 0
Total Pages Processed (Other): 2
Total Pages Processed (Seg)? : 1
Total Pages Failing?? (Seg)? : 0
Total Pages Empty??????????? : 4
Total Pages Marked Corrupt?? : 0
Total Pages Influx?????????? : 0
Highest block SCN??????????? : 7358 (0.7358)
??? 信息含義與上同。 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
??????? FILE = filename
????? | { START = block_address | END = block_address }
????? | BLOCKSIZE = integer
????? | LOGFILE = filename
????? | FEEDBACK = integer
????? | HELP? = { Y | N }
????? | PARFILE = filename
??? ? ??? 對語法做一些說明: ??? ??? USERID:?? 指定用戶名/密碼,在ASM存儲環(huán)境下使用; ??? FILE:???? 提供需要檢測的datafile名(需要指定文件的完整路徑); ??? START:??? 指定verify開始的block地址。如果沒有指定,則默認(rèn)從第一個(gè)block開始; ??? END:????? 指定verify結(jié)束的block地址。如果沒有指定,則默認(rèn)為最后一個(gè)block; ??? BLOCKSIZE:如果你的block size不是2k,那么必須指定這個(gè)參數(shù),否則返回DBV-00103錯(cuò)誤; ??? LOGFILE:? 指定最終結(jié)果的輸出文本。如果不定義,則直接在執(zhí)行終端顯示; ??? FEEDBACK: 回饋DBVERIFY在檢查過程中的信息,跟的參數(shù)n代表n頁。如果n=0則表示買有; ??? HELP:???? 提供在線幫助; ??? PARFILE:? 使用parameter file來存儲設(shè)定的參數(shù),然后每次直接調(diào)用執(zhí)行 ? ? ??? 下面就是一個(gè)最簡單的例子來使用DBVERIFY: ? % dbv FILE=t_db1.dbf FEEDBACK=100
DBVERIFY: Release 10.2.0.3.0 - Production on Mon Aug 17 12:21:58 2009 Copyright (c) 1982, 2005, Oracle.? All rights reserved.
DBVERIFY - Verification starting : FILE = t_db1.dbf ? ................................................................................
? ? DBVERIFY - Verification complete
?
Total Pages Examined???????? : 9216
Total Pages Processed (Data) : 2044
Total Pages Failing?? (Data) : 0
Total Pages Processed (Index): 733
Total Pages Failing?? (Index): 0
Total Pages Empty??????????? : 5686
Total Pages Marked Corrupt?? : 0 ? Total Pages Influx?????????? : 0
??? 說明: ? ??? Pages = Blocks ??? Total Pages Examined = number of blocks in the file ??? Total Pages Processed = number of blocks that were verified (formatted blocks) ??? Total Pages Failing (Data) = number of blocks that failed the data block checking routine ??? Total Pages Failing (Index) = number of blocks that failed the index block checking routine ??? Total Pages Marked Corrupt = number of blocks for which the cache header is invalid, thereby making it impossible for DBVERIFY to identify the block type ??? Total Pages Influx = number of blocks that are being read and written to at the same time. If the database is open when DBVERIFY is run, DBVERIFY reads blocks multiple times to get a consistent image. But because the database is open, there may be blocks that are being read and written to at the same time (INFLUX). DBVERIFY cannot get a consistent image of pages that are in flux. ? ? 二、使用DBVERIFY檢查Segment ? ??? 在這個(gè)模式下面,可以使用DBVERIFY來檢測一個(gè)表or索引的segment的可用性。指定segment的所有鏈表均會被檢測。需要注意的是,該模式下需要提供一個(gè)SYSDBA的用戶和密碼,因?yàn)樾枰獜臄?shù)據(jù)庫中獲取的segment的信息。 ? ??? 當(dāng)使用這個(gè)模式時(shí),針對的那個(gè)segment會被加鎖。如果是一個(gè)索引的segment,則所在的父表被加鎖。(IOT沒有父表) ??? 對segment的DBVERIFY命令語法如下:
??? dbverify_seg ::= ? ????? dbv USERID = username/password
????? | SEGMENT_ID = tsn.segfile.segblock
????? | LOGFILE = filename
????? | FEEDBACK = integer
????? | HELP? = { Y | N }
????? | PARFILE = filename?
??? ? ??? 對語法做一些說明: ? ??? USERID:??? 必須指定用戶名和密碼; ??? SEGMENT_ID:需要指定segment id; ??????? 這個(gè)ID由3部分組成,分別是Tablespace_ID、Segment_Header_File_Number、Segment_Header_Block_Number ??????? 3者中間用'.'隔開。可以用這段SQL來直接查詢得到: ??????? select a.ts# || '.' || b.header_file || '.' || b.header_block
????????? from v$tablespace a, dba_segments b
???????? where a.name = b.tablespace_name ?????????? and b.segment_name = 'segment_name'; ??? LOGFILE:??? 指定最終結(jié)果的輸出文本。如果不定義,則直接在執(zhí)行終端顯示; ??? FEEDBACK:? 回饋DBVERIFY在檢查過程中的信息,跟的參數(shù)n代表n頁。如果n=0則表示買有; ??? HELP:????? 提供在線幫助; ??? PARFILE:?? 使用parameter file來存儲設(shè)定的參數(shù),然后每次直接調(diào)用執(zhí)行 ?
??? 舉個(gè)例子: ? % dbv USERID=hr/hr SEGMENT_ID=1.2.67
DBVERIFY - Verification starting : SEGMENT_ID = 1.2.67
?
DBVERIFY - Verification complete
?
Total Pages Examined???????? : 8
Total Pages Processed (Data) : 0
Total Pages Failing?? (Data) : 0
Total Pages Processed (Index): 1
Total Pages Failing?? (Index): 0
Total Pages Processed (Other): 2
Total Pages Processed (Seg)? : 1
Total Pages Failing?? (Seg)? : 0
Total Pages Empty??????????? : 4
Total Pages Marked Corrupt?? : 0
Total Pages Influx?????????? : 0
Highest block SCN??????????? : 7358 (0.7358)
??? 信息含義與上同。 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的Oracle DBVERIFY 工具介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于NTP的配置
- 下一篇: Spotlight on oracle