はじめに

開発者別にデータベースを用意していると、最新のスキーマ定義と各開発者のスキーマ定義にズレが生じてしまうことがあります。また、本番にリリースすべきテーブルやストアドプロシージャを正しく配置できたかを確認したくなることもあります。そのような時にデータベース間のスキーマを簡単に比較および同期できるツールがあると便利です。

そこで、本稿ではOpen DBDiffというオープンソースを紹介します。Open DBDiffを利用すると、2つのデータベースを比較して、それらを同期するSQLを出力できます。

Open DBDiffとは

Open DBDiffは、SQL Server 2008(2005)のデータベーススキーマを比較できるツールです。2つのデータベースを比較して、これらを同期するためのアップグレードSQLを生成できます。

Open DBDiffのメインウィンドウ

Open DBDiffでは、上図のツリービューに表示されているオブジェクトの比較が可能です。例えば、テーブル、カラム、制約、インデックス、ビュー、ストアドプロシージャ、ファンクション、ユーザー、ロール等の比較が可能です。

Open DBDiffの入手とセットアップ

Open DBDiffはCodePlexにて配布されています。ライセンスはGPLv2です。本稿では、執筆時点の最新バージョン「Open DBDiff 1.0 (Beta 8)」のインストーラ「Setup.rar」をダウンロードしています。

Open DBDiffのインストーラ

インストールは「Setup.exe」を実行して「Next」ボタンをクリックしていくだけです。

Open DBDiffの起動

インストールが成功すればデスクトップに「Open DBDiff 1.0」というアイコンが表示されます。これをダブルクリックするとメインウィンドウが開きます。

メインウィンドウが起動

続けて、比較するDBの接続情報を設定します。左の「Source Database」に比較元のDBを、右の「Destinateion Database」に反映先のDBを設定します。「Test Connection」ボタンで接続設定をテストできます。 そして「Compare」ボタンをクリックすると、DBのオブジェクトを解析するダイアログが表示されます。

解析状況を示すプログレスウィンドウ

しばらくするとSchemaタブにスキーマの比較結果が表示されます。

比較結果の確認と色の違い

比較結果は色で確認することができます。黒色は変更なし、緑色は新規、青色は変更、赤色は削除です。

本稿のサンプルでは、古いDB(MyDB)と最新DB(NewDB)を比較しています。「Table1」は変更がないので黒色で表示されています。「Table2」は変更があるため青色で表示されています。

比較結果がSchemaタブに表示される

詳細を確認したい場合は、ツリーをクリックして変更内容をチェックできます。ここでは、Name列(赤色)が削除され、FirstName列とLastName列(緑色)が追加されていることがわかります。

カラムの追加と削除を色で判別できる

Table_3は、緑色で表示されているので、新しく作られたオブジェクトであることがわかります。ツリー内のテーブル名をクリックすると、右側のNew objectタブに最新のテーブル定義が表示されます。

New Objectタブで定義を確認できる