データベースの比較
データベースの比較には大きく分けて2つの機能が用意されています。データベーススキーマの比較を行う機能と、データそのものの比較を行う機能です。また、スキーマやデータの比較を行うだけではなく、比較後に必要に応じてターゲットデータベースを更新することも可能です。これらの機能を利用することで、本番データベースとテスト用データベースのスキーマやデータの比較、本番データベースと開発中のデータベースプロジェクトのスキーマの比較を行い、修正を行うことができます。では、2つの比較機能について見ていきたいと思います。
データベーススキーマの比較
データベーススキーマの比較機能を利用して、例えば本番用データベースとテスト用データベースのスキーマを比較し、修正を行います。この機能は、比較元、比較先として以下の3種類のパターンを利用することができます。ここで比較元とは現在開発中または最新のもので、比較先とは以前の情報のものを指します。
- ソースデータベースとターゲットデータベースの比較
- ソースデータベースプロジェクトとターゲットデータベースの比較
- ソースデータベースプロジェクトとターゲットデータプロジェクトの比較
このように、実在のデータベースとVSDPで作成しているデータベースプロジェクトの組み合わせで比較を行うことができます。VSDPの仕組みとしては、ソースデータベースとターゲットデータベースプロジェクトの比較も可能で、2×2パターンの比較が可能ですが、比較元、比較先の意味合いを考えると現実的にはあまり意味のない選択肢だと思います。
さて、比較元、比較先を決定してスキーマの比較を実行すると次の図6のような画面になります。
画面の上部には、比較先との状態の違いなどが表示されます。ここで状態列は以下の4種類の値をとります。
- 等しい
- ソースオブジェクトとターゲットオブジェクトの構造が同じ
- 異なります
- ソースオブジェクトとターゲットオブジェクトの構造が異なる
- 見つかりません
- ターゲットに存在するオブジェクトがソースに存在していない
- 新規
- ソースに存在するオブジェクトがターゲットに存在していない
この状態に合わせて、VSDPはターゲットを更新するための準備を行っています。それが、更新アクション列に設定されている内容です。状態が「等しい」場合には何もする必要がないのでスキップ、異なる場合には更新などで以下の表2に示す設定を行うことができます。
状態 | 更新アクション | 既定値の説明 |
等しい | スキップ | 等しいオブジェクトの場合の既定のアクション |
異なります | 更新、スキップ | ソースオブジェクトの内容でターゲットオブジェクトの内容を変更する |
見つかりません | ドロップ、スキップ | ターゲットオブジェクトを削除する |
新規 | 作成、スキップ | ターゲットオブジェクトを作成する |
デフォルトでは表2の更新アクションにある太字部分が設定されていますが、それぞれ必要に応じて変更します。実際にどういったアクションに設定するかは図5の画面下側に表示されているオブジェクトの定義から相違点を確認することで行います。設定が終了したら、メニューにある[更新の書き込み]を実行することでソースの情報でターゲットを更新することができます。
データそのものの比較
データの比較機能を利用して、例えば日付の異なる2つのデータベースのデータを比較し、データがどのように変更されたか確認することができます。この機能は、比較元、比較先として以下の1種類のみを利用することができます。比較元、比較先はデータベーススキーマの比較のときと同様に、比較元とは現在開発中または最新のもので、比較先とは以前の情報のものを指します。
- ソースデータベースとターゲットデータベースの比較
データの比較がこの1種類のみなのは、データベースプロジェクトはスキーマ情報のみを保持し、データを持っていないためです。さらにデータの比較を行う場合には、双方のデータベースが共通していくつかの条件を満たしている必要があります。
- テーブルおよびビューは、名前、所有者、スキーマが一致していること
- テーブルは、主キー、一意のインデックス、一意の制約が一致していること
- ビューは、一意のクラスタ化インデックスが一致していること
単純には、データの比較機能はまったく同じスキーマをもった2つのデータベースのデータの差異を比較するといった感じです。実際にデータを比較すると次の図7のような画面になります。
画面の上部には比較したテーブルごとにテーブル内に含まれるレコードの比較結果を以下の4種類で表現しています。
- 異なるレコード
- ソースとターゲットで差異のあるレコード数
- ソースのみ
- ソースには存在するが、ターゲットには存在しないレコード数
- ターゲットのみ
- ターゲットには存在するが、ソースには存在しないレコード数
- 同一のレコード
- ソースとターゲットで同一のレコード数
画面の下部には4種類それぞれの実際のデータが表示されています。ここで実際のデータを確認することで異なっているデータがどれなのかを詳しく確認することができます。確認した結果、ソースデータベースのデータで、ターゲットデータベースのデータを更新したい場合には、メニューの[更新の書き込み]を行うことでその作業を実行することができます。