DAC パッケージの検証
DAC パッケージを運用環境に配置する前にパッケージの内容を確認し、既存の DAC をアップグレードする前にアップグレード処理を検証するようにしてください。 これは、特に、外部で開発されたパッケージを配置する場合に当てはまります。
作業を開始する準備: 前提条件
DAC のアップグレード: DAC の内容の表示、データベースの変更の表示、アップグレード処理の表示、DAC の比較
前提条件
ソースが不明または信頼されていない DAC パッケージは配置しないことをお勧めします。 こうした DAC には、意図しない Transact-SQL コードを実行したり、スキーマを変更してエラーを発生させるような、悪意のあるコードが含まれている可能性があります。 DAC のソースが不明または信頼されていない場合は、使用する前に、データベース エンジンの隔離されたテスト インスタンスに DAC を配置し、データベースに対して DBCC CHECKDB (Transact-SQL) を実行してください。また、ストアド プロシージャやその他のユーザー定義コードなど、データベースのコードを確認してください。
[先頭に戻る]
DAC の内容の表示
データ層アプリケーション (DAC) パッケージの内容を表示する方法は 2 つあります。 1 つは、SQL Server 開発者ツールの DAC プロジェクトに DAC パッケージをインポートする方法です。 もう 1 つは、パッケージの内容をフォルダーにアンパックする方法です。
SQL Server 開発者ツールでの DAC の表示
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[SQL Server] プロジェクト テンプレートを選択し、[名前]、[場所]、および [ソリューション名] を指定します。
ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[プロパティ] をクリックします。
[プロジェクトの設定] タブの [出力の種類] セクションで [データ層アプリケーション (.dacpac File)] チェック ボックスをオンにし、プロパティ ダイアログ ボックスを閉じます。
ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[データ層アプリケーションのインポート] をクリックします。
ソリューション エクスプローラーを使用して、サーバーの選択ポリシーや配置前スクリプトと配置後スクリプトなど、DAC 内のすべてのファイルを開くことができます。
スキーマ ビューを使用すると、スキーマ内のすべてのオブジェクトを確認できます。特に、関数やストアド プロシージャなどのオブジェクトのコードを確認します。
[先頭に戻る]
フォルダーでの DAC の表示
「DAC パッケージのアンパック」での指示に従って、DAC パッケージをフォルダーにアンパックします。
Transact-SQL スクリプトの内容を表示するには、Management Studio のデータベース エンジン クエリ エディターでスクリプトを開きます。
テキスト ファイルの内容を表示するには、メモ帳などのツールを使用します。
[先頭に戻る]
データベースの変更の表示
現在のバージョンの DAC を実稼働環境に配置した後で、関連付けられているデータベースが直接変更され、その変更内容が新しいバージョンの DAC で定義されているスキーマと矛盾する場合があります。 新しいバージョンの DAC にアップグレードする前に、そのような変更がデータベースに対して行われたかどうかを確認してください。
ウィザードの使用によるデータベースの変更の表示
現在配置されている DAC と、新しいバージョンの DAC を含む DAC パッケージを指定して、データ層アプリケーションのアップグレード ウィザードを実行します。
[変更の検出] ページで、データベースに対する変更のレポートを確認します。
アップグレードを続行しない場合は、[キャンセル] をクリックします。
ウィザードの使用方法の詳細については、「データ層アプリケーションのアップグレード」を参照してください。
PowerShell の使用によるデータベースの変更の表示
SMO サーバー オブジェクトを作成し、表示する DAC を含んだインスタンスに設定します。
ServerConnection オブジェクトを開いて、同じインスタンスに接続します。
DAC の名前を変数で指定します。
GetDatabaseChanges() メソッドを使用して ChangeResults オブジェクトを取得し、そのオブジェクトをテキスト ファイルにパイプして、新しいオブジェクト、削除したオブジェクト、および変更したオブジェクトを含む簡単なレポートを生成します。
[先頭に戻る]
データベースの変更の表示の例 (PowerShell)
データベースの変更の表示の例 (PowerShell)
次の例は、MyApplicaiton という名前の配置された DAC で行われた、データベースのすべての変更のレポートを生成します。
## Set a SMO Server object to the default instance on the local computer.
CD SQLSERVER:\SQL\localhost\DEFAULT
$srv = get-item .
## 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)
## 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
[先頭に戻る]
アップグレードの処理の表示
DAC パッケージの新しいバージョンを使用して前の DAC パッケージから配置された DAC をアップグレードする前に、アップグレード中に実行される Transact-SQL ステートメントを含むレポートを生成して、ステートメントを確認することができます。
ウィザードの使用によるアップグレードの処理のレポート生成
現在配置されている DAC と、新しいバージョンの DAC を含む DAC パッケージを指定して、データ層アプリケーションのアップグレード ウィザードを実行します。
[概要] ページで、アップグレード処理のレポートを確認します。
アップグレードを続行しない場合は、[キャンセル] をクリックします。
ウィザードの使用方法の詳細については、「データ層アプリケーションのアップグレード」を参照してください。
[先頭に戻る]
PowerShell の使用によるアップグレードの処理のレポート生成
SMO サーバー オブジェクトを作成し、配置された DAC を含んだインスタンスに設定します。
ServerConnection オブジェクトを開いて、同じインスタンスに接続します。
System.IO.File を使用して、DAC パッケージ ファイルを読み込みます。
DAC の名前を変数で指定します。
GetIncrementalUpgradeScript() メソッドを使用して、アップグレードで実行される Transact-SQL ステートメントのリストを取得し、リストをテキスト ファイルにパイプします。
DAC パッケージ ファイルの読み取りに使用するファイル ストリームを閉じます。
[先頭に戻る]
アップグレード処理の表示の例 (PowerShell)
アップグレード処理の表示の例 (PowerShell)
次の例は、MyApplicaiton という名前の DAC を MyApplicationVNext.dacpac ファイルで定義されているスキーマにアップグレードするために実行される Transact-SQL ステートメントのレポートを生成します。
## Set a SMO Server object to the default instance on the local computer.
CD SQLSERVER:\SQL\localhost\DEFAULT
$srv = get-item .
## 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)
## Load the DAC package file.
$dacpacPath = "C:\MyDACs\MyApplicationVNext.dacpac"
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
## 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()
[先頭に戻る]
Dac の比較
DAC をアップグレードする前に、現在の DAC と新しい DAC に、データベースレベルおよびインスタンスレベルでオブジェクトにどんな相違があるか確認してください。 現在の DAC パッケージのコピーがない場合は、現在のデータベースからパッケージを抽出できます。
SQL Server 開発者ツールで両方の DAC パッケージを DAC プロジェクトにインポートする場合は、スキーマ比較ツールを使用して 2 つの DAC 間の相違を分析できます。
または、DAC を別々のフォルダーにアンパックします。 その後、WinDiff ユーティリティなどの比較ツールを使用して、相違を分析できます。
[先頭に戻る]