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

作成者: 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:[property name]構文を使用すると、さまざまな配置プロパティを設定したり、.sqlcmdvars ファイルで宣言されている SQLCMD 変数をオーバーライドしたりできます。
  • /dd+ (または /DeployToDatabase+) スイッチは、デプロイを作成してターゲット環境にデプロイすることを示します。 /dd-を指定するか、スイッチを省略すると、VSDBCMD によってデプロイ スクリプトが生成されますが、ターゲット環境にはデプロイされません。 このスイッチは多くの場合、混乱の原因であり、次のセクションで詳しく説明します。
  • /script (または /DeploymentScriptFile) スイッチは、配置スクリプトを生成する場所を指定します。 この値は、デプロイ プロセスには影響しません。

VSDBCMD の詳細については、「 コマンド ライン リファレンス for VSDBCMD.EXE (Deployment and Schema Import)」 および 「How to: Prepare a Database for Deployment From a Command Prompt by using VSDBCMD.EXE」を参照してください。

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

DeployToDatabase スイッチについて

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

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

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

<DeployToDatabase>False</DeployToDatabase>

このプロパティの値は、データベース プロジェクトのプロパティに従って設定されます。 [配置] アクションを [デプロイ スクリプトの作成 (.sql)] に設定した場合、値は False になります[配置] アクションを [Create a deployment script (.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を使用してエンタープライズ規模のデータベースデプロイをサポートする方法についても説明しました。

これが実際にどのように機能するかの詳細については、「 複数環境のデータベース配置のカスタマイズ」を参照してください。

もっと読む

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

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