咨询微信: dbservice1234 7 x 24 在线支持!

    你在这里

Oracle DBVERIFY - データベース・ファイル検証ユーティリティ (7.3.2 - 11.2)

Oracle DBVERIFY - データベース・ファイル検証ユーティリティ (7.3.2 - 11.2)

ORACLEデータベース によくあるエラ の解決策

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com

 

 

はじめに
~~~~~~~~
  この記事は、Oracle データ・ファイルの破損(コラプション)の兆候をチェック
  するために使用可能な DBVERIFY(または DBV) ユーティリティの基本となる詳細
  を説明します。この記事は、DBV の使用方法の概要の詳細とその出力解釈の仕方
  と共に何をすべきかについて説明しています。例は、記事の最後にもあります。

利用範囲
~~~~~~~~
  DBV ユーティリティは Oracle7 release 7.3.2 以降で提供されています。

  DBV は以前の Oracle リリースのデータ・ファイルに対して使用することが
  できますが、DBV がインストールされている環境の ORACLE_HOME から実行
  する必要があります。- 実行ファイルをコピーすることはできません。

  例: DBVERIFY 7.3 は 7.3 $ORACLE_HOME から実行し、Oracle 7.1 データ・ファイル
      をチェックすることができます。


目的
~~~~
  DBV は Oracle データファイルを以下を保証するためにチェックします:
        - データファイルが正常なヘッダを持っている
        - ファイルの各データ・ブロックのブロックを識別する固有の"ラッパー"。
      - この"ラッパー" が正しいかどうかがチェックされます。
        - データ(表) と索引のブロックが内部的に一貫している。
        - 8.1.6 以降: 他の様々なブロック・タイプが内部的に一貫している
          (ロールバック・セグメント・ブロック等)

  このツールは、データファイルの破損がないことをある程度確信を与えるため
  に使用することができます。これは、読み取り専用モードでファイルを開くため、
  そのチェック対象のファイルの内容を変更することはできません。

使用方法
~~~~~~~~

        DBV は現在のデータベースによってオープンされているデータ・ファイル
        に対して実行することができます。- データベースを shutdown する必要
        はありません。データファイルは DBV により読み取り専用でオープンされ
        るため、内容を破損させることはありません。8.0.4 では DBV は Windows NT 
        上でオープンされたデータファイルに対して使用することができないという 
        BUG がありましたが、その BUG は 8.1.6 で修正されています。
        Bug:727547

  Unix:
        Any release:    dbv FILE=ファイル名 [オプション]

  Windows NT:

        7.3:            DBVERF73 FILE=ファイル名 [オプション]
        8.0:            DBVERF80 FILE=ファイル名 [オプション]
        8.1:            DBV FILE=ファイル名 [オプション]
  
  VMS:
        9.2.0 より前のバージョンの DBV は VMS システムでインスタンスにより
        オープンされているファイルに対して使用できませんでした。

        その他のリリース:    DBV FILE=ファイル名 [オプション]


  MVS:  
        7.3:            存在しません
        8.0/8.1:        DBV FILE=/DSN/ファイル名


  オプション:
        Keyword   Description        Meaning
        ---------  ------------------ -----------------
        FILE       検証するファイル   検証するファイル名です。ファイル名に
                                      拡張子を含まない場合は、"制限事項" 
                                      を参照してだくさい。
        START      開始ブロック       ファイル内の検証を開始するブロックです。
                                      デフォルトはファイル内の最初のブロックです
                                      がファイルの一部分をチェックした場合に指定
                                      します。 
        END        終了ブロック       検証するファイルの最後のデータブロックです。
                                      デフォルトはファイルの最後のブロックですが
                                      RAW デバイスの場合には指定する必要がありま
                                      す。("制限事項" 参照)
        BLOCKSIZE  論理ブロックサイズ スキャンするデータファイルのデータベース
                                      ・ブロック・サイズです。デフォルトの値
                                      は "2048" です。 
                                      このパラメータはデータファイルの
                                      DB_BLOCK_SIZE を設定する必要があります。
        LOGFILE    出力ログ          結果を出力するファイル名です。
                                      デフォルトは "NONE" で、結果出力は 
                                      ターミナルに送られます。
        FEEDBACK   進捗の表示        0(デフォルト)より大きい値を設定すると
                                      DBV はデータファイルのNページ検証が終わる
                                      毎に"."を出力します。これは DBV のファイル
                                      作業状況を確認するのに役立ちます。
        PARFILE    パラメータ         パラメータはパラメータ・ファイルに指定する
		     ・ファイル       ことができ、PARFILE を使用してそのファイル
                                      の内容をインプット・パラメータとして
				      使用することができます。PARFILE には上記
				      のオプションを含むことができます。
 
        HIGH_SCN   Scn                検証する最も高い Block SCN です。
                                      (scn_wrap.scn_base または scn)
                                      SCN を超えたブロックを見つけます。
                                      9.2.0.6 以上で利用可能です。
        USERID     ユーザ名           検証するファイルが自動ストレージ管理(ASM) 
                       /パスワード    ファイルの場合は、USERID を指定する必要が
                                      あります。DBVERIFY は ASM ファイルにアクセス 
                                      するために Oracle インスタンスに接続する必要が
                                      あるためです。

        SEGMENT_ID TS#.FILE#.BLOCK#   検証するセグメントを指定します。
                                      詳細は、Note:139962.1 を参照してください。

    コマンドライン・パラメータのヘルプについては 
	"dbv help=y" とコマンド・ラインで入力します。


制限事項および特別な注意事項
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 - DBV はブロック・レベルでチェックするため、以下のようなコマンドでの
    索引と表との不整合のような問題を検知することはできません。
    'ANALYZE TABLE .. VALIDATE STRUCTURE CASCADE'

  - このユーティリティはデータファイルに対してのみ使用できます。

    REDO ログ・ファイルや制御ファイルのチェックには使用できません。



  - DBV は自動領域管理-Automatic Storage Management (ASM) ファイルを検証する
    ために使用することができます。しかしながら、データベースはオープンされて
    いる必要があり、オプション USERID が使用されている必要があります。

    例 : dbv file=+DG1/ORCL/datafile/system01.dbf userid=system/sys

    DBV は ASM 管理のファイルにはユーザーID/パスワードをチェックするため、
    データベースがオープンしている必要があります。

  - UNIX DBV のほとんどのリリースではファイル名に拡張子が必要です。
    これは、ファイル名に拡張子がないデータファイルや RAW デバイスに対しては 
    DBV は使用できないことを意味します。
    回避策として、拡張子のついたリンク名で RAW デバイスにシンボリック・リンク
    を作成します。
    例: ln -s /dev/rdsk/mydevice /tmp/mydevice.dbf
        Now use DBV against /tmp/mydevice.dbf 

  - RAW デバイスの場合は、Oracle ファイル・スペースの端を実行しないように、
    END パラメータを使用する必要があります。
    例: "dbv FILE=/dev/rdsk/r1.dbf END="
    END の値が大き過ぎると、DBV はその RAW デバイスの Oracle 部分の端を
    超えている最後のページを"破損"として報告します。
 
  END の値は、V$DATAFILE ビューから、BYTES の値をデータベース・ブロック・
    サイズで割ることによって確認することができます。

    例: file#=5 の END の値を確認します:                           
        SVRMGRL> show parameter db_block_size
         NAME                                TYPE    VALUE
         ----------------------------------- ------- ------
         db_block_size                       integer 2048

        SVRMGRL> select BYTES/2048 from v$datafile where FILE#=5;
         BYTES/2048
         ----------
               5120
                                                           
        上記から、コマンドは次のようになります。:

         dbv file=/dev/rdsk/r1.dbf blocksize=2048 END=5120

  - DBVERIFYは、2GB以上のデータファイルをスキャンすると、DBV-100を出力する
    事があります。これは Unix では Bug:710888 で、NT 8.1.6 では Bug:1372172
  として報告されています。この現象はプラットフォーム及びリリースに固有の
  問題ですので、DBV-100のエラーが出力された場合は、ファイルサイズを確認
    して下さい。

  - Oracle7からOracle8.1.6以上に移行したデータベースでは、ロールバック
    セグメントに対してDBVERIFYを実行した際、誤ったエラーを出力する事があり
    ます。Bug:1359160 および Note:118008.1 を参照してください。

  - DBV はブロック単独の検証のみを行います。- 検証対象ブロックにオブジェクト
    が存在する事の検証は行いません

  - DBV は SCO Unix で破損しています。 - Bug:814249 を参照。

  - 高い DB バージョンに対して、低いバージョンの DBV は使用できません。


既知のBUG
~~~~~~~~~~ 

Known Bugs

関連するボタンをクリックすることによって、以下のバージョンの1つに影響のある問題 に絞り込むことができます。: 
            

 

 
NB Bug Fixed Description
  13350245 11.2.0.3.BP06, 11.2.0.4, 12.1.0.1 DBV reports false SCN corruption code 6054 / 6056 - "csc higher than block scn" for V7 block
  12778063 12.1.0.1 DBV reports false SCN corruption code 6054 / 6056 - "csc higher than block scn" for V7 block -superceded
  9393307 11.2.0.2, 12.1.0.1 DBVerify / RMAN / ANALYZE not detecting logical corruption in index with avsp < 0
  8837919 11.2.0.2, 12.1.0.1 DBV / RMAN enhanced to detect ASSM blocks with ktbfbseg but not ktbfexthd flag set as in Bug 8803762
  8720802 10.2.0.5, 11.2.0.1.BP07, 11.2.0.2, 12.1.0.1 Add check for row piece pointing to itself (db_block_checking,dbv,rman,analyze)
  7517208 10.2.0.5, 11.2.0.1 DBV enhanced to identify Logical SCN Block corruptions
  6820317 11.2.0.1 DBVERIFY fails with DBV-600 [22] if no write permissions on file
  5472917 10.2.0.4, 11.1.0.6 DBVERIFY may error if ASM disk disconnected
  5031712 10.2.0.4, 11.1.0.6 DBV enhanced to report NOLOGGING corrupt blocks with DBV-201 instead of DBV-200
  4169479 11.1.0.6 dbverify can be slow
  6673755 10.2.0.5 DBVerify dumps when run against ASM
  4360183 10.2.0.1 DBV-102 file IO error with using DBV on ASM files over 4gb
  3981329 9.2.0.8, 10.1.0.5, 10.2.0.1 DBV-102 accessing file being written in O_DIRECT mode by DBWR
  3571244 9.2.0.7, 10.1.0.4, 10.2.0.1 dbverify does not report "marked corrupt" blocks in its summary
  3457571 9.2.0.6, 10.1.0.3, 10.2.0.1 Enhancement to DBV to show highest SCN in a file / show blocks above an SCN
  2469314 9.2.0.3, 10.1.0.2 DBVERIFY may dump when reporting a block corruption
  2348277 9.2.0.3, 10.1.0.2 DBV/RMAN may incorrectly report completely zero blocks as corrupt
  2326948 9.0.1.4, 9.2.0.2, 10.1.0.2 DBV-111 using DBVERIFY SEGMENT_ID=... on a bitmap space managed segment
  2373145 9.2.0.2 DBVERIFY does not identify fractured blocks
  2432864 9.2.0.2, 10.1.0.2 DBVERIFY does not work properly on RAW or for different BLOCKSIZE
  2070167 8.1.7.4, 9.0.1.3, 9.2.0.1 DBV spins reporting same block corrupt if block type is bad
  1847798 9.0.1.1, 9.2.0.1 DBV may spin when SEGMENT_ID & USERID specified
  1656136 8.1.7.3, 9.0.1.2, 9.2.0.1 DBVERIFY may incorrectly report TEMPORARY tablespace blocks as corrupt
  1456397 9.2.0.1 DBV: DBV-100 using DBVERIFY against a file with no filename extension
  1565578 8.1.7.2, 9.0.1.0 DBV reports spurious errors for Oracle 7 format UNDO blocks
  1275263 8.1.7.0 DBVERIFY does not error on completely zero data blocks
  749600 8.0.6.0 Large file support for CORE code (DBV etc..)
  569962 7.3.4.3, 8.0.3.0 DBVERIFY incorrectly reports blocktype 0 as corrupt
  • '*' アラートが存在することを示します。
  • '+' 特に注意すべき問題/BUGであることを示します。
  • 'P' プラットフォーム固有のBUGであることを示します。
  • "OERI:xxxx" may be used as shorthand for ORA-600 [xxxx].

 

出力例
~~~~~~
  $ dbv file=users01.dbf blocksize=2048 

        DBVERIFY - 検証を開始します : FILE = users01.dbf
        kdbchk: a row ends in the middle of another
                tab=0 slot=1 begin=0x7a0 len=0x14
        ページ3はチェック・コード5で失敗しました
        ページ10はソフトウェア破損としてマークされました
        ページ12はソフトウェア破損としてマークされました

        DBVERIFY - 検証が完了しました

        検査済ページ合計             : 512
        処理済ページ合計   (データ) : 1
        エラーのページ合計 (データ)  : 1
        処理済ページ合計   (索引)    : 0
        エラーのページ合計 (索引)    : 0
        空白のページ合計             : 507
        破損とマークされたページ合計 : 2
        インフラックス・ページ合計   : 0

  ユーティリティが '破損とマークされた' や 'エラー' のページを出力した場合は、
  問題が一過性であるかどうかを確認するために、再度コマンドを実行します。
  再度実行しても、破損が報告される場合は、支援を得るために、ローカル・サポート
  ・センターに連絡してください。


出力の解釈
~~~~~~~~~~
  エラーのページが報告される場合は、その出力と共に、Oracle サポートに連絡して
  ください。このセクションでは、上記の出力から、主な出力の意味について簡単に
  説明します。

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    "ページ N はチェック・コード Y" で失敗しました
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      これは、ブロックのラッパーは正しいが、ブロックの内容が多くの内部的な整合性
      チェックで失敗していることを意味します。
      出力の "Page" の数字は、ファイル内のデータベース・ブロック番号です。
For Oracle Support: The error reported is a KDB check code as listed in Note:46389.1 [This section is not visible to customers.]


    例: kdbchk: a row ends in the middle of another
                tab=0 slot=1 begin=0x7a0 len=0x14
        Page 3 failed with check code 5

      このブロックの破損は、アクセス時に次の問題の原因になる可能性が高いです。
                - ORA-600 エラー
                - コア・ダンプ (ORA-7445)
                - 破損データが返る
      データベースでブロック・チェッキングが有効になっている場合は、そのブロック
      は破損としてマークされる(ORA-1578)かセッションが終了します。

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    "ページ N はソフトウェア破損としてマークされました" 
    "ページ N はメディア破損としてマークされました"    
    "ページ N は破損としてマークされました"
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      これはブロック・ラッパーが不正であることを意味しています。  
      Oracle7 は追加の情報をダンプしないため、DBV から破損の形式を伝えるのは
      難しいですが、Oracle8 はキャッシュ・ラッパーの詳細をダンプします。
      "Page" 番号はファイルのデータベース・ブロック・番号です。

      例: Page 10 is marked corrupt
          ***
          Corrupt block relative dba: 0x04c0000a file=0. blocknum=10.
          Bad header found during dbv:
          Data in bad block - type:6. format:2. rdba:0x04c000ff
          last change scn:0x056c.ce87bf25 seq:0x1 flg:0x00
          consistency value in tail 0xbf250601
          check value in block header: 0x0, check value not calculated
          spare1:0x0, spare2:0x0, spare2:0x0

      この破損は、ブロックがアクセスされた時に、ORA-1578 を表示します。


    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    "Block Checking: DBA = 67108867, Block Type = Undo data block"
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      このタイプのエラーはロールバック・セグメントに破損が見られる時に
      8.1.6 以降の DBV で報告されます。データベースが Oracle7 から移行
      されている場合、DBV が Oracle7 形式のロールバック・セグメント・ブロック
      を見つけると、誤って報告します。
      詳細については、Bug:1359160 および Note:118008.1 を参照してください。

      本当の問題の場合は (上記で説明しているように Oracle7 から Oracle8 へ
      移行していない場合) この破損は、アクセスした際に次の問題の原因になる
      可能性が高いです。:
                - ORA-600 errors
                - Core dump (ORA-7445)
                - Corrupt data

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    サマリライン 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      DBV は処理を完了すると、以下のようなサマリを出力します。:

        出力テキスト                            意味
        ~~~~~~~~~~~~                            ~~~~~~~
        検査済ページ合計             : 512      検査したブロック数
        処理済ページ合計   (データ)  : 1        検査した表のブロック数
        エラーのページ合計 (データ)  : 1        内部的に不整合のある
                                                表のブロック数
        処理済ページ合計   (索引)    : 0        検査した索引のブロック数
        エラーのページ合計 (索引)    : 0        内部的に不整合のある
                                                索引のブロック数
        空白のページ合計             : 507      検査されなかったブロック数
        破損とマークされたページ合計 : 2        キャッシュ・ラッパーが破損
                                                しているブロック数
        インフラックス・ページ合計   : 0        最初の読み込み時に変更中で、
                                                再読み込みしたページの数


DBV がファイルの問題を示した場合に何をするか
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  DBV が '破損としてマーク' または 'エラー' のページを報告した場合は、その問題
  が一時的であるかどうかを確認するために、コマンドを再実行することをお勧めします。
  一時的な問題が継続する場合は、多くの場合、ディスク・コントローラの障害が原因
  です。最初のステップは、ディスク・サブシステムをチェックする必要があります。

  DBV が一貫して同じ場所でエラーを報告する場合、そのファイルには破損ブロックが
  あります。:

        多くのエラーがある場合は、そのファイルには問題があると仮定し、リカバリ
        可能なそのファイルのバックアップを探すことが最良の選択です。

        問題のブロックが少数の場合は、次の点を確認します。:

                - ファイル名

                - このファイルの絶対ファイル番号
                  ( "SELECT file#, name FROM V$DATAFILE;" を使用します。 ) 

                - 問題のブロックのブロック番号 
                  ( DBV 出力の "ページ" 番号と同じです。)

                - ブロックのエラーのタイプ 
          Oracle で ORA-1578 エラーが発生する場合、破損を回避する
                   オプションは多くありますが、ブロック内の内容は失われます。
                   ブロックが内部的に不整合な状態の場合、破損を回避するオプション
                   少なくなりますが、ブロック内の一部の行はアクセス可能である
                   場合があります。

        どのオブジェクトが破損しているのかを確認する方法と何ができるかが
        説明されている Note:1635229.1 で上記の詳細を確認し、その記事の
        絶対ファイル番号  とページ番号  を使用します。破損ブロック
        が無視できる場合には、破損ブロックが現在どのオブジェクトにも属して
        いないことに十分に注意してください。
        *** 重要 *** DBV を実行したファイルがバックアップからのファイルの、
                     場合は、そのブロックはすでに異なるオブジェクトによって
                     再利用されている可能性があり(例:元の表は削除されている等)
                    問題があるオブジェクトを特定するために現在のデータ・
                     ディクショナリを使用することはできません。

例 
~~~
 1) svrmgrl にログインし、データベースのブロック・サイズとデータファイルの名前と
    場所を確認します。:

    $ svrmgrl

	Oracle Server Manager Release 3.1.5.0.0 - Production
	(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

	Oracle8i Enterprise Edition Release 8.1.5.0.0 - Production
	With the Partitioning and Java options
	PL/SQL Release 8.1.5.0.0 - Production

	SVRMGR> connect internal
	 Connected.
	SVRMGR> show parameter db_block_size
	 NAME                                TYPE    VALUE
	 ----------------------------------- ------- -----------------------
	 db_block_size                       integer 2048

	SVRMGR> select file#,name,bytes/2048 from v$datafile;
	 FILE#  NAME 						BYTES/2048
	 -----  --------------------------------------- 	----------
	 1	/u02/oradata/R815/oradata/R815/system01.dbf	     40960
	 2	/u02/oradata/R815/oradata/R815/rbs01.dbf	      7680
	 3	/u02/oradata/R815/oradata/R815/temp01.dbf	      5120
	 4	/u02/oradata/R815/oradata/R815/users01.dbf           67454
	 5	/u02/oradata/R815/oradata/R815/indx01.dbf             5120
	 ...

 2) チェックしたファイルに対して DBV を実行します。:

    $ dbv file=/u02/oradata/R815/oradata/R815/users01.dbf blocksize=2048 logfile=users01_dbv.log feedback=100

	DBVERIFY: Release 8.1.5.0.0 - Production on Tue Mar 21 15:05:35 2000
	(c) Copyright 1999 Oracle Corporation.  All rights reserved.
	...................................................................................

    $ cat users01_dbv.log

	DBVERIFY: Release 8.1.5.0.0 - Production on Tue Mar 21 15:05:35 2000
	(c) Copyright 1999 Oracle Corporation.  All rights reserved.

	DBVERIFY - Verification starting : FILE = /u02/oradata/R815/oradata/R815/users01.dbf

	DBVERIFY - Verification complete
	Total Pages Examined         : 67454
	Total Pages Processed (Data) : 29310
	Total Pages Failing   (Data) : 0
	Total Pages Processed (Index): 3425
	Total Pages Failing   (Other): 294
	Total Pages Empty            : 34425
	Total Pages Marked Corrupt   : 0
	Total Pages Influx           : 0