複数の環境のためにデータベース配置をカスタマイズする

作成者: Jason Lee

このトピックでは、配置プロセスの一環として、データベースのプロパティを特定のターゲット環境に合わせて調整する方法について説明します。

Note

このトピックでは、MSBuild.exe と VSDBCMD.exe を使用して Visual Studio 2010 データベース プロジェクトを配置することを前提としています。 この手法を選択する理由の詳細については、エンタープライズの Web 配置データベース プロジェクトの配置に関する記事を参照してください。

データベース プロジェクトを複数の宛先に配置するとき、多くの場合、各ターゲット環境のデータベース配置プロパティをカスタマイズする必要があります。 たとえば、テスト環境では通常、すべての配置でデータベースを再作成しますが、ステージングまたは運用環境では、データを保持するために増分更新を行う可能性が高くなります。

Visual Studio 2010 データベース プロジェクトでは、配置設定は配置構成 (.sqldeployment) ファイル内に含まれています。 このトピックでは、環境固有の配置構成ファイルを作成し、VSDBCMD パラメーターとして使用するものを指定する方法について説明します。

このトピックは、Fabrikam, Inc. という架空の会社のエンタープライズ配置要件を題材にしたチュートリアル シリーズの一部です。このシリーズでは、サンプル ソリューション (Contact Manager ソリューション) を使用して、現実的なレベルの複雑さを持った、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなどを含んだ Web アプリケーションを取り上げます。

これらのチュートリアルの核心である配置方法は、「プロジェクト ファイルについて」で説明した分割プロジェクト ファイルのアプローチを基にして、ビルド プロセスを 2 つのプロジェクト ファイル (すべての配置先環境に適用されるビルド命令を含んだファイルと、環境に特化したビルド設定や配置設定を含んだファイル) で制御するものになっています。 ビルド時には、環境に特化したプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド命令の完全なセットが形成されます。

タスクの概要

このトピックは次のことを前提としています。

ターゲット環境間でのデータベース配置プロパティの変更をサポートする配置システムを作成するには、次を行う必要があります。

  • ターゲット環境ごとに配置構成 (.sqldeployment) ファイルを作成します。
  • 配置構成ファイルをコマンド ライン スイッチとして指定する VSDBCMD コマンドを作成します。
  • ターゲット環境に適した VSDBCMD オプションになるように、Microsoft Build Engine (MSBuild) プロジェクト ファイルで VSDBCMD コマンドをパラメーター化します。

このトピックでは、これらの各手順を実行する方法について説明します。

環境固有の配置構成ファイルの作成

既定では、データベース プロジェクトには Database.sqldeployment という名前 の 1 つの配置構成ファイルが含まれています。 Visual Studio 2010 でこのファイルを開くと、使用可能なさまざまな配置オプションを確認できます。

  • [配置の比較照合順序]。 これにより、プロジェクトのデータベース照合順序 ("ソース" 照合順序) を使用するか、宛先サーバーのデータベース照合順序 ("ターゲット" 照合順序) を使用するかを選択できます。 ほとんどの場合、開発またはテスト環境に配置するときにソース照合順序を使用する必要があります。 ステージングまたは運用環境に配置する場合は、通常、相互運用性の問題を回避するために、ターゲット照合順序を変更せずにおきます。
  • [データベースのプロパティを配置する]。 これにより、Database.sqlsettings ファイルで定義されているデータベース プロパティを適用するかどうかを選択できます。 データベースを初めて配置するときは、データベースのプロパティを配置する必要があります。 既存のデータベースを更新する場合、プロパティは既に配置されているはずで、もう一度配置する必要はありません。
  • [データベースを常に再作成する]。 これにより、配置するたびにターゲット データベースを再作成するか、増分変更を行ってターゲット データベースをスキーマで最新の状態にするかを選択できます。 データベースを再作成すると、既存のデータベース内のデータが失われます。 そのため、通常、ステージングまたは運用環境への配置では、これを [false] に設定する必要があります。
  • [データ損失が発生する場合に増分配置をブロック]。 これにより、データベース スキーマの変更が原因でデータが失われる場合に、配置を停止するかどうかを選択できます。 これは通常、運用環境への配置の場合に [true] に設定して、重要なデータに介入して保護する機会を提供します。 [データベースを常に再作成する][false] に設定した場合、この設定は無効になります。
  • [シングル ユーザー モードでデプロイを実行する]。 これは通常、開発またはテスト環境では問題ではありません。 ただし、ステージングまたは運用環境への配置では、通常、これを [true] に設定する必要があります。 これにより、配置の進行中にユーザーがデータベースに変更を加えるのを防ぐことができます。
  • [配置前にデータベースをバックアップする]。 これは通常、データ損失に対する予防措置として、運用環境に配置する場合に [true] に設定します。 ステージング環境に配置するときに、ステージング データベースに大量のデータが含まれている場合は、[true] に設定することもできます。
  • [ターゲット データベース内にあるが、データベース プロジェクトに含まれていないオブジェクトの DROP ステートメントを生成する]。 ほとんどの場合、これはデータベースに増分変更を加える際に不可欠な部分です。 [データベースを常に再作成する][false] に設定した場合、この設定は無効になります。
  • [CLR 型の更新に ALTER ASSEMBLY ステートメントを使用しない]。 この設定によって、SQL Server で共通言語ランタイム (CLR) 型を新しいアセンブリ バージョンに更新する方法が決まります。 これは、ほとんどのシナリオで [false] に設定する必要があります。

次の表に、さまざまな宛先環境の一般的な配置設定を示します。 ただし、正確な要件によって設定が異なる場合があります。

開発者/テスト ステージング/統合 実稼働
[配置の比較照合順序] source 移行先 Target
[データベースのプロパティを配置する] True 初回のみ 初回のみ
[データベースを常に再作成する] True False False
[データ損失が発生する場合に増分配置をブロック] False 香辛料 True
[シングル ユーザー モードで配置スクリプトを実行する] False True
[配置前にデータベースをバックアップする] False 香辛料 True
[ターゲット データベース内にあるが、データベース プロジェクトに含まれていないオブジェクトの DROP ステートメントを生成する] False True
[CLR 型の更新に ALTER ASSEMBLY ステートメントを使用しない] False False False

複数の宛先へのデータベース プロジェクトの配置をサポートするには、ターゲット環境ごとに配置構成ファイルを作成する必要があります。

環境固有の構成ファイルを作成するには

  1. Visual Studio 2010 のソリューション エクスプローラー ウィンドウで、データベース プロジェクトを右クリックし、[プロパティ] を選択します。

  2. データベース プロジェクトのプロパティ ページで、[配置] タブの [配置構成ファイル] 行で、[新規] を選択します。

    On the database project properties page, on the Deploy tab, in the Deployment configuration file row, click New.

  3. [新しい配置構成ファイル] ダイアログ ボックスで、ファイルにわかりやすい名前 (TestEnvironment.sqldeployment など) を指定し、[保存] を選択します。

  4. [[Filename].sqldeployment] ページで、宛先環境の要件に合わせて配置プロパティを設定し、ファイルを保存します。

    On the Filename .sqldeployment page, set the deployment properties to match the requirements of your destination environment, and then save the file.

  5. 新しいファイルがデータベース プロジェクトの [プロパティ] フォルダーに追加されていることを確認してください。

    Notice that the new file is added to the Properties folder in your database project.

VSDBCMD での配置構成ファイルの指定

Visual Studio 2010 内でソリューション構成 (デバッグやリリースなど) を使用する場合は、配置構成ファイルを各構成に関連付けることができます。 特定の構成をビルドすると、ビルド プロセスによって、構成固有の配置構成ファイルを指す構成固有の配置マニフェスト ファイルが生成されます。 ただし、これらのチュートリアルで説明する配置手法の主な目的の 1 つは、Visual Studio 2010 とソリューション構成を使用せずに配置プロセスを制御できることです。 この手法では、ターゲットの配置環境に関係なく、ソリューションの構成は同じです。 データベースの配置を特定の宛先環境に合わせて調整するには、VSDBCMD コマンド ライン オプションを使用して配置構成ファイルを指定します。

VSDBCMD で配置構成ファイルを指定するには、p:/DeploymentConfigurationFile スイッチを使用し、ファイルへの完全なパスを指定します。 これにより、配置マニフェストによって識別される配置構成ファイルがオーバーライドされます。 たとえば、次の VSDBCMD コマンドを使用して、ContactManager データベースをテスト環境に配置できます。

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

Note

ビルド プロセスでは、ファイルを出力ディレクトリにコピーするときに、.sqldeployment ファイルの名前が変更される可能性があることに注意してください。

配置前または配置後の SQL スクリプトで SQL コマンド変数を使用する場合は、同様の手法を使用して、環境固有の .sqlcmdvars ファイルを配置に関連付けることができます。 この場合は、p:/SqlCommandVariablesFile スイッチを使用して .sqlcmdvars ファイルを識別します。

MSBuild プロジェクト ファイルからの VSDBCMD コマンドの実行

MSBuild ターゲット内の Exec タスクを使用して、MSBuild プロジェクト ファイルから VSDBCMD コマンドを呼び出すことができます。 最も単純な形式では、次のようになります。

<Target Name="DeployDatabase">     
   <PropertyGroup>      
      <_Cmd>
         Add your VSDBCMD command here
      </_Cmd>
   </PropertyGroup>
   <Exec Command="$(_Cmd)"/> 
 </Target>
  • 実際には、プロジェクト ファイルの読み取りと再利用を容易にするために、さまざまなコマンド ライン パラメーターを保存するプロパティを作成する必要があります。 これにより、ユーザーは環境固有のプロジェクト ファイルにプロパティ値を指定したり、MSBuild コマンド ラインから既定値をオーバーライドしたりしやすくなります。 「プロジェクト ファイルについて」で説明されている分割プロジェクト ファイルの手法を使用する場合は、それに応じて、ビルド命令とプロパティを 2 つのファイル間で分割する必要があります。
  • 配置構成ファイル名、データベース接続文字列、ターゲット データベース名などの環境固有の設定は、環境固有のプロジェクト ファイルに配置する必要があります。
  • VSDBCMD コマンドを実行する MSBuild ターゲットと、VSDBCMD 実行可能ファイルの場所などのユニバーサル プロパティは、ユニバーサル プロジェクト ファイル内に配置する必要があります。

.deploymanifest ファイルが作成され、使用できる状態になるように、VSDBCMD を呼び出す前にデータベース プロジェクトをビルドする必要もあります。 この手法の完全な例については、Contact Manager サンプル ソリューションに関する記事でプロジェクト ファイルについて説明する、「ビルド処理について理解する」を参照してください。

まとめ

このトピックでは、MSBuild と VSDBCMD を使用してデータベース プロジェクトを配置するときに、データベース プロパティをさまざまな宛先環境に合わせて調整する方法について説明しました。 この手法は、大規模なエンタープライズ規模のソリューションの一部としてデータベース プロジェクトを配置する必要がある場合に便利です。 多くの場合、これらのソリューションは、サンドボックス開発やテスト環境、ステージングまたは統合プラットフォーム、運用またはライブ環境など、複数の宛先に配置されます。 これらの各ターゲット環境には、通常、一意のデータベース配置プロパティのセットが必要です。

もっと読む

VSDBCMD.exe を使用したデータベース プロジェクトの配置の詳細については、データベース プロジェクトの配置に関する記事を参照してください。 カスタム MSBuild プロジェクト ファイルを使用して配置プロセスを制御する方法の詳細については、「プロジェクト ファイルについて」および「ビルド処理について理解する」を参照してください。

MSDN の次の記事では、データベースの配置に関する一般的なガイダンスを提供します。