データベースのビルドおよび配置の概要

更新 : 2010 年 7 月

データベース プロジェクトからデータベース サーバーにデータベースを作成するか、または既存のデータベースに対する更新を発行するには、データベース プロジェクトをビルドしてから、そのサーバーに配置する必要があります。

ビルド ステップでは、配置に使用されるファイルにデータベース プロジェクトがコンパイルされます。 これらのファイルには、.dbschema ファイル、.deploymentmanifest ファイル、および配置前スクリプトと配置後スクリプトがあります。 データベース プロジェクトのビルド時には、ターゲット データベースとの比較は行われません。 データベース プロジェクトを配置するときに、ビルド アクションの出力がターゲット データベースと比較され (ターゲット データベースが存在する場合)、データベース プロジェクトに一致するようにターゲットを更新するのに必要なアクションが特定されます。 設定に応じて、それらの更新がターゲット データベースに配置されます。

また、配置スクリプト (.SQL ファイル) を生成し、そのスクリプトを変更してから、Transact-SQL エディターまたは別のツール (SQL Server Management Studio など) を使用してステージング サーバーまたは運用サーバーに配置することもできます。 クリーン ビルド アクションでは、スクリプト、配置マニフェスト、.dbschema ファイルなど、既存のビルド成果物がすべて削除されます。

配置のスクリプト

ターゲットを作成または更新するスクリプトの前後に実行するスクリプトを作成できます。 使用できるのは 1 つの配置前スクリプトと 1 つの配置後スクリプトのみですが、これらのスクリプト内から他のスクリプトを含めることもできます。 詳細については、「データベース スクリプトの作成および変更」を参照してください。

配置マニフェスト

データベース プロジェクトのビルド時に、配置マニフェストが生成されます。 このマニフェストには、データベース プロジェクト ファイル (.dbproj) がなくても配置できるようにするために必要な、プロジェクト レベルの構成情報がすべて含まれています。

配置マニフェスト ファイル (.deploymanifest) は、MSBuild プロジェクト ファイルとよく似た構造の XML ファイルです。 .deploymanifest ファイルは、データベース プロジェクト フォルダー内の sql\Configuration フォルダーに作成されます。Configuration は、デバッグやリリースなどのビルド構成です。

次の例は、Empty2008DbProj という名前の空の SQL Server 2008 データベース プロジェクト用の .deploymanifest ファイルを示しています。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TargetConnectionString>Data Source=stevenpoauth\sql2k8;Integrated Security=True;Pooling=False</TargetConnectionString>
    <TargetDatabase>Empty2008DbProj</TargetDatabase>
    <DeployToDatabase>True</DeployToDatabase>
    <DeployToScript>True</DeployToScript>
    <SourceModel>Empty2008DbProj.dbschema</SourceModel>
    <DeployScriptFileName>Empty2008DbProj.sql</DeployScriptFileName>
    <DeploymentConfigurationFile>Empty2008DbProj_Database.sqldeployment</DeploymentConfigurationFile>
  </PropertyGroup>
  <PropertyGroup>
    <SqlCommandVariablesFile>Empty2008DbProj_Database.sqlcmdvars</SqlCommandVariablesFile>
  </PropertyGroup>
  <ItemGroup>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PostDeployment.sql">
      <__PostdeploymentMetadata>
      </__PostdeploymentMetadata>
    </DeploymentExtensionConfiguration>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PreDeployment.sql">
      <__PredeploymentMetadata>
      </__PredeploymentMetadata>
    </DeploymentExtensionConfiguration>
  </ItemGroup>
  <ItemGroup>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPlanOrderModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPrePostDeploymentModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Refactoring.SqlRefactoringDeploymentContributor">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
  </ItemGroup>
</Project>

配置マニフェスト ファイルには、配置時に使用される既定の構成を定義する、1 つ以上の PropertyGroup ノードが含まれています。 配置マニフェスト ファイルには、DeploymentExtensionConfiguration ノードと Reference ノードを格納する ItemGroup ノードも含まれています。

DeploymentExtensionConfiguration ノードは、配置時に配置拡張に渡される構成ファイルを定義します。 これらの構成ファイルには、配置前スクリプトと配置後スクリプトや、配置時に意図を保持するのに使用されるリファクタリング ログが含まれています。

Reference ノードは、プロジェクトによって参照され、プロジェクトのビルド時に出力フォルダーにコピーされる、すべての成果物を定義します。 データベースのモデルが正しく再作成されるように、参照されるファイルは配置時に処理されます。

配置スクリプトのトランザクション

配置スクリプトでのデータベースの変更の大部分は、1 つのトランザクション内で発生します。これは、配置に失敗した場合に、変更内容をロールバックできるようにするためです。 ただし、次のオブジェクトは、配置トランザクション外で作成、更新、または削除されます。

SQL Server バージョン

配置トランザクション外のオブジェクト

SQL Server 2008 

サーバーの役割メンバーシップ

エンドポイント

フルテキスト インデックス

フルテキスト カタログ

リンク サーバー

リンク サーバーのログイン

イベント セッション

サーバー監査の仕様

フルテキスト ストップ リスト

SQL Server 2005

サーバーの役割メンバーシップ

エンドポイント

フルテキスト インデックス

フルテキスト カタログ

リンク サーバー

リンク サーバーのログイン

一般的に、これらのオブジェクトはシステム ストアド プロシージャを使用して維持されるため、配置トランザクション外に置かれる必要があります。

既存データベースへの変更の配置に関する考慮事項

既存のデータベースへの変更を配置するときに、一部の変更によってデータが失われる可能性があります。 変更によってテーブルに含まれるデータが損失する可能性がある場合、[データ損失が発生する場合に増分配置をブロック] チェック ボックスをオンにしておくと、配置が取り消されます。 既定ではこのチェック ボックスがオンになっていますが、プロジェクトのプロパティ ウィンドウでこのチェック ボックスを確認できます。 詳細については、「データベース プロジェクト設定の概要」を参照してください。

データ損失が発生する変更の種類としては、テーブルを削除して再作成した場合、列のサイズを変更した場合 (char(100) から char(50)、または nchar(100) から char(100))、文字型列の照合順序を変更した場合などが挙げられます。

注意

データベース オブジェクトの名前変更や、別のスキーマへのデータベース オブジェクトの移動にリファクタリングを使用するときには、リファクタリング ログ ファイルにそのアクションが記録されます。 このログ ファイルに記録された情報は、配置時に変更の意図を保持するのに役立ちます。 たとえば、テーブルの名前を変更する場合、そのテーブルが削除されてから新しい名前で再作成されるため、データを損失する可能性があります。 リファクタリング ログ ファイルを使用すると、配置スクリプトがテーブルの名前を変更できるので、意図やデータが維持されます。

失敗した配置の回復

配置スクリプトのトランザクション セクションの外側で配置が失敗した場合、データが失われる可能性があります。 このため、共有データベースをシングルユーザー モードにし、バックアップしてから配置することを強くお勧めします。

除外されたファイル

データベース プロジェクトからファイルを除外すると、そのファイル内で定義されているデータベース オブジェクトは、データベース プロジェクトのビルド時に作成される .dbschema ファイルには含まれません。 このようなオブジェクトは、.dbschema ファイルに含まれないので配置されません。 まだ 1 つ以上のオブジェクトの作業を行っているときに、既に完了した作業を配置したい場合は、ファイルをビルドから除外することで、準備ができているオブジェクトのみが .dbschema ファイルに含まれ、ターゲット データベースに配置されます。 配置の準備ができたときにファイルを追加することで、既存のオブジェクト (プロジェクトで変更されていない場合) を変更しなくても、配置によりデータベースが新しいオブジェクトに更新されます。 詳細については、「方法 : データベース プロジェクトからファイルを除外する」を参照してください。

重要

ターゲット データベース内に存在するデータベース プロジェクトからオブジェクトを除外し、その後でそのプロジェクトを配置すると、データが失われる可能性があります。 配置構成で [ターゲット データベースにあってデータベース プロジェクトにないオブジェクトに対して DROP ステートメントを生成する] チェック ボックスがオンになっている場合は、これらのオブジェクトがターゲット データベースから削除されます。

サーバー プロジェクト

サーバー プロジェクトには、マスター データベース内のオブジェクトの定義が含まれています。 サーバー プロジェクトのターゲット データベースの名前は、常に "マスター" になります。 サーバー設定ごとに、サーバー プロジェクトの配置時にその設定の値を検証するかどうかを指定できます。 検証しない設定は無視されます。 サーバー設定の値が、検証する設定の値と一致しない場合は、配置が失敗し、エラー メッセージが表示されます。

コマンド ライン ビルド

ビルド、配置、クリーンなどのアクションは、Visual Studio のユーザー インターフェイス内から実行する以外に、MSBuild.exe を使用してコマンド プロンプトで実行することもできます。 ターゲットのビルド アクションとして、Build、Deploy、Rebuild、および Clean を指定できます。 既定では、ビルドおよび配置プロセスでは、データベース プロジェクト (.dbproj または .dbproj.user ファイル) 内で定義されているプロジェクト プロパティが使用されます。 ただし、これらのプロパティは、コマンド プロンプトまたは応答ファイル内からオーバーライドできます。

重要

コマンド ライン ビルドを実行する前に、Visual Studio を閉じる必要があります。 Visual Studio の実行中にコマンド ライン ビルドを実行すると、いくつかのエラーがキャッチされない可能性があります。

VSDBCMD.EXE を使用して、コマンド プロンプトから .dbschema ファイルを配置することもできます。 Visual Studio がインストールされていないコンピューターでは、VSDBCMD を使用できます。 詳細については、「方法: VSDBCMD.EXE を使用してコマンド プロンプトからデータベースの配置を準備する」を参照してください。 稼動環境に配置するときは、VSDBCMD を使用できます。または、配置スクリプトを生成し、Transact-SQL エディターまたは別のツール (SQL Server Management Studio など) を使用してそのスクリプトを手動で配置することもできます。

コマンド ラインの構文

次の例に示す構文を使用することで、コマンド プロンプトでデータベース プロジェクトをビルドできます。

  • MSBuild /target:Build MySolutionName.sln
    この例では、ソリューションに含まれるプロジェクト ファイルで指定されたプロジェクト プロパティを使用して、MySolutionName.sln という名前のソリューションでビルド アクションが実行されます。 ソリューションに複数のデータベース プロジェクトが含まれる場合、ソリューションに含まれるその他すべてのものと共にビルドされます。 特定のデータベース プロジェクトをビルドすることもできます。 Build ターゲットには、生成されたビルド スクリプトの配置前スクリプトおよび配置後スクリプトがインクルードされます。

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" MyProjectName.dbproj
    この例は、ターゲット データベース名と接続文字列をオーバーライドしながら、データベース プロジェクトを配置する方法を示しています。

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:DeploymentConfiguration=DeployPath\AlternateDeploymentConfiguration.deploymentconfig /p:SqlCommandVarsFile=VarPath\AlternateVariables.sqlcmdvars /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" MyProjectName.dbproj
    この例は、別のターゲット データベースと接続文字列を指定し、配置構成と配置変数をオーバーライドしながら、データベース プロジェクトを配置する方法を示しています。

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:BuildScriptName=MyScriptName.sql /p:outdir=BuildScriptPath /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=InstanceName\DatabaseName;Integrated Security=True;Pooling=False" ProjectPath\MyProjectName.dbproj
    この例は、ビルドが発生するコンピューターとは別のコンピューターからデータベースを配置する方法を示しています。 たとえば、毎晩ビルド スクリプトを作成する中央のビルド コンピューターがある場合に、この構文を使用できます。 ビルド スクリプトの名前、ビルド スクリプトへのパス (outdir)、ターゲット データベース、およびデータベース プロジェクトのパスとファイル名を指定する必要があります。

  • MSBuild @dbbuild.arf MyProjectName.dbproj
    この例は、応答ファイルを使用してコマンド ライン引数を指定する方法を示しています。 ファイル dbbuild.arf には、プロジェクト プロパティをオーバーライドする引数など、MSBuild 用の有効な引数を含めることができます。

  • MSBuild /target:Rebuild MyProjectName.dbproj
    この例では、前回ビルドされてから変更されていない場合でも、指定したプロジェクトまたはソリューションがリビルドされます。

  • MSBuild /target:Clean MyProjectName.dbproj
    この例は、既存のビルド スクリプトを削除する方法を示しています。 ほとんどの場合は、別のビルドまたは配置アクションと共にこのアクションを実行します。

注意

/target: を /t:、/property: を /p: と省略できます。

詳細については、「MSBuild コマンド ライン リファレンス」を参照してください。

応答ファイルの詳細については、Microsoft Web サイトの「MSBuild 応答ファイル」を参照してください。

注意

MSBuild.exe を実行するには、Visual Studio のコマンド プロンプトを使用するか、バッチ ファイル vsvars32.bat を実行する必要があります。 このバッチ ファイルは、環境変数 %VS80COMNTOOLS% で指定されるフォルダー内にあります。

ビルド コンピューターに必要なソフトウェア

Visual Studio Team Foundation Server 2010 は、ビルド、配置、単体テスト、およびデータベース プロジェクトのデータの生成をネイティブにサポートしています。 ビルド コンピューターに Visual Studio をインストールする必要はありません。 ビルド コンピューターで Visual Studio Team Foundation Server 2010 を使用していない場合は、ビルド コンピューターに Visual Studio 2010 Professional、Visual Studio 2010 Premium、または Visual Studio 2010 Ultimate をインストールする必要があります。

また、データベースをデータベース単体テストの一部としてではなく Team Foundation ビルド から配置するには、追加のインストールを実行する必要があります。 %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy フォルダーとその内容をサブフォルダーも含めて Visual Studio 2010 インストールからビルド コンピューターにコピーする必要があります。 詳細については、「方法 : Team Foundation ビルドを使用して変更を配置する」および「チュートリアル: カスタム ワークフローの定義と Team Foundation ビルドからのデータベースの配置」を参照してください。

プロジェクトのプロパティ

データベース プロジェクトとサーバー プロジェクトの一部のプロパティは、それらのプロジェクトのビルドおよび配置に影響します。 これらのプロパティは、プロジェクト ファイルおよび .user ファイル内に格納されますが、コマンド プロンプトまたは応答ファイルでオーバーライドできます。 詳細については、「方法: データベース プロジェクトおよびサーバー プロジェクトのビルド設定を構成する」および「方法: データベースおよびサーバー プロジェクトの配置設定を構成する」を参照してください。

配置マニフェストのプロパティのオーバーライド

コマンド ラインから配置する際に、配置構成、接続文字列、SQLCMD 変数など、既定の配置プロパティをオーバーライドできます。 .dbschema ファイルを複数の環境に配置する場合は、これを実行すると便利です。

たとえば、EnterpriseDB.dbproj で定義されたスキーマを開発環境、テスト環境、および稼動環境に配置する場合は、次のコマンド ラインを使用できます。

配置環境

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Development.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Development.sqlcmdvars /p:TargetConnectionString="Data Source=DEV\sql2008;Integrated Security=true;Pooling=false"

テスト環境

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\UserTest.sqldeployment /p:SqlCommandVariablesFile=sql\debug\UserTest.sqlcmdvars /p:TargetConnectionString="Data Source=USERTEST\sql2008;Integrated Security=true;Pooling=false"

稼動環境

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Production.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Production.sqlcmdvars /p:TargetConnectionString="Data Source=PRODUCTION\sql2008;Integrated Security=true;Pooling=false"

各環境で、それぞれ異なる配置構成ファイル、SQLCMD 変数ファイル、および接続文字列を提供します。

参照

処理手順

方法: コンパイル済みスキーマ (.dbschema) ファイルを生成するためにデータベース プロジェクトをビルドする

方法 : 新規または既存のデータベースに変更を配置する

チュートリアル : バージョン管理されたデータベースの新規作成と配置

チュートリアル: 既存のバージョン管理されたデータベースへの変更の配置

概念

データベースのビルドおよび分離開発環境への配置

データベースのビルドとステージング環境または稼動環境への配置

履歴の変更

日付

履歴

理由

2010 年 7 月

MSDN フォーラムで報告されている混乱に対処するために、ビルド コンピューターに必要なソフトウェアを明記しました。

カスタマー フィードバック