データベース・データ比較の使用

データの比較操作では、候補データベースのデータベース・オブジェクト・セット内のデータを参照データベースのものと比較します。同じデータベース内に存在するオブジェクトを比較するには、そのデータベースを参照および候補として選択します。比較の対象となるオブジェクトを指定して比較を作成し、比較を行うCloud Controlジョブをすぐに、あるいは後で発行できます。ジョブが完了したら、データの比較を選択し、結果を表示します。比較を削除すると、結果はパージされます。

Cloud Controlのデータの比較では、比較にDBMS_COMPARISONパッケージが使用されます。次のタイプのデータベース・オブジェクトを比較できます。

  • 単一表ビュー

  • マテリアライズド・ビュー

  • 表、単一表ビューおよびマテリアライズド・ビューのシノニム

異なるデータベースにある異なるタイプのデータベース・オブジェクトを比較できます。たとえば、あるデータベースにある表と、別のデータベースにあるマテリアライズド・ビューを比較できます。

データベース・データ比較の要件

データの比較では、この項で説明する要件を満たす必要があります。

データベース文字セットは、比較対象のデータベース・オブジェクトが含まれているデータベースのものと同じである必要があります。

索引列、数値列、タイムスタンプ列および期間列のデータ型は次のとおりです。

  • 数値列のデータ型は、NUMBER、FLOAT、BINARY_FLOATおよびBINARY_DOUBLEです。

  • タイムスタンプ列のデータ型は、TIMESTAMP、TIMESTAMP WITH TIME ZONEおよびTIMESTAMP WITH LOCAL TIME ZONEです。

  • 期間列のデータ型は、INTERVAL YEAR TO MONTHおよびINTERVAL DAY TO SECONDです。

データベース・オブジェクトには、次のいずれかのタイプの索引が必要です。

  • 数値、タイムスタンプ、期間、DATEデータ型、VARCHAR2データ型またはCHARデータ型の列に対する単一列索引。

  • 数値、タイムスタンプ、期間、DATE、VARCHAR2またはCHARの列のみが含まれているコンポジット索引。コンポジット索引内の各列は、NOTNULL制約を含んでいるか、または主キーの一部である必要があります。

データベース・オブジェクトにこれらのタイプの索引のいずれかが含まれていない場合、そのデータベース・オブジェクトはEMのデータの比較ではサポートされません。たとえば、データベース・オブジェクトにNVARCHAR2列に対する単一索引のみが含まれている場合、そのデータベース・オブジェクトはデータの比較でサポートされません。また、データベース・オブジェクトに1つのみの索引が含まれていて、その索引がNUMBER列およびNCHAR列を含むコンポジット索引である場合、そのデータベース・オブジェクトはデータの比較でサポートされません。

比較の索引列は、比較に関連するすべての行を一意に識別する必要があります。次の制約は、この要件を満たしている必要があります。

  • 主キー制約

  • 1つ以上のNULL以外の列に対する一意制約

索引を指定する場合は、索引の列が、これらの比較の要件を満たしていることを確認してください。

Cloud Controlのデータの比較機能では、次のデータ型の列のデータを比較できます。

  • VARCHAR2

  • NVARCHAR2

  • NUMBER

  • FLOAT

  • DATE

  • BINARY_FLOAT

  • BINARY_DOUBLE

  • TIMESTAMP

  • TIMESTAMPWITHTIMEZONE

  • TIMESTAMPWITHLOCALTIMEZONE

  • INTERVALYEARTOMONTH

  • INTERVALDAYTOSECOND

  • RAW

  • CHAR

  • NCHAR

TIMESTAMP WITH LOCAL TIME ZONEデータ型の列を比較する場合、2つのデータベースで同じタイムゾーンが使用される必要があります。また、データ型がNVARCHAR2またはNCHARの列を比較する場合、2つのデータベースで同じ各国語文字セットが使用される必要があります。

データの比較機能では、次のデータ型の列のデータは比較できません。

  • LONG

  • LONG RAW

  • ROWID

  • UROWID

  • CLOB

  • NCLOB

  • BLOB

  • BFILE

  • ユーザー定義型(オブジェクト型、REF、VARRAY、ネストした表など)

  • オラクル社提供のタイプ(任意のタイプ、XMLタイプ、空間タイプ、メディア・タイプなど)

比較の指定時にサポートされていない列を除外することによって、サポートされていない列が含まれているデータベース・オブジェクトを比較できます。比較アイテムを編集し、「含める列」リストの列名にサポートされている列のみを含めます。

データの比較では、LOB列値は直接比較できないため、かわりに暗号化ハッシュが比較に使用されます。LOB型の列を比較に含める場合、参照データベースと候補データベースに接続するデータベース・ユーザーにSYS.DBMS_CRYPTOパッケージに対するEXECUTE権限があることを確認します。DBMS_COMPARISONの詳細は、参照データベースのデータベース・バージョンのDatabase PL/SQLパッケージおよびタイプ・リファレンス・ブックを参照してください。

ノート:

データ比較ジョブは、「ORA-28759: failure to open file error.」 エラーで失敗することがあります。

このエラーは、データ比較が比較のために参照データベース内のデータベース・リンクを介して参照データベース内に候補データベースからデータを取得しようとすると発生します。

データベース・サーバー(候補/ソース・データベース)は、接続のためにTCPSプロトコルの使用を必要としますが、クライアント(参照/宛先データベース)に有効なウォレットの場所が含まれていません。クライアント側にウォレットが指定されていないため、データベース・リンクを介した接続は失敗します。

この問題は、sqlnet.oraファイル(デフォルトの場所は$ORACLE_HOME/network/adminディレクトリ)に有効なWALLET_LOCATIONエントリを指定することによって修正できます。次のウォレットの場所を参照データベースで指定する必要があります。

WALLET_LOCATION = (SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/net/slc05puy/scratch/dbwallets/s wallets)))

データベース・データの比較および結果の表示

次の手順を使用すると、参照および候補データベースで比較するオブジェクトのペアを指定し、選択内容を処理するジョブを発行し、ジョブが正常に完了した後に差異を表示できます。

  1. データの比較メイン・ページから、「作成」をクリックします。データの比較の作成ページが表示されます。

  2. 必要な入力を行います。

    1. 2つのデータベース内に存在するオブジェクトを比較するには、1つのデータベースを参照、もう1つのデータベースを候補として選択します。

      • 比較は常に参照データベースによって実行されるため、このデータベースはバージョン11g以上である必要があります。候補データベースはバージョン10g以上である必要があります。

      • 参照データベースでは、処理負荷が余計にかかるため、(行全体ではなく)異なる行の行IDを格納するための領域が必要です。本番システムとテスト・システム間のデータを比較する場合、結果を処理してテスト・システムに格納する方が適切な場合があります。

    2. 作業を終了後、「OK」をクリックします。データの比較仕様ページが表示されます。

      ヒント:

      比較指定を一度定義してそれを何度も実行することをお薦めします。

  3. 「アクション」メニューを開き、「オブジェクト・ペアの追加」または「複数オブジェクトの追加」を選択します。「オブジェクト・ペア」を選択する場合、次のサブステップを続けます。「複数のオブジェクト」を選択する場合、次のステップに進みます。

    • オブジェクト・ペアの追加は、参照データベースから1つのオブジェクトを選択し、候補データベースから1つのオブジェクトを選択することよって行います。必要に応じて、異種のオブジェクト・タイプ(参照データベースの表と候補データベースのマテリアライズド・ビューなど)を比較できます。

    1. 参照および候補オブジェクトを指定します。参照データベースは候補データベースと同じでかまいません。この場合、オブジェクトは同じデータベースのものになります。

    2. 比較用として参照または候補データベースで1つ以上の列を選択します。含まれる列は両方のオブジェクトで共通している必要があります。

    3. 必要に応じて、比較用として使用する索引を選択します。比較索引内の列は、比較に含まれるすべての行を一意に識別している必要があります。1つ以上のNULL以外の列に対する主キー制約または一意キー制約に使用される索引はこの要件を満たします。この比較で指定した索引を使用できるのは、含める列のリスト内のすべての列を選択する場合のみです。

      複数の索引列を追加する場合、コンポジット索引を選択できます。

    4. 比較対象のオブジェクトのペアごとにオプションのWhere条件を指定します。

    5. バケットの最大数およびバケット当たりの最小行を指定するか自動的に計算させます。

    6. データを比較する時点を指定します。

      • システム変更番号(SCN)は、データベース内のある時点を正確かつ一意に識別する順次カウンタです。これは、ある時点を識別する最も正確な方法です。トランザクションをコミットするたびに、新規SCNが記録されます。SCNはアラート・ログから取得できます。

    7. 構成が終了したら、「OK」をクリックします。

      データの比較仕様ページが再表示され、選択したオブジェクトがリストに表示されます。

    8. 「OK」をクリックし、ステップ5に進みます。

  4. 「アクション」メニューを開き、「複数オブジェクトの追加」を選択します。

    • 複数のオブジェクトを追加すると、参照データベースから仕様に対する複数のオブジェクトの一括追加を簡単に行うことができます。多数の表やビューなどの複数のオブジェクトを参照データベースの値リストから検索および選択し、必要に応じて各項目を編集できます。

      1. スキーマ名、および1つ以上のオブジェクト・タイプを指定し、「検索」をクリックします。

        表にはオブジェクト名が移入されています。

      2. 比較するオブジェクトを選択し、「OK」をクリックします。

        データの比較仕様ページが再表示され、選択したオブジェクトがリストに表示されます。

  5. リストから比較名を選択し、「アクション」メニューを開き、比較ジョブの発行を選択します。参照データベースと候補データベースのユーザー資格証明に必要な権限の詳細は、「データベースの変更管理の概要」を参照してください。

  6. ページで必要な資格情報を指定し、ジョブをスケジュールして「OK」をクリックします。

    「データの比較」ページが再度表示され、次の確認メッセージが表示されます。

    ジョブが正常に発行されました。ジョブ・ステータスを確認するには、「ジョブ・ステータス」列のリンクをクリックしてください。

    「ジョブ・ステータス」列に「成功」と表示されたら、次のステップに進みます。

  7. リストから比較名を選択し、「アクション」メニューを開き、「結果の表示」を選択します。データ比較結果ページが表示されます。

  8. 参照行データと候補行データ間に差異があることを示す「=/=」記号がある「結果」列内の行を検索します。

    • データ比較では、すべての表を比較します。エラーがあった場合、エラー・メッセージは、「メッセージ」タブを選択すると表示できます。エラー・メッセージは、「=」または「=/=」記号ではなく「X」で示されます。

    • 比較を行うために実行中のSQL文を表示するには、「実行された文」タブをクリックします。

  9. 異なる「参照」/「候補」行を選択し、「ビュー行の差異」をクリックして、行データの差異ページで参照のみ、候補のみ、および差分変更済の各行の詳細な索引付きリストを表示します。

    • 「行ソース」列は、データの各行の元を全体的に示します。また、参照と候補で異なる行内のデータは対照的な色で表示され、データのソースが参照データベースと候補データベースのどちらであるかを示します。

    • 比較はキー列に基づいて(選択した一意の索引に応じて)表示されます。キー列値が異なる場合、行は候補または参照のみの行として表示されます。他の列が異なる場合、行は差分行として表示されます。

スキーマ・マッピング

デフォルトでは、参照オブジェクトは、参照スキーマと同じ名前のスキーマの候補オブジェクトと比較されます。スキーマ・マッピングを使用すると、オプションで参照スキーマのオブジェクトと、異なる候補スキーマのオブジェクトを比較できます。スキーマをマップできるのは一度のみです。「データ比較仕様」ページの「スキーマ・マッピング」セクションで、マッピングの参照と候補のスキーマ名を指定します。これで、指定されたスキーマ・マッピングからデフォルトの候補スキーマが選択されます。

さらに、アイテムを編集して各アイテムの候補スキーマをオーバーライドできます。「候補オブジェクト」フィールドの横にある「オーバーライド」ボタンをクリックし、任意のスキーマに属する候補オブジェクトを明示的に指定します。このようにしてオーバーライドされた候補オブジェクトのアイテムの場合、スキーマ・マッピングは無視されます。

バケットの使用

バケットとは、比較中のデータベース・オブジェクト内の行の範囲です。バケットを使用すると、データベース・オブジェクトが複数の範囲に分割され、別々に比較されるため、パフォーマンスが向上します。それぞれの比較で、比較される行が適切な数のバケットに分割されます。使用されるバケットの数はデータベース・オブジェクトのサイズに応じて変化し、比較に指定されているバケットの最大数よりも常に少なくなります。

バケットを比較すると、次のような結果になる可能性があります。

  • 違いが見つからない場合 —

    次のバケットの比較に進みます。

  • 違いが見つかった場合 -

    そのバケットをより小さいパケットに分割して、それぞれのバケットを比較できます。小さいバケットで違いが検出された場合、そのバケットはさらに小さいバケットに分割されます。このプロセスは、バケットに許可される最小行数になるまで続行され、バケットに違いがあるかどうかを示す比較レポートが作成され、各行の違いが特定されます。

特定のデータベース・オブジェクトを比較する際にパフォーマンスを最適化するために、バケットの最大数とバケット当たりの最小行数を調整できます。

比較プログラムは、バケットのすべての行の指定列に対してORA_HASH関数を使用し、そのバケットのハッシュ値を計算します。2つの対応するバケットのハッシュ値が一致する場合、バケットの内容も一致するとみなされます。ORA_HASH関数では、行の値がデータベース間で転送されないため、効率よくバケットが比較されます。かわりにハッシュ値のみが転送されます。

ノート:

比較の索引列がVARCHAR2またはCHAR列である場合は、バケット数がバケットの最大数に指定されている値を超える可能性があります。