データ層アプリケーションのアップグレード

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

データ層アプリケーションのアップグレード ウィザードまたは Windows PowerShell スクリプトを使用すると、現在配置されているデータ層アプリケーション (DAC) のスキーマとプロパティを、新しいバージョンの DAC で定義されているスキーマとプロパティに一致するように変更できます。

始める前に

DAC アップグレードは、既存のデータベースのスキーマを新しい DAC バージョンで定義されているスキーマに一致するように変更するインプレース アップグレードです。 新しい DAC バージョンは、DAC パッケージ ファイルで提供されます。 DAC パッケージの作成の詳細については、「 データ層アプリケーション」を参照してください。

DAC アップグレード オプションの選択

インプレース アップグレードには 4 つのアップグレード オプションがあります。

  • [データ損失を無視する] : True の場合、一部の操作によってデータ喪失が発生しても、アップグレードは続行されます。 Falseの場合、これらの操作によってアップグレードは終了します。 たとえば、現在のデータベースにあるテーブルが新しい DAC のスキーマにない場合は、 True が指定されていると、テーブルは削除されます。 既定値の設定は Trueです。

  • [変更時にブロック] : True の場合、データベース スキーマが前の DAC で定義したものと異なっていると、アップグレードは終了します。 Falseの場合、変更が検出されても、アップグレードは続行されます。 既定の設定は Falseです。

  • [失敗時にロールバック] : True の場合、アップグレードはトランザクションに含まれ、エラーが発生すると、ロールバックが試行されます。 Falseの場合、すべての変更が実行時にコミットされます。エラーが発生する場合は、データベースの前のバックアップの復元が必要になる場合があります。 既定の設定は Falseです。

  • [ポリシーの検証をスキップ] : True の場合、DAC サーバー選択ポリシーは評価されません。 Falseの場合は、ポリシーが評価され、検証エラーがあるとアップグレードは終了します。 既定の設定は Falseです。

制限事項と制約事項

DAC のアップグレードは、SQL Database または SQL Server 2005 (9.x) Service Pack 4 (SP4) 以降でのみ実行できます。

前提条件

アップグレードを開始する前に、データベースの完全バックアップを実行することをお勧めします。 アップグレード時にエラーが発生し、すべての変更をロールバックできない場合は、バックアップの復元が必要になる場合があります。

アップグレードを開始する前に、DAC パッケージとアップグレード処理を検証するには、いくつかの操作を行う必要があります。 これらのチェックの実行方法の詳細については、「 Validate a DAC Package」をご覧ください。

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

  • 最新バージョンの DAC が配置された後に現在のデータベースに変更が加えられている場合は、一部の変更によってアップグレードが正常に完了しなかったり、アップグレードによって一部の変更が削除されたりすることがあります。 まず、データベースで行った変更内容のレポートを生成して、確認してください。

  • アップグレードによって実行されるスキーマの変更内容のリストを生成し、問題がないかどうかを確認してください。

DAC パッケージ内のアプリケーション名は、現在配置されている DAC のアプリケーション名と一致している必要があります。 たとえば、現在の DAC のアプリケーション名が GeneralLedgerの場合、アップグレードできるのは、アプリケーション名が GeneralLedgerの DAC パッケージを使用する場合だけです。

すべての変更をログ記録するための十分なトランザクション ログ領域があることを確認します。

セキュリティ

セキュリティを強化するために、SQL Server 認証のログインは、パスワードなしで DAC パッケージに格納されます。 パッケージが配置またはアップグレードされると、ログインは、生成されたパスワードを伴う無効なログインとして作成されます。 ログインを有効にするには、ALTER ANY LOGIN 権限のあるログインを使ってログインし、ALTER LOGIN を使用してログインを有効にします。さらに、新しいパスワードを割り当て、そのパスワードを該当ユーザーに通知します。 Windows 認証ログインの場合、ログインのパスワードは SQL Server で管理されていないため、これは必要ありません。

アクセス許可

DAC をアップグレードできるのは、 sysadmin または serveradmin 固定サーバー ロールのメンバーか、 dbcreator 固定サーバー ロールに存在する ALTER ANY LOGIN 権限を持つログインのみです。 ログインは既存のデータベースの所有者である必要があります。 あらかじめ登録されたシステム管理者アカウント sa も DAC をアップグレードできます。

データ層アプリケーションのアップグレード ウィザードの使用

ウィザードを使用して、DAC をアップグレードするには

  1. オブジェクト エクスプローラーで、アップグレードする DAC を含むデータベースを右クリックします。

  2. [タスク] オプションを展開し、[データ層アプリケーションのアップグレード] オプションを選択します。

  3. ウィザードの各ダイアログの手順を実行します。

    1. [説明] ページ

    2. [パッケージの選択] ページ

    3. [変更の検出] ページ

    4. [オプション] ページ)

    5. [アップグレード計画の確認]

    6. [概要] ページ

    7. [DAC のアップグレード] ページ

[説明] ページ

このページでは、データ層アプリケーションをアップグレードする手順について説明します。

[次回からこのページを表示しない] : 今後このページを表示しないようにするには、このチェック ボックスをオンにします。

[次へ]> : [パッケージの選択] ページに進みます。

[キャンセル] : DAC をアップグレードせずにウィザードを終了します。

[パッケージの選択] ページ

このページでは、新しいバージョンのデータ層アプリケーションを含む DAC パッケージを指定します。 このページは、2 つの状態を遷移します。

DAC パッケージの選択

ページの初期状態では、配置する DAC パッケージを選択します。 DAC パッケージは有効な DAC パッケージ ファイルで、拡張子は .dacpac である必要があります。 DAC パッケージ内の DAC アプリケーション名は、現在の DAC のアプリケーション名と同じである必要があります。

[DAC パッケージ] : 新しいバージョンのデータ層アプリケーションを含む DAC パッケージのパスとファイル名を指定します。 ボックスの右にある [参照] をクリックして、DAC パッケージの場所に移動することができます。

[アプリケーション名] : DAC が作成されたとき、またはデータベースから抽出されたときに割り当てられた DAC アプリケーション名が表示される読み取り専用のボックスです。

[バージョン] : DAC が作成されたとき、またはデータベースから抽出されたときに割り当てられたバージョンが表示される読み取り専用のボックスです。

[説明] : DAC が作成されたとき、またはデータベースから抽出されたときに記述された説明が表示される読み取り専用のボックスです。

< [戻る] : 概要 ページに進みます。

[次へ]> : 選択したファイルが有効な DAC パッケージかどうかが確認され、進捗状況バーが表示されます。

[キャンセル] : DAC をアップグレードせずにウィザードを終了します。

DAC パッケージの検証

選択したファイルが有効な DAC パッケージかどうかが確認され、進捗状況バーが表示されます。 DAC パッケージが検証されると、ウィザードは [ポリシーの確認] ページに進みます。 ファイルが有効な DAC パッケージでない場合は、 [DAC パッケージの選択] ページが表示されたままになります。 別の有効な DAC パッケージを選択するか、ウィザードを取り消して新しい DAC パッケージを生成してください。

[DAC パッケージの内容を検証しています] : 検証プロセスの現在の状態を示す進捗状況バーです。

<[戻る] : [パッケージの選択] ページの初期状態に戻ります。

[次へ >]>: [パッケージの選択] ページの最終状態に進みます。

[キャンセル] : DAC を配置せずにウィザードを終了します。

[変更の検出] ページ

このページでは、 msdb 内の DAC メタデータに格納されているスキーマ定義とは異なるスキーマを作成する、データベースへの変更についてウィザードで確認した結果がレポートされます。 たとえば、最初に DAC が配置された後に、CREATE、ALTER または DROP ステートメントを使用してデータベースでオブジェクトを追加、変更、または削除した場合です。 このページでは、まず進捗状況バーが表示されてから、分析結果が報告されます。

[変更を検出しています。これには、数分間かかることがあります] : ウィザードでデータベースの現在のスキーマと DAC 定義のオブジェクトの間で相違点がチェックされるときに、進捗状況バーが表示されます。

[変更の検出結果] : 分析が完了したことを示し、結果が下に表示されます。

[データベース <DatabaseName> は変更されていません] : ウィザードで、データベースで定義されているオブジェクトと DAC 定義の対応するオブジェクトの間で相違点が検出されませんでした。

[データベース <DatabaseName> が変更されました] : ウィザードで、データベースのオブジェクトと DAC 定義の対応するオブジェクトの間で変更点が検出されました。

[変更が失われる可能性がありますが続行します] : 現在のデータベース内のオブジェクトやデータの一部が新しいデータベースに存在しない場合があることがわかっていて、アップグレードを続行することを指定します。 このボタンは、変更レポートの分析が完了し、新しいデータベースで必要なオブジェクトやデータを手動で転送するための手順がわかっている場合にのみクリックしてください。 わからない場合は、 [レポートの保存] を選択して変更レポートを保存し、 [キャンセル]を選択します。 レポートを分析して、アップグレードの完了後に必要なオブジェクトやデータを転送する方法を計画し、ウィザードを再起動します。

[レポートの保存] : ウィザードで検出された、データベースのオブジェクトと DAC 定義の対応するオブジェクトの間の変更点のレポートを保存する場合に、このボタンを選択します。 その後、レポートを確認し、アップグレードの完了後に、レポートに表示されたオブジェクトの一部またはすべてを新しいデータベースに組み込む操作を行う必要があるかどうかを判断できます。

<[戻る] : [DAC パッケージの選択] ページに戻ります。

[次へ]> : [オプション] ページに進みます。

[キャンセル] : DAC を配置せずにウィザードを終了します。

[オプション] ページ)

このページを使用すると、アップグレードの失敗時のロールバック オプションを選択できます。

[失敗時にロールバック] : このオプションを選択すると、アップグレードはトランザクションに含まれ、エラーが発生した場合はウィザードからロールバックを試行できます。 オプションの詳細については、「 DAC アップグレード オプションの選択」を参照してください。

[既定値に戻す] : オプションを既定値の false に戻します。

<[戻る] : [変更の検出] ページに戻ります。

[次へ]> : [アップグレード計画の確認] ページに進みます。

[キャンセル] : DAC を配置せずにウィザードを終了します。

[アップグレード計画の確認] ページ

このページでは、アップグレード プロセスで実行されるアクションを確認します。 アップグレードによって問題が発生しないことが確実である場合にのみ、アップグレードを続行してください。

[次のアクションを使用して DAC をアップグレードします。] : 表示された情報を確認し、実行されるアクションが正しいかどうかを確認します。 [アクション] 列には、アップグレードを行うために実行される Transact-SQL ステートメントなどのアクションが表示されます。 [データ損失] 列には、関連付けられたアクションによってデータが削除される可能性がある場合に、警告が表示されます。

[更新] : アクション リストを更新します。

[アクション レポートの保存] : アクション ウィンドウの内容を HTML ファイルに保存します。

[変更が失われる可能性がありますが続行します] : 現在のデータベース内のオブジェクトやデータの一部が新しいデータベースに存在しない場合があることがわかっていて、アップグレードを続行することを指定します。 このボタンは、変更レポートの分析が完了し、新しいデータベースで必要なオブジェクトやデータを手動で転送するための手順がわかっている場合にのみクリックしてください。 わからない場合は、 [アクション レポートの保存] を選択して変更レポートを保存し、 [スクリプトの保存] を選択して Transact-SQL スクリプトを保存してから、 [キャンセル]を選択します。 レポートとスクリプトを分析して、アップグレードの完了後に必要なオブジェクトやデータを転送する方法を計画し、ウィザードを再起動します。

[スクリプトの保存] : アップグレードを実行するために使用される Transact-SQL ステートメントをテキスト ファイルに保存します。

[既定値に戻す] : オプションを既定値の false に戻します。

<[戻る] : [変更の検出] ページに戻ります。

[次へ]> : [概要] ページに進みます。

[キャンセル] : DAC を配置せずにウィザードを終了します。

[概要] ページ

このページでは、DAC のアップグレード時にウィザードが行うアクションを最終的に確認します。

[次の設定を使用して DAC をアップグレードします。] : 表示された情報を確認し、実行されるアクションが正しいかどうかを確認します。 このウィンドウには、アップグレード対象として選択した DAC と、新しいバージョンの DAC が含まれている DAC パッケージが表示されます。 また、現在のデータベースのバージョンが現在の DAC 定義と同じかどうか、またはデータベースが変更されているかどうかも表示されます。

<[戻る] : [アップグレード計画の確認] ページに戻ります。

[次へ]> : DAC をデプロイし、[DAC のアップグレード] ページに結果を表示します。

[キャンセル] : DAC を配置せずにウィザードを終了します。

[DAC のアップグレード] ページ

このページには、アップグレード操作の成功または失敗が表示されます。

[DAC をアップグレードしています] : DAC をアップグレードするために行った各アクションの成功または失敗が表示されます。 内容を確認して、各アクションの成功または失敗を判断します。 エラーが発生したアクションには、 [結果] 列にリンクが表示されます。 そのアクションのエラーのレポートを表示するには、リンクをクリックします。

[レポートの保存] : アップグレード レポートを HTML ファイルに保存します。 ファイルには、アクションで発生したすべてのエラーを含む、各アクションのステータスが報告されます。 既定のフォルダーは、Windows アカウントの Documents フォルダーにある SQL Server Management Studio\DAC Packages フォルダーです。

[完了] : ウィザードを終了します。

PowerShell の使用

PowerShell スクリプトから IncrementalUpgrade() メソッドを使用して DAC をアップグレードするには

  1. SMO サーバー オブジェクトを作成し、アップグレードする DAC が含まれたインスタンスにそれを設定します。

  2. ServerConnection オブジェクトを開いて、同じインスタンスに接続します。

  3. System.IO.File を使用して、DAC パッケージ ファイルを読み込みます。

  4. add_DacActionStartedadd_DacActionFinished を使用して、DAC アップグレード イベントをサブスクライブします。

  5. DacUpgradeOptionsを設定します。

  6. IncrementalUpgrade メソッドを使用して DAC をアップグレードします。

  7. DAC パッケージ ファイルの読み取りに使用するファイル ストリームを閉じます。

例 (PowerShell)

次の例では、MyApplication2017.dacpac パッケージで新しい DAC バージョンを使用して、データベース エンジンの既定のインスタンスの MyApplication という名前の DAC をアップグレードします。

## Set an 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\MyApplication2017.dacpac"
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
  
## Subscribe to the DAC upgrade events.
$dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
$dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
  
## Upgrade the DAC and close the package.
$dacName  = "MyApplication"
  
## Set the upgrade options.
$upgradeProperties = New-Object Microsoft.SqlServer.Management.Dac.DacUpgradeOptions
$upgradeProperties.blockonchanges = $true
$upgradeProperties.ignoredataloss = $false
$upgradeProperties.rollbackonfailure = $true
$ upgradeProperties.skippolicyvalidation = $false
  
## Upgrade the DAC
$dacstore.IncrementalUpgrade($dacName, $dacType, $upgradeProperties)
## Close the package file.
$fileStream.Close()

関連項目