DAC パッケージを検証する方法

データ層アプリケーション (DAC) パッケージを運用環境に配置する前にパッケージの内容を確認し、DAC パッケージを使用して既存の DAC をアップグレードする前にアップグレード操作を検証することをお勧めします。これは、特に、外部で開発されたパッケージを配置する場合に当てはまります。

DAC の内容の表示

DAC パッケージの内容を表示する方法は 2 つあります。1 つは、Microsoft Visual Studio 2010 で DAC プロジェクトを作成して、そのプロジェクトに DAC パッケージをインポートする方法で、もう 1 つは、パッケージの内容をフォルダーにアンパックする方法です。

セキュリティに関する注意セキュリティに関する注意

ソースが不明または信頼されていない DAC パッケージは配置しないことをお勧めします。こうした DAC には、意図しない Transact-SQL コードを実行したり、スキーマを変更してエラーを発生させるような、悪意のあるコードが含まれている可能性があります。DAC のソースが不明または信頼されていない場合は、使用する前に、データベース エンジンの隔離されたテスト インスタンスに DAC を配置し、データベースに対して DBCC CHECKDB を実行してください。また、ストアド プロシージャやその他のユーザー定義コードなど、データベースのコードを確認してください。

DAC パッケージの内容を表示する 1 つの方法として、Microsoft Visual Studio 2010 で DAC プロジェクトを作成して、そのプロジェクトにパッケージをインポートする方法があります。この場合、ソリューション エクスプローラーを使用して、サーバーの選択ポリシーや配置前スクリプトと配置後スクリプトなど、DAC 内のすべてのファイルを開くことができます。スキーマ ビューを使用すると、スキーマ内のすべてのオブジェクトを確認できます。特に、関数やストアド プロシージャなどのオブジェクトのコードを確認します。

Visual Studio 2010 を使用できない場合は、DAC の内容をフォルダーにアンパックできます。この場合、Transact-SQL スクリプトは SQL Server Management Studio のデータベース エンジン クエリ エディターで、ファイルはメモ帳などのツールで開くことができます。手順については、「DAC パッケージをアンパックする方法」を参照してください。

ウィザードを使用したアップグレードの検証

DAC をアップグレードする前に、まず DAC の初期配置後にデータベースに対して行った変更内容を確認し、アップグレードによって行われる変更内容のスクリプトを確認することをお勧めします。データ層アプリケーションのアップグレード ウィザードを使用して、この情報を表示できます。[変更の検出] ページでデータベースの変更内容を表示し、[概要] ページでアップグレード操作を表示できます。アップグレードを実行しない場合は、[概要] ページの [キャンセル] をクリックします。詳細については、「データ層アプリケーションをアップグレードする方法」を参照してください。

PowerShell を使用したデータベースの変更内容の表示

DAC パッケージの新しいバージョンを使用して以前の DAC パッケージから配置された DAC をアップグレードする前に、アップグレードに影響する変更がデータベースに対して行われたかどうかを確認してください。

注意

このトピックの PowerShell の例では、DAC フレームワーク 1.1 Feature Pack で導入されたメソッドを使用します。Feature Pack は、この Web ページからダウンロードできます。

次のコードを含む PowerShell スクリプト ファイル (.ps1) を作成します。

  1. SMO サーバー オブジェクトを作成し、アップグレード対象の DAC が含まれているインスタンスにそのオブジェクトを設定するためのコードを追加します。この例では、サーバー オブジェクトをローカル コンピューター上の既定のインスタンスに設定しています。

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. ServerConnection オブジェクトを開いて同じインスタンスに接続するためのコードを追加します。

    ## Open a Common.ServerConnection to the same instance.
    $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
    $serverconnection.Connect()
    $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
    
    ## Open a Common.ServerConnection to the same instance.
    $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
    $serverconnection.Connect()
    $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
    
  3. 以前に配置した DAC を指定し、ChangeResults オブジェクトを作成してテキスト ファイルにパイプし、新しいオブジェクト、削除したオブジェクト、および変更したオブジェクトの簡単なレポートを生成するコードを追加します。

    ## Specify the DAC instance name.
    $dacName  = "MyApplication"
    
    ## Generate the change list and save to file.
    $dacChanges = $dacstore.GetDatabaseChanges($dacName) | Out-File -Filepath C:\DACScripts\MyApplicationChanges.txt
    
    ## Specify the DAC instance name.
    $dacName  = "MyApplication"
    
    ## Generate the change list and save to file.
    $dacChanges = $dacstore.GetDatabaseChanges($dacName) | Out-File -Filepath C:\DACScripts\MyApplicationChanges.txt
    

SQL Server PowerShell スナップインを読み込んだ PowerShell セッションから、または sqlps コマンド プロンプト ユーティリティを使用して、.ps1 ファイルを実行します。

PowerShell によるアップグレード スクリプトの生成

DAC パッケージの新しいバージョンを使用して以前の DAC パッケージから配置された DAC をアップグレードする前に、アップグレード中に実行される Transact-SQL ステートメントを含んだスクリプト ファイルを生成して、スクリプトを確認することができます。次のコードを含む PowerShell スクリプト ファイル (.ps1) を作成します。

  1. SMO サーバー オブジェクトを作成し、アップグレード対象の DAC が含まれているインスタンスにそのオブジェクトを設定するためのコードを追加します。この例では、サーバー オブジェクトをローカル コンピューター上の既定のインスタンスに設定しています。

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. ServerConnection オブジェクトを開いて同じインスタンスに接続するためのコードを追加します。

    ## Open a Common.ServerConnection to the same instance.
    $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
    $serverconnection.Connect()
    $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
    
    ## Open a Common.ServerConnection to the same instance.
    $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
    $serverconnection.Connect()
    $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
    
  3. DAC パッケージ ファイルを読み込むためのコードを追加します。この例では、MyApplication.dacpac ファイルを読み込んでいます。

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplication.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplication.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. 以前に配置した DAC を指定し、Transact-SQL スクリプトを作成して .sql ファイルにパイプするコードを追加します。新しい DAC パッケージを読み取るために使用したファイルストリームを閉じます。

    ## Specify the DAC instance name.
    $dacName  = "MyApplication"
    
    ## Generate the upgrade script and save to file.
    $dacstore.GetIncrementalUpgradeScript($dacName, $dacType) | Out-File -Filepath C:\DACScripts\MyApplicationUpgrade.sql
    
    ## Close the filestream to the new DAC package.
    $fileStream.Close()
    
    ## Specify the DAC instance name.
    $dacName  = "MyApplication"
    
    ## Generate the upgrade script and save to file.
    $dacstore.GetIncrementalUpgradeScript($dacName, $dacType) | Out-File -Filepath C:\DACScripts\MyApplicationUpgrade.sql
    
    ## Close the filestream to the new DAC package.
    $fileStream.Close()
    

SQL Server PowerShell スナップインを読み込んだ PowerShell セッションから、または sqlps コマンド プロンプト ユーティリティを使用して、.ps1 ファイルを実行します。

DAC の比較

DAC をアップグレードする前に、現在の DAC と新しい DAC に、データベースレベルおよびインスタンスレベルでオブジェクトにどんな相違があるか確認することもできます。現在の DAC パッケージのコピーがない場合は、現在のデータベースからパッケージを抽出できます。

Visual Studio 2010 で両方の DAC パッケージを DAC プロジェクトにインポートする場合は、スキーマ比較ツールを使用して 2 つの DAC 間の相違を分析できます。

Visual Studio 2010 を使用できない場合は、DAC を別々のフォルダーにアンパックします。その後、WinDiff ユーティリティなどの比較ツールを使用して、相違を分析できます。