Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
          Oracle DBVERIFY 工具介紹
          ?
          ??? 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)行文件存儲(chǔ),則需要提供一個(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存儲(chǔ)環(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來存儲(chǔ)設(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的所有鏈表均會(huì)被檢測。需要注意的是,該模式下需要提供一個(gè)SYSDBA的用戶和密碼,因?yàn)樾枰獜臄?shù)據(jù)庫中獲取的segment的信息。
          ?
          ??? 當(dāng)使用這個(gè)模式時(shí),針對的那個(gè)segment會(huì)被加鎖。如果是一個(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來存儲(chǔ)設(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)
          ??? 信息含義與上同。
          ?
          ?
          ?
          ?
          posted on 2009-03-19 23:19 decode360 閱讀(965) 評論(0)  編輯  收藏 所屬分類: 10.DB_Tools
          主站蜘蛛池模板: 霍邱县| 藁城市| 怀柔区| 方山县| 新巴尔虎右旗| 穆棱市| 荃湾区| 新平| 宁远县| 绥化市| 永顺县| 墨玉县| 友谊县| 精河县| 萝北县| 东阿县| 翁源县| 凭祥市| 友谊县| 河曲县| 来宾市| 许昌县| 嘉鱼县| 西林县| 荔浦县| 普兰县| 三台县| 汕尾市| 永嘉县| 宜都市| 建昌县| 城固县| 常宁市| 克什克腾旗| 桦甸市| 浦东新区| 饶河县| 漳州市| 洛川县| 阿尔山市| 绵阳市|