47 DBMS_DBCOMP

DBMS_DBCOMPパッケージは、ブロック比較を実行して、1つのプライマリ・データベースと1つ以上のフィジカル・スタンバイ・データベースの間の書込み欠落またはデータベースの非一貫性を検出します。これには、いつでも実行可能なDBCOMPという1つのプロシージャが含まれます。(DB_LOST_WRITE_PROTECT初期化パラメータを有効化する必要はありません。)

この章の構成は、次のとおりです。

47.1 DBMS_DBCOMPの使用方法

DBMS_DBCOMP.DBCOMPプロシージャでは、1つのプライマリ・データベースと1つ以上のフィジカル・スタンバイ・データベースがあることを前提としています。データベースはブロック比較の前に少なくともマウントされている必要があります。

注意:

ロジカル・スタンバイ・データベース、遠隔同期インスタンスおよびカスケード・スタンバイは、DBMS_DBCOMP.DBCOMPプロシージャのターゲット・データベースにはなれません。

このプロシージャの実行中、V$SESSION_LONGOPSビューを問い合せると、比較操作の進行状況を監視できます。次に例を示します。

SQL> SELECT target_desc, sofar, totalwork FROM V$SESSION_LONGOPS WHERE opname = ‘BlockCompare’;

出力は次のようになります。

TARGET_DESC                   SO FAR     TOTALWORK
----------------------------- ---------  ----------
Compared Blocks               23914      340639
Lost Writes                   0          0

この結果は、次のように解釈できます。

  • Compared Blocks値は、スキャンされたブロックの数です(比較のコールバック・ファンクションを使用しなかったブロックを含む)。この数は、すべてのスレーブの合計です(つまり、各スレーブは、プライマリとスタンバイの間の接続を担います)。たとえば、スレーブが2つあり、各スレーブに比較対象となるブロックが1000個ある場合、SOFARの値は2000になります。

  • Lost Writes値は、プライマリとスタンバイの両方で検出された書込み欠落の数です。また、これはすべてのスレーブの合計です。Lost Writesの場合、SOFARの値は、常にTOTALWORKの値と等しくなります。

  • SOFARの値は、常にTOTALWORKの値以下になります。

  • ブロック比較のスレーブ・プロセスが完了すると、SOFARの値は、TOTALWORKの値と等しくなります。

47.2 DBMS_DBCOMPのセキュリティ・モデル

DBMS_DBCOMPパッケージは実行者の権限で実行され、SYSDBAまたはSYSDGまたはSYSBACKUP権限が必要です。

47.3 DBMS_DBCOMPサブプログラムの要約

DBMS_DBCOMPパッケージには、1つのプロシージャDBCOMPが含まれています。

サブプログラム 説明
DBCOMPプロシージャ DBMS_DBCOMP.DBCOMPプロシージャは、ブロック比較を実行して、1つのプライマリ・データベースと1つ以上のフィジカル・スタンバイ・データベースの間の書込み欠落またはデータベースの非一貫性を検出します。DBCOMPプロシージャをプライマリまたはフィジカル・スタンバイで実行できるのは、データベースがマウントされているか、オープンしている間です。

47.3.1 DBCOMPプロシージャ

DBCOMPプロシージャは、1つのプライマリ・データベースと1つ以上のフィジカル・スタンバイ・データベースのブロックを比較する場合に使用します。

構文

DBMS_DBCOMP.DBCOMP (
  datafile IN varchar2, 
  outputfile IN varchar2, 
  block_dump IN boolean);

パラメータ

パラメータ 説明
datafile これは、データファイル名またはデータファイル番号を指定できます。'ALL'を指定すると、すべてのデータファイルを比較します。
outputfile この値は、出力ファイルの名前の接頭辞として使用されます。デフォルトでは、出力ファイルはdbs/ディレクトリに格納されますが、出力ファイルの引数には、ディレクトリの相対パスまたはディレクトリの絶対パスを含めることができます。出力ファイルに含まれる情報の詳細は、「使用上の注意」を参照してください。
block_dump これはブール・パラメータで、プライマリ・データベースとスタンバイ・データベースのブロックのペアが一致しない場合に、ブロックのコンテンツを出力ファイルにダンプする必要があるかどうかを指定します。このパラメータは、異なるすべてのブロックのペアがダンプされることを保証するものではありません。デフォルト値はFALSEです。

使用上の注意

  • この出力ファイルには次の列が含まれます。

    • ID: ブロックのタイプ。たとえば、タイプ02はUNDOブロック・タイプで、06はKTB管理データ・ブロック・タイプです。

    • TOTAL: 特定のブロック・タイプのブロックの合計数。

    • CORR: 破損ブロックの数。

    • SKIPPED: 比較されずにスキップ(無視)されたブロック・ペアの数(直接ロードされたブロック、RMAN最適化ブロック、フラッシュバック最適化ブロックなど)。

    • DIFFV: プライマリとスタンバイの間でバージョン番号が異なるブロックの数。

    • SAMEV: プライマリとスタンバイの間でバージョン番号が同じブロック・ペアの数。

    • SAMEV&C: バージョンおよびチェックサムが同じブロック・ペアの数。

    • ENCERR: 暗号化に関連したエラーがあるブロック・ペアの数(通常、Walletがオープンしていないため)。

    • LWLOC: ローカル・データベースの書込み欠落の数。

    • LWRMT: リモート・データベースの書込み欠落の数。

    • DIFFPAIR: バージョンは同じだがチェックサムが異なり、ブロック比較のコールバック・ファンクションによる結果が異なるブロック・ペアの数。

例47-1 例

次に、DBMS_DBCOMP.DBCOMPプロシージャの使用例を示します。

declare
  Datafile_Name_or_Number varchar2(1000);
  Output_File varchar2(1000);
begin
  dbms_output.enable(1000000);
  Datafile_Name_or_Number:= 'all' ;
  Output_File:='BlockCompareAll_';
  sys.dbms_dbcomp.DBCOMP(Datafile_Name_or_Number, Output_File, true);
end;