56 DBMS_DBCOMP
DBMS_DBCOMP
パッケージは、ブロック比較を実行して、1つのプライマリ・データベースと1つ以上のフィジカル・スタンバイ・データベースの間の書込み欠落またはデータベースの非一貫性を検出します。これには、いつでも実行可能なDBCOMP
という1つのプロシージャが含まれます。(DB_LOST_WRITE_PROTECT
初期化パラメータを有効化する必要はありません。)
この章の構成は、次のとおりです。
56.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
の値と等しくなります。
56.3 DBMS_DBCOMPサブプログラムの要約
DBMS_DBCOMP
パッケージには、1つのプロシージャDBCOMP
が含まれています。
サブプログラム | 説明 |
---|---|
DBCOMP プロシージャ
|
DBMS_DBCOMP.DBCOMP プロシージャは、ブロック比較を実行して、1つのプライマリ・データベースと1つ以上のフィジカル・スタンバイ・データベースの間の書込み欠落またはデータベースの非一貫性を検出します。DBCOMP プロシージャをプライマリまたはフィジカル・スタンバイで実行できるのは、データベースがマウントされているか、オープンしている間です。
|
56.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: バージョンは同じだがチェックサムが異なり、ブロック比較のコールバック・ファンクションによる結果が異なるブロック・ペアの数。
-
例56-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;