チュートリアル : 2 つのデータベースのスキーマを比較する
このチュートリアルでは、Visual Studio Team System Database Edition を使って 2 つのデータベースのスキーマを比較します。 スキーマ比較操作を行うと、スキーマの相違点からデータ定義言語 (DDL: Data Definition Language) スクリプトも生成されます。 このファイルを使用して、ターゲットのスキーマをソースのスキーマと同期します。 詳細については、「データベース スキーマを比較および同期する」を参照してください。
このチュートリアルでは、次の手順を行います。
空のデータベースの作成。 Northwind データベースをソースとして使用し、ターゲットとして使用する空のデータベースを作成します。
2 つのデータベースのスキーマを比較する。 スキーマを比較して、2 つのデータベースの構造上の相違点を見つけ、この相違点を表に示し、相違点を表す DDL スクリプトを生成します。
同期スクリプトの確認と実行。 DDL スクリプトを確認し、実行前にこのスクリプトを編集できます。
ターゲット データベースの更新。 DDL スクリプトを実行して、ターゲットのスキーマを変更します。
前提条件
次の製品をインストールしている必要があります。
Microsoft SQL Server 2000 または Microsoft SQL Server 2005
Database Edition
比較のために 2 つのデータベースが必要です。 Northwind データベースをソースとして使用します。 また、ターゲットとして使用する空のデータベースを作成します。 この方法については次の手順で解説します。
空のデータベースの作成
次の手順に従って、空のデータベースを作成します。
空のデータベースを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[データベース プロジェクト] ノードを展開します。
SQL Server 2000 データベースを作成する場合は、[SQL Server 2000 ウィザード]をクリックします。 SQL Server 2005 データベースを作成する場合は、[SQL Server 2005 ウィザード] をクリックします。
[名前] ボックスに「EmptyNW」と入力します。
その他のフィールドについては既定値をそのまま使用し、[OK] をクリックします。
新規データベース プロジェクト ウィザードが表示されます。
[ビルド/配置の構成] をクリックします。
[ターゲット接続] の [参照] をクリックし、空のデータベースを作成するデータベース サーバーへの接続を指定します。
[完了] をクリックします。
EmptyNW という名前のデータベース プロジェクトが作成され、ソリューション エクスプローラに表示されます。
ソリューション エクスプローラで EmptyNW データベース プロジェクトを右クリックし、[プロパティ] をクリックします。
[配置] タブをクリックします。
[配置動作] ボックスの一覧の [配置スクリプト (.sql) を作成してデータベースに配置します] をクリックします。
[ファイル] メニューの [すべてを保存] をクリックします。
ソリューション エクスプローラで EmptyNW データベース プロジェクトをクリックします。
[ビルド] メニューの [ProjectName の配置] をクリックします。
データベース プロジェクトがビルドされ、指定したサーバーに配置されます。
2 つのデータベースのスキーマを比較する
2 つのデータベースのスキーマを比較するには
Database Edition を開きます。
[データ] メニューの [スキーマ比較] をポイントし、[新しいスキーマ比較] をクリックします。
ソースとターゲットを指定できるように、[新しいスキーマ比較] ダイアログ ボックスが表示されます。 このダイアログ ボックスでは、ソースとターゲットが格納されているサーバーの名前、各データベースの名前、および各データベースに接続するときに使用する認証の種類を指定します。
また、[データ比較] ウィンドウがバックグラウンドで開き、SchemaCompare1 などの名前が Database Edition によって自動的に割り当てられます。
[ソース スキーマ] で [データベース] をクリックし、Northwind データベースに対応する接続をクリックします。
一覧に接続が表示されない場合は、[新しい接続] をクリックします。 [接続のプロパティ] ダイアログ ボックスが表示されたら、ソースまたはターゲットが常駐するサーバー、および接続するときに使用する認証の種類を指定します。オプションで、そのサーバー上のデータベースをクリックします。 作業が終了したら、[OK] をクリックします。
メモ : 接続が確立されると、サーバー エクスプローラの [データ接続] の下にその接続が表示されます。
[ターゲット スキーマ] で [データベース] をクリックし、EmptyNW データベースに対応する接続をクリックします。
一覧に接続が表示されない場合は、[新しい接続] をクリックします。 [接続のプロパティ] ダイアログ ボックスが表示されたら、ソースまたはターゲットが常駐するサーバー、および接続するときに使用する認証の種類を指定します。オプションで、そのサーバー上のデータベースをクリックします。 作業が終了したら、[OK] をクリックします。
(省略可能) [オプション] をクリックし、比較するオブジェクト、無視する相違点の種類、および生成される更新スクリプトに含める内容を指定します。
メモ : データベースを比較するときは、SQLCMD 変数は指定しません。
[OK] をクリックします。
スキーマ比較が開始されます。
メモ : 実行中のスキーマ比較操作を停止するには、[データ] メニューの [スキーマ比較] をポイントし、[スキーマ比較の停止] をクリックします。
どのような違いを相違点と見なすか、および更新スクリプトの作成方法を変更するオプションを設定できます。 詳細については、「方法 : データベース スキーマの比較に関するオプションを設定する」を参照してください。
比較が終わると、2 つのデータベース間の構造上の相違点が [スキーマの比較] ウィンドウの表に表示されます。 この表の各行には、どちらか一方のデータベースにのみ存在するデータベース オブジェクトが 1 つ表示されます。 データベース オブジェクトは、種類別 (テーブル、ビュー、ストアド プロシージャ、ロールなど) にまとめられます。
ターゲット データベースの更新
ターゲットのスキーマを更新する場合は、2 つの選択肢があります。 [スキーマ比較] ウィンドウからスキーマを直接更新する方法と、T-SQL エディタを使用する方法です。 このセクションでは、この 2 つの選択肢について説明します。
スキーマ比較を実行すると、構造上の相違点が [スキーマの比較] ウィンドウの表に表示されます。 [Northwind (ソース データベース)] 列の各オブジェクトについて、そのオブジェクトを 2 つのデータベースで同期するために必要なアクションが [更新アクション] 列に表示されます。 この例の場合、ターゲットには既定のオブジェクトしか格納されていないので、[状態] 列の大部分は新規状態で、[更新アクション] 列の大部分は作成アクションです。
ターゲットへの更新の書き込み
[スキーマ比較] ウィンドウに示された更新アクションを使って、ターゲットのスキーマを更新できます。 このタスクを実行するには、「ターゲット データベースへの更新の書き込み」に説明されている手順に従います。
スクリプトの表示とターゲットへの更新の書き込み
更新スクリプトをエクスポートして確認し、必要に応じて変更した後で、これを使ってターゲット データベースを同期します。 これらのタスクを実行するには、「同期スクリプトの確認と実行」に説明されている手順に従います。
ターゲット データベースへの更新の書き込み
ターゲット データベースに更新を書き込むには
(省略可能) ターゲット データベースをバックアップします。
一部のスキーマ変更は処理できないため、更新操作をいったん開始してから取り消した場合は、データが失われることがあります。 たとえば、ターゲット データベースのあるテーブルが、再作成時の準備中に削除されている場合があります。 その時点で更新を取り消すと、そのテーブルが失われることがあります。
[スキーマ比較] ツール バーの [更新の書き込み] をクリックします。
[スキーマ比較] ウィンドウに示された更新アクションが実行されます。 この同期により、ソースのスキーマに一致するようにターゲットのスキーマが変更されます。
メモ : 更新アクションの実行中に操作を取り消すには、[データ] メニューの [スキーマ比較] をポイントし、[ターゲットへの書き込み] をクリックします。
比較は、自動的に最新の状態に更新されます。 選択した更新が適用されたことを確認するためにもう一度比較を実行する場合は、[スキーマ比較] ツール バーの [最新の情報に更新] をクリックしてください。
同期スクリプトの確認と実行
同期スクリプトを確認するには
[データ] メニューの [スキーマ比較] をポイントします。次に、[エクスポート先] をポイントし、[エディタ] をクリックします。 または、[スキーマ比較] ツール バーの [エディタにエクスポート] をクリックします。
T-SQL エディタが接続モードで開き、T-SQL 同期スクリプトが表示されます。 このウィンドウには、Server.Northwind - SchemaUpdate_EmptyNW_1.sql というような名前が付いています。 ここには、T-SQL スクリプトが表示されます。 読み取りおよび書き込みアクセス権を持っているので、このウィンドウでスクリプトを変更できます。 変更した場合は、[ファイル] メニューの [上書き保存] をクリックします。 ファイルを保存するときに、パスと名前を指定できます。
2 つのデータベースのスキーマを同期するために、このスクリプトを実行します。スクリプトを実行するには、[T-SQL エディタ] ツール バーの [SQL の実行] をクリックするか、F5 キーを押します。
[データベースへの接続] ダイアログ ボックスが表示されます。
EmptyNW データベースに対応する接続をクリックし、[OK] をクリックします。
注意 : 異なるデータベースに対して更新スクリプトを実行しようとすると、意図しない結果が発生することがあります。
比較は、自動的には最新の状態に更新されません。 選択した更新が適用されたことを確認するためにもう一度比較を実行する場合は、スキーマ比較のセッションを選択し、[スキーマ比較] ツール バーの [最新の情報に更新] をクリックしてください。
次の手順
これで、2 つのデータベースのデータを比較できます。 詳細については、「方法 : 2 つのデータベースのデータを比較する」を参照してください。