データベース プロジェクトを配置する

作成者: Jason Lee

Note

多くのエンタープライズ配置シナリオでは、配置されたデータベースに増分更新プログラムを公開する機能が必要です。 別の方法は、すべての配置でデータベースを再作成することです。これは、既存のデータベース内のデータが失われることを意味します。 Visual Studio 2010 を使用する場合は、データベースの増分公開に対して VSDBCMD を使用することをお勧めします。 ただし、Visual Studio と Web 発行パイプライン (WPP) の次のバージョンには、増公開を直接サポートするツールが含まれます。

Visual Studio 2010 で Contact Manager サンプル ソリューションを開くと、データベース プロジェクトに 4 つのファイルを含む Properties フォルダーが含まれていることがわかります。

Visual Studio 2010 で Contact Manager サンプル ソリューションを開くと、データベース プロジェクトに 4 つのファイルを含む Properties フォルダーが含まれていることがわかります。

プロジェクト ファイル (この場合は ContactManager.Database.dbproj) と共に、これらのファイルはビルドと配置プロセスのさまざまな側面を制御します。

  • Database.sqlcmdvars ファイルは、 プロジェクトの配置時に使用する SQLCMD 変数の値を提供します。 各ソリューション構成 (デバッグやリリースなど) では、異なる .sqlcmdvars ファイルを指定できます。
  • Database.sqldeployment ファイルには、プロジェクトで定義されている照合順序を使用するか、宛先サーバーの照合順序を使用するか、毎回宛先データベースを再作成するか、既存のデータベースを最新の状態に変更するかなど、配置固有の設定が用意されています。 各ソリューション構成では、異なる .sqldeployment ファイルを指定できます。
  • Database.sqlpermissions ファイルは、ターゲット データベースに追加するアクセス許可を定義するために使用できる XML ドキュメントです。 すべてのソリューション構成は、同じ .sqlpermissions ファイルを共有します。
  • Database.sqlsettings ファイルは、使用する照合順序、比較演算子の動作など、データベースの作成時に使用するデータベース レベルのプロパティを指定します。 すべてのソリューション構成は、同じ .sqlsettings ファイルを共有します。

少し時間をかけ、Visual Studio でこれらのファイルを開き、その内容について理解を深めます。

データベース プロジェクトをビルドすると、ビルド プロセスによって次の 2 つのファイルが作成されます。

  • データベース スキーマ (.dbschema ファイル)。 これは、XML形式で作成するデータベースのスキーマを記述します。
  • 配置マニフェスト (.deploymanifest ファイル)。 これには、データベースの作成と配置に必要なすべての情報が含まれます。 配置手順 (.sqldeployment ファイル) や配置前または配置後の SQL スクリプトなど、他のリソースと共に .dbschema ファイルを参照します。

これは、次のリソース間の関係を示しています。

上記のリソース間の関係

ご覧のように、.sqlsettings ファイルと .sqlpermissions ファイルはビルド プロセスへの入力です。 これらのファイルは、データベース プロジェクト ファイルと共に、データベース スキーマ ファイルの作成に使用されます。 .sqldeployment ファイルと .sqlcmdvars ファイルは、変更せずにビルド プロセスを通過します。 配置マニフェストは、データベース スキーマ、.sqldeployment ファイル、.sqlcmdvars ファイル、配置前または配置後の SQL スクリプトの場所を示します。

VSDBCMD を使用してデータベース プロジェクトを配置する理由

データベース プロジェクトを配置するには、さまざまな方法があります。 ただし、これらのすべてが、エンタープライズ環境のリモート サーバーにデータベース プロジェクトを配置するのに適しているわけではありません。 データベース プロジェクトの配置に必要なものを検討します。 エンタープライズ配置シナリオでは、次が必要な場合があります。

  • リモートの場所からデータベース プロジェクトを配置する機能。
  • 既存のデータベースに対して増分更新を行う機能。
  • 配置前スクリプトまたは配置後スクリプトを含める機能。
  • 複数の宛先環境に合わせて配置を調整する機能。
  • データベース プロジェクトを、通常はスクリプト化された大規模なシングルステップ ソリューション配置の一部として配置する機能。

データベース プロジェクトの配置に使用できる主な方法は 3 つあります。

  • Visual Studio 2010 では、データベース プロジェクトの種類に応じた配置機能を使用できます。 Visual Studio 2010 でデータベース プロジェクトをビルドして配置すると、配置プロセスでは配置マニフェストを使用して、ビルド構成に固有の SQL ベースの配置ファイルが生成されます。 これにより、データベースがまだ存在しない場合はデータベースが作成され、データベースが既に存在する場合は必要な変更が行われます。 SQLCMD.exe を使用して、宛先サーバーでこのファイルを実行することも、Visual Studio でファイルを作成して実行するように設定することもできます。 この方法の欠点は、配置設定の制御が制限されていることです。 また、多くの場合、環境固有の変数値を指定するために SQL 配置ファイルを変更する必要があります。 この方法は、Visual Studio 2010 がインストールされているコンピューターからのみ使用できます。開発者は、すべての宛先環境の接続文字列と資格情報を知り、提供する必要があります。
  • インターネット インフォメーション サービス (IIS) Web 配置ツール (Web 配置) を使用して、Web アプリケーション プロジェクトの一部としてデータベースを配置できます。 ただし、単に既存のローカル データベースを宛先サーバーにレプリケートするのではなく、データベース プロジェクトを配置する場合、この方法ははるかに複雑です。 データベース プロジェクトで生成される SQL 配置スクリプトを実行するように Web 配置を構成できますが、これを行うには、Web アプリケーション プロジェクト用のカスタム WPP ターゲット ファイルを作成する必要があります。 これにより、配置プロセスが大幅に複雑になります。 さらに、Web 配置では、既存のデータベースへの増分更新は直接サポートされません。 この方法の詳細については、「Web 発行パイプラインを拡張して、データベース プロジェクトが配置された SQL ファイルをパッケージ化する」を参照してください。
  • VSDBCMD ユーティリティを使用すると、データベース スキーマまたは配置マニフェストを使用して、データベースを配置できます。 MSBuild ターゲットから VSDBCMD.exe を呼び出すことができます。これにより、大規模なスクリプト化された配置プロセスの一部としてデータベースを公開できます。 VSDBCMD コマンドを使用すると、.sqlcmdvars ファイル内の変数とその他の多くのデータベース プロパティをオーバーライドできます。これにより、複数のビルド構成を作成することなく、さまざまな環境に合わせて配置をカスタマイズできます。 VSDBCMD は差別化機能を提供します。つまり、宛先データベースをデータベース スキーマに合わせて調整するために必要な変更のみが行われます。 VSDBCMD にはさまざまなコマンド ライン オプションも用意されており、配置プロセスをきめ細かく制御できます。

この概要から、MSBuild で VSDBCMD を使用することが、一般的なエンタープライズ配置シナリオに最適な方法であることがわかります。

サポート Visual Studio 2010 Web 配置 2.0 VSDBCMD.exe
リモート配置をサポートしていますか? はい イエス はい
増分更新をサポートしていますか? はい いいえ はい
配置前/配置後スクリプトをサポートしていますか? はい イエス はい
複数環境の配置をサポートしていますか? 制限 制限あり はい
スクリプト化された配置をサポートしていますか? 制限あり はい はい

このトピックの残りの部分では、VSDBCMD と MSBuild を使用してデータベース プロジェクトを配置する方法について説明します。

配置プロセスについて

VSDBCMD ユーティリティを使用すると、データベース スキーマ (.dbschema ファイル) または配置マニフェスト (.deploymanifest ファイル) を使用してデータベースを配置できます。 実際には、ほとんどの場合、配置マニフェストを使用します。配置マニフェストを使用すると、さまざまな配置プロパティの既定値を指定し、実行する配置前または配置後の SQL スクリプトを特定できます。 たとえば、次の VSDBCMD コマンドは、ContactManager データベースをテスト環境のデータベース サーバーに配置するために使用されます。

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /dd+
            /script:"…\Publish-ContactManager-Db.sql"

この場合、次のようになります。

  • /a (または /Action) スイッチは、VSDBCMD で実行する操作を指定します。 これを [インポート] または [配置] に設定できます。 インポート オプションは、既存のデータベースから .dbschema ファイルを生成するために使用され、配置オプションは、.dbschema ファイルをターゲット データベースに配置するために使用されます。
  • /manifest (または /ManifestFile) スイッチは、配置する .deploymanifest ファイルを識別します。 代わりに .dbschema ファイルを使用する場合は、/model (または /ModelFile) スイッチを使用します。
  • /cs (または /ConnectionString) スイッチは、ターゲット データベース サーバーの接続文字列を指定します。 データベースの名前は含まれていないことに注意してください。VSDBCMD は、データベースを作成するためにサーバーに接続する必要があります。個々のデータベースに接続する必要はありません。 .deploymanifest ファイルに接続文字列が含まれている場合は、このスイッチを省略できます。 スイッチを使用すると、スイッチの値によって .deploymanifest の値がオーバーライドされます。
  • /p:TargetDatabase プロパティは、作成時にターゲット データベースに割り当てる名前を指定します。 これにより、.deploymanifest ファイル内の TargetDatabase プロパティの値がオーバーライドされます。 /p: [プロパティ名]syntax を使用すると、さまざまな配置プロパティを設定したり、.sqlcmdvars ファイルで宣言されている SQLCMD 変数をオーバーライドしたりできます。
  • /dd+ (または /DeployToDatabase+) スイッチは、配置を作成してターゲット環境に配置することを示します。 /dd- を指定するか、スイッチを省略した場合、VSDBCMD は配置スクリプトを生成しますが、ターゲット環境には配置しません。 多くの場合、このスイッチは混乱の原因となり、次のセクションで詳しく説明します。
  • /script (または /DeploymentScriptFile) スイッチは、配置スクリプトを生成する場所を指定します。 この値は配置プロセスには影響しません。

VSDBCMD の詳細については、「VSDBCMD.EXEのコマンド ライン リファレンス (配置とスキーマのインポート)」と「方法: VSDBCMD.EXEを使用してコマンド プロンプトから配置するデータベースを準備する」を参照してください。

MSBuild プロジェクト ファイルから VSDBCMD を使用する方法の例については、「ビルド プロセスについて」を参照してください。 複数環境のデータベース配置設定を構成する方法の例については、「複数環境のデータベース配置のカスタマイズ」を参照してください。

DeployToDatabase スイッチについて

/dd または /DeployToDatabase スイッチの動作は、VSDBCMD を .dbschema ファイルと .deploymanifest ファイルのどちらを使用しているかによって異なります。 .dbschema ファイルを使用している場合の動作は非常に簡単です。

  • /dd+ または /dd を指定すると、VSDBCMD によって配置スクリプトが生成され、データベースが配置されます。
  • /dd- を指定するか、スイッチを省略した場合、VSDBCMD は配置スクリプトのみを生成します。

.deploymanifest ファイルを使用している場合、動作ははるかに複雑になります。 これは、.deploymanifest ファイルに、データベースが配置されるかどうかを決定するプロパティ名 DeployToDatabase が含まれているためです。

<DeployToDatabase>False</DeployToDatabase>

このプロパティの値は、データベース プロジェクトのプロパティに従って設定されます。 配置アクション配置スクリプトの作成 (.sql) に設定した場合、値は False になります。 配置アクション配置スクリプトの作成 (.sql) に設定し、データベースに配置すると、値は True になります。

Note

これらの設定は、特定のビルド構成とプラットフォームに関連付けられています。 たとえば、デバッグ構成の設定を構成し、リリース構成を使用して公開した場合、設定は使用されません。

たとえば、デバッグ構成の設定を構成し、リリース構成を使用して公開した場合、設定は使用されません。

Note

このシナリオでは、Visual Studio 2010 でデータベースを配置しないようにするため、配置アクションは常に配置スクリプトの作成 (.sql) に設定する必要があります。 つまり、DeployToDatabase プロパティは常に False である必要があります。

DeployToDatabase プロパティが指定されている場合、/dd スイッチは、プロパティ値が false の場合にのみプロパティをオーバーライドします。

  • DeployToDatabase プロパティが False で、/dd+ または /dd を指定すると、VSDBCMD は DeployToDatabase プロパティをオーバーライドし、データベースを配置します。
  • DeployToDatabase プロパティが False の場合、/dd- を指定するか、スイッチを省略すると、VSDBCMD はデータベースを配置しません。
  • DeployToDatabase プロパティが True の場合、VSDBCMD はスイッチを無視し、データベースを配置します。
  • 配置スクリプトは、データベースを配置するかどうかに関係なく、各ケースで生成されます。

まとめ

このトピックでは、Visual Studio 2010 のデータベース プロジェクトのビルドおよび配置プロセスの概要について説明しました。 また、MSBuild でVSDBCMD.exe を使用してエンタープライズ規模のデータベース配置をサポートする方法についても説明しました。

実際の動作の詳細については、「複数環境のデータベース配置のカスタマイズ」を参照してください。

もっと読む

環境ごとに個別の配置構成ファイルを作成してデータベース配置をカスタマイズする方法については、「複数環境のデータベース配置のカスタマイズ」を参照してください。 配置後スクリプトを実行してデータベース ロール メンバーシップを構成する方法については、「データベース ロール メンバーシップのテスト環境への配置」を参照してください。 メンバーシップ データベースが課す固有の課題の管理に関するガイダンスについては、「エンタープライズ環境にメンバーシップ データベースを配置する」を参照してください。

MSDN のこれらのトピックでは、Visual Studio データベース プロジェクトとデータベース配置プロセスに関するより広範なガイダンスと背景情報を提供します。