DBVERIFY 工具的使用

來源:互聯網
上載者:User

--**********************

-- DBVERIFY 工具的使用

--**********************


   Oracle 資料庫運行過程中由於硬體故障或作業系統故障導致導致Oracle無法以Oracle格式來識別或所包含的內容即為出現資料區塊損壞

故障,這個壞塊可以分為介質損壞以及邏輯損壞。下面給出了塊的檢查,以及使用DBVERIFY 工具實施塊檢查。


一、塊檢查

   1.何時檢查塊

       當一個資料區塊被讀或寫的時候,將對塊的進行一致性檢查,檢查的內容包括

           塊的版本

           比較塊在cache與block buffer中的資料區塊地址

           根據要求進行校正(checksum)


   2.損壞的資料區塊的錯誤提示

       可以從警示記錄檔中找到該錯誤提示,以及在會話中發現損壞的資料區塊時也會給出類似的提示

       ORA-01578: ORACLE data block corrupted (file # 6, block # 11)

       ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/tbs01.dbf'


   3.與塊損壞的相關特性(幾種檢查工具)

       ------------------------------------------------------------------------------------------------

       特性                      壞塊偵測類型                    能否修複損壞塊

       ------------------------------------------------------------------------------------------------

       DBVERIFY                  物理                         否

       ANALYZE                   邏輯                         否

       DB_BLOCK_CHECKING         邏輯                         否

       DB_BLOCK_CHECKSUM         物理                         否

       exp                       物理                         否

       FlashBack                 邏輯                         是

       DBMS_REPAIR               邏輯                         是

       Block media recovery      未知                         是


二、DBVERIFY工具介紹


   特性

       是一個運行於作業系統提示符下的外部程式,用於驗證資料檔案,檢查塊的一致性錯誤

       僅僅針對資料檔案,能夠校正open階段的資料檔案以及shutdown狀態下的資料檔案

       可以驗證複製的資料檔案,也可以驗證備份的鏡像副本

       不支援聯機記錄檔,控制檔案,歸檔日誌,RMAN備份組驗證

       被驗證的檔案可以位於檔案系統,ASM磁碟或原始裝置

       在Unix系統中位於:$ORACLE_HOME/bin/dbv

       在Windows系統中位於:%ORACLE_HOME%/bin/dbv.exe

       對於DBVERIFY工具,高版本可以自動識別低版本資料庫,比如11g的dbv訪問9i的資料庫,但是低版本的dbv訪問高版本會報錯


三、DBVERIFY工具用法


   1.擷取dbv的協助資訊,直接在提示符下輸入dbv即可    或者輸入dbv help=y

       [oracle@oradb orcl]$ dbv

       DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:21:09 2010

       Copyright (c) 1982, 2007, Oracle.  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)--指定資料檔案的尺寸,預設值為8192,對於非8192塊將收到DBV-00103錯誤

       LOGFILE     Output Log                     (NONE)   --用於顯示驗證進度

       FEEDBACK    Display Progress               (0)

       PARFILE     Parameter File                 (NONE)  --可以指定參數檔案

       USERID      Username/Password              (NONE) --校正段、ASM檔案需要使用

       SEGMENT_ID  Segment ID (tsn.relfile.block) (NONE) --校正段,需要資料表空間ID,資料檔案ID,段的頭部ID

       HIGH_SCN    Highest Block SCN To Verify    (NONE)

                   (scn_wrap.scn_base OR scn)          


   2.校正online,offline資料檔案,使用下面的方法

       dbv file=


       [oracle@oradb orcl]$ dbv file=$ORACLE_BASE/oradata/orcl/tbs01.dbf

       DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:29:39 2010

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

       DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/orcl/tbs01.dbf

       DBVERIFY - Verification complete

       Total Pages Examined         : 128       --校正的總頁面數,一個頁面即是一個資料區塊

       Total Pages Processed (Data) : 96        --已處理的資料頁面數

       Total Pages Failing   (Data) : 0         --已處理資料頁面的失敗數

       Total Pages Processed (Index): 1         --已處理的索引頁面數

       Total Pages Failing   (Index): 0         --已處理索引頁面失敗數

       Total Pages Processed (Other): 31        --已處理的其它頁面數

       Total Pages Processed (Seg)  : 0        

       Total Pages Failing   (Seg)  : 0

       Total Pages Empty            : 0

       Total Pages Marked Corrupt   : 0

       Total Pages Influx           : 0

       Highest block SCN            : 1152518 (0.1152518)      


       注意:如果Total Pages Influx的值大於零,且未存在壞塊的情況下,是由於針對open狀態的檔案運行dbv

       程式遇到了一個當前正在被DBWn進程寫入的資料區塊


       [oracle@oradb orcl]$ dbv file=$ORACLE_BASE/oradata/orcl/tbs01.dbf feedback=1000

           上面這句在執行時每驗證1000個塊將顯示一個"."號


       --下面的校正發現了I/O錯誤

       [oracle@oradb orcl]$ dbv file=/u01/app/oracle/oradata/orcl/tbs01.dbf

       DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:26:21 2010

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

       DBV-00102: File I/O error on FILE (/u01/app/oracle/oradata/orcl/tbs01.dbf)

           during end read operation (-1)          


   3.驗證指定段

       該方法需要獲得段所在資料表空間的ID,段所在資料檔案的ID,段的頭部ID

       如下面的查詢資料表空間的ID為7,檔案ID為6,段的頭部ID為35

       sys@ORCL> select tablespace_id,tablespace_name,header_file,header_block

         2  from sys_dba_segs

         3  where segment_name='TB3';


       TABLESPACE_ID TABLESPACE_NAME HEADER_FILE HEADER_BLOCK

       ------------- --------------- ----------- ------------

                   7 TBS1                      6           35  


       注意:sys使用者的段可以查詢sys_user_segs,而普通使用者的段資訊,需要查詢sys_dba_segs      


       [oracle@oradb orcl]$ dbv userid=scott/tiger segment_id=7.6.35

       DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:50:01 2010

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

       DBVERIFY - Verification starting : SEGMENT_ID = 7.6.35

       DBVERIFY - Verification complete


       Total Pages Examined         : 8

       Total Pages Processed (Data) : 5

       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   : 0

       Total Pages Influx           : 0

       Highest block SCN            : 1152518 (0.1152518)          


   4.驗證複製的資料檔案或驗證備份的鏡像副本


       RMAN> backup as copy datafile 6        --使用RMAN備份鏡像副本

       2> format='/u01/app/oracle/bk/rmbk/cp_dfile6'

       3> tag='Copy_datafile6';


       [oracle@oradb orcl]$ dbv file=/u01/app/oracle/bk/rmbk/cp_dfile6

       DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:59:17 2010

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

       DBVERIFY - Verification starting : FILE = /u01/app/oracle/bk/rmbk/cp_dfile6

       DBVERIFY - Verification complete


       Total Pages Examined         : 128

       Total Pages Processed (Data) : 96

       Total Pages Failing   (Data) : 0

       Total Pages Processed (Index): 1

       Total Pages Failing   (Index): 0

       Total Pages Processed (Other): 31

       Total Pages Processed (Seg)  : 0

       Total Pages Failing   (Seg)  : 0

       Total Pages Empty            : 0

       Total Pages Marked Corrupt   : 0

       Total Pages Influx           : 0

       Highest block SCN            : 1152518 (0.1152518)


       RMAN命令中的BACKUP VALIDATE DATABASE命令通常用於檢查全庫,該命令不產生任何備份組,可以通過

       Validate命令來檢查是否能備份,如資料檔案是否存在,是否存在壞塊不能被備份,查詢檢視

       v$database_block_corruption,此視圖將檢查過程中存在的壞塊

       如使用下面的查詢

           RMAN> backup validate database;

           RMAN> backup validate database archivelog all;


           sys@ORCL> select * from v$database_block_corruption;


           no rows selected


       視圖v$database_block_corruption將列出損壞的壞塊所在的檔案位置,損壞塊的起始位置,損壞快的大

       小以及損壞類型如果上述視圖中發現了壞塊,則可以通過SQL查詢獲得壞塊所影響的範圍,以及確定壞塊

       所影響的是索引段還是UNDO段


           select owner,segment_name,segment_type from dba_extents where file_id= and

           between block_id and block_id+blocks-1;


           (和分別是ORA-01578報出的壞塊出現的檔案號和塊號)


       下面使用rman 來修複受損的資料區塊

       RMAN> run{

       2> allocate channel ch1 device type disk;

       3> blockrecover datafile 6 block 37;

       4> release channel ch1;}


       released channel: ORA_DISK_1

       allocated channel: ch1

       channel ch1: sid=139 devtype=DISK


       Starting blockrecover at 26-OCT-10


       starting media recovery

       media recovery complete, elapsed time: 00:00:00


       Finished blockrecover at 26-OCT-10


       released channel: ch1      



       flasher@ORCL> alter table tb3 add constraint empno_tb3_pk

         2  primary key(empno);


四、其它        

   1.事實上使用dbv工具可以對控制檔案進行驗證(資料庫處於OPEN狀態),參見下面的例子

       [oracle10g:oracle:orcl]$ dbv file=control01.ctl


       DBVERIFY: Release 10.2.0.4.0 - Production on Sun Jun 5 14:56:31 2011


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



       DBV-00103: Specified BLOCKSIZE (8192) differs from actual (16384)  --根據提示知道blocksize的值為16384


       [oracle@oradb orcl]$ dbv file=control01.ctl blocksize=16384


       DBVERIFY: Release 10.2.0.4.0 - Production on Sun Jun 5 14:53:01 2011


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


       DBVERIFY - Verification starting : FILE = control01.ctl



       DBVERIFY - Verification complete


       Total Pages Examined         : 404

       Total Pages Processed (Data) : 0

       Total Pages Failing   (Data) : 0

       Total Pages Processed (Index): 0

       Total Pages Failing   (Index): 0

       Total Pages Processed (Other): 40

       Total Pages Processed (Seg)  : 0

       Total Pages Failing   (Seg)  : 0

       Total Pages Empty            : 364

       Total Pages Marked Corrupt   : 0

       Total Pages Influx           : 0

       Highest block SCN            : 775 (65535.775)        


   2.對聯機記錄檔的驗證(資料庫處於OPEN狀態),不支援

       [oracle10g:oracle:orcl]$ dbv file=redo01.log


       DBVERIFY: Release 10.2.0.4.0 - Production on Sun Jun 5 15:01:09 2011


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



       DBV-00103: Specified BLOCKSIZE (8192) differs from actual (512)


       [oracle10g:oracle:orcl]$ dbv file=redo01.log blocksize=512  --可以執行,但出現下面很多的提示(介質錯誤)


       Page 88441 is influx - most likely media corrupt

       Corrupt block relative dba: 0x00015979 (file 0, block 88441)

       Fractured block found during dbv:

       Data in bad block:

        type: 1 format: 2 rdba: 0x00015979

        last change scn: 0x8010.00000010 seq: 0x51 flg: 0x55

        spare1: 0x0 spare2: 0x0 spare3: 0x0

        consistency value in tail: 0xc2037800

        check value in block header: 0x108

        computed block checksum: 0x0


oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.