スキーマの比較の使用

スキーマの比較により、ベースライン(またはデータベース)とベースライン(またはデータベース)間、あるいは単一のデータベースまたはベースライン内の2つのスキーマ間で、データベース・オブジェクト定義の相違が識別されます。

比較の指定は、左側と右側のソース、有効範囲および所有者により定義されます。有効範囲指定では、比較に含めるデータベース・オブジェクト定義の名前とタイプ、およびそれらのオブジェクト定義を含むスキーマを記述します。

比較により、任意のタイプのオブジェクト間で属性値の相違が識別されます。比較を使用して、複数の比較バージョンを作成できます。各バージョンには、一意のバージョン番号と比較日が割り当てられます。これらのバージョンを使用して、現在までに作成されたデータベース(スキーマ)の比較を関連付けます。

比較により、アプリケーションの元のベースラインと現在のデータベースの定義間の相違を表示できます。新しい比較バージョンを作成すると、開発サイクルの開始時における元の定義と、現時点における同じ定義との間の相違を識別できます。

他の比較指定を使用して、最新のベースラインの定義と以前のベースラインの定義を比較することもできます。比較指定を使用して比較の新規バージョンを作成するたびに、その比較バージョンにより前のベースライン以降の定義の相違を識別できます。

スキーマの比較の定義

スキーマの比較の定義は、左側と右側のメタデータ定義のソース、有効範囲指定、オプションのスキーマ・マップおよび比較オプションで構成されます。一度作成したら、スキーマの比較の定義を変更することはできません。これにより、スキーマの比較の各バージョンが、比較の定義の変更ではなく、比較対象のデータベースの変更を反映していることが保証されます。

スキーマの比較のソース

各比較には、左側のソースと右側のソースがあります。比較では、左側のソースと右側のソースのオブジェクト定義が照合されます。ソースには、データベースまたはベースライン・バージョンを指定できます。

  • ソースがデータベースの場合、オブジェクト定義は比較バージョンの作成時点のデータベースから直接取得されます。

  • ソースがベースラインの場合、オブジェクト定義は指定したベースライン・バージョンから取得されます。ベースライン・バージョンを使用すると、データベース(または別のベースライン・バージョン)を、過去のある時点で存在していたデータベースと比較できます。たとえば、ベースライン・バージョンは、アプリケーション開発サイクルの基礎となる時点や、アプリケーションの以前のリリースを表すことがあります。

ベースライン・ソースの場合、使用するバージョンを指定するための様々な方法があります。

  • 特定のベースライン・バージョンを比較のすべてのバージョンで使用する場合、ベースライン・バージョン番号を指定します。この方法は、適切に定義されたデータベースの以前の状態(任意のリリースなど)と、その現在の状態を比較する場合に適しています。

  • 最新のバージョンまたはその1つ前のバージョンを比較で使用することもできます。「最新」を選択すると、比較を実行する前にベースライン・バージョンを取得するよう指定できます。このオプションにより、単一の操作でベースラインを取得してそれを他のソースと比較できます。たとえば、毎晩開発データベースの現在の状態を表すベースライン・バージョンを取得し、それを前日の夜のベースラインや、開発の基礎となる時点を表す固定ベースラインと比較できます。

有効範囲の指定

スキーマの比較の有効範囲指定では、左側と右側のソースで比較するオブジェクトを識別します。比較の有効範囲指定の作成方法は、「スキーマ・ベースライン」に記載されているベースラインの有効範囲指定の作成方法と同じです。ベースラインと同様に、比較するオブジェクト・タイプとスキーマを指定するか、比較する個々のオブジェクトを指定します。

スキーマ・マップ

通常、一方のソースのスキーマ・オブジェクトは、他方のソースの同じスキーマに含まれるオブジェクトと比較されます。たとえば、左側のソースのAPPL1.T1表は、右側のソースのAPPL1.T1と比較されます。

しかし、あるスキーマのオブジェクトを、別のスキーマの対応するオブジェクトと比較したいこともあります。たとえば、DEV1とDEV2という2つのスキーマがあり、それぞれ同じオブジェクト・セットを含んでいるとします。異なるアプリケーション開発者が、DEV1とDEV2で作業しています。オプションのスキーマ・マップ機能を使用すると、DEV1のオブジェクトを、同じタイプおよび名前を持つDEV2のオブジェクトと比較できます。

スキーマ・マップにエントリを追加するには、比較の「オブジェクト」ページのマップされたオブジェクト・セクションを開きます。マップされたスキーマの1つ以上のペアを作成できます。各ペアでは、左側のスキーマと対応する右側のスキーマを指定します。

スキーマ・マップを使用すると、単一のデータベースまたはベースライン・バージョン内のオブジェクトを比較できます。前述の例では、同じデータベース内にDEV1とDEV2が存在します。左側と右側の両方のソースとしてそのデータベースを指定し、スキーマ・マップを入力してDEV1のオブジェクトとDEV2のオブジェクトを比較します。

比較オプション

オブジェクトの比較方法を指定する複数のオプションを選択できます。これらのオプションにより、重要ではない相違を無視できます。オプションには次のものがあります。

  • 「表領域を無視」および「物理属性を無視」–これら2つのオプションでは、格納されているオブジェクトを比較する際に、それらが格納されている表領域や、記憶域関連の属性の設定を無視できます。このオプションは、異なるサイズ構成および記憶域構成を持つデータベース内のオブジェクトを比較する場合や、オブジェクトの記憶域に関連する相違を考慮しない場合に便利です。

  • 「一致制約」の「定義別」または「名前別」 – 表制約の定義をより重視する場合(主キー制約または一意制約に関連する列など)、「一致制約」の「定義別」を選択します。これにより、同じ定義を持つ制約が照合され、その名前が相違として示されます(「名前の違いを無視」を選択していない場合)。制約の名前に意味がある場合、「一致制約」の「名前別」を選択します。この選択では、同じ名前を持つ制約が照合され、その定義が相違として示されます。

  • 「パーティション化されたオブジェクト: パーティション化を無視」: このオプションを選択すると、表および索引のパーティション化が無視されます。

  • 「パーティション化されたオブジェクト: 上限を無視」: 異なる環境では、同じ表が異なるパーティション上限値を持つ可能性があります。このオプションを選択すると、上限値の相違を無視できます。

  • 「論理SQL比較」— このオプションを選択すると、ソース・オブジェクト(パッケージ、パッケージ本体、プロシージャ、ファンクションなど)の意味のない書式の相違や、コメント内の空白の相違を無視できます。

  • 「統計の比較」— このオプションを選択すると、表および索引のオプティマイザ統計を比較できます。

  • 「表の列位置を無視」— 列の位置のみが異なる表を同じであるとみなす場合、このオプションを選択します。

比較バージョンの作成

比較の定義が終了したら、最初の比較バージョンを作成する時期を指定します。最初のバージョンは、即座に作成するか、後で作成できます。一定の間隔で新しい比較バージョンをスケジュールすることもできます。

比較バージョンをスケジュールする以外に、比較を選択して「すぐに繰返す」を指定することで、いつでも新しい比較バージョンを作成できます。

最初のバージョンの後に処理される比較は、通常、最初の比較よりもずっと高速に処理されます。左側または右側で変更のあったオブジェクトのみが、新規バージョンで比較されます。つまり、変更されたオブジェクトが数パーセントであれば、追加の比較バージョンに必要とされる記憶域は、最初のバージョンで使用された記憶域よりほんの少し多くなるだけです。

スキーマの比較バージョンの操作について

スキーマの比較バージョンには、有効範囲指定に応じて左側と右側のソースを比較した結果が記録されます。比較バージョンのオブジェクトの状態は、次の4つのうちのいずれかです。

  • 左のみ - オブジェクトは左側のソースにのみ存在します。

  • 右のみ - オブジェクトは右側のソースにのみ存在します。

  • 同一 - オブジェクトは左側と右側のソースに存在し、同一です。

  • 差分あり - オブジェクトは左側と右側のソースに存在し、異なります。

ページには比較のすべてのバージョンがリストされ、バージョンごとに各状態のオブジェクトの数が表示されます。比較バージョンのページには、各状態のオブジェクトが個別に表示されています。同一ではないオブジェクトを選択して相違を表示し、左側と右側の定義のDDLを生成できます。

比較バージョンにオブジェクトの情報を記録する場合、さらに次の2つの操作を実行できます。

  • オブジェクトにコメントを追加できます。たとえば、コメントで2つのオブジェクトが異なる理由を記述します。

  • オブジェクトを無視できます。オブジェクトを無視すると、比較バージョンのオブジェクトのリストからそのオブジェクトが削除されます。相違が重要ではないと判断した場合、異なるオブジェクトを無視できます。