次の方法で共有


データ層アプリケーションを削除する方法

データ層アプリケーションの削除ウィザードまたは Windows PowerShell スクリプトを使用して、データ層アプリケーションを削除できます。関連付けられたデータベースの保持、デタッチ、または削除を指定することができます。

作業を開始する準備

データ層アプリケーション (DAC) インスタンスを削除する場合、3 つのオプションのいずれかを選択して、データ層アプリケーションに関連付けられたデータベースの処理を指定します。どのオプションを選択した場合も、DAC 定義のメタデータが削除されます。各オプションは、データ層アプリケーションに関連付けられたデータベースの処理方法が異なります。DAC またはデータベースに関連付けられたインスタンスレベルのオブジェクト (ログインなど) が、ウィザードによって削除されることはありません。

オプション

データベース アクション

登録の削除

関連付けられているデータベースは、そのまま保持されます。

データベースのデタッチ

関連付けられたデータベースはデタッチされます。データベース エンジンのインスタンスはデータベースを参照できませんが、データ ファイルとログ ファイルはそのまま保持されます。

データベースの削除

関連付けられたデータベースは削除されます。データ ファイルとログ ファイルも削除されます。

DAC を削除した後に DAC 定義のメタデータ、またはデータベースを自動的に復元するメカニズムはありません。DAC インスタンスを手動で再構築する方法は、削除オプションによって異なります。

オプション

DAC インスタンスの再構築方法

登録の削除

同じ場所に残っているデータベースから DAC を登録します。

データベースのデタッチ

sp_attachdb または SQL Server Management Studio を使用してデータベースを再アタッチして、データベースから新しい DAC インスタンスを登録します。

データベースの削除

DAC が削除される前に作成された完全バックアップからデータベースを復元して、データベースから新しい DAC インスタンスを登録します。

注意

復元または再アタッチされたデータベースから DAC を登録して DAC インスタンスを再構築しても、サーバーの選択ポリシーなど、元の DAC の一部は再作成されません。

権限

DAC を削除できるのは、sysadmin または serveradmin 固定サーバー ロールのメンバーか、データベース所有者のみです。あらかじめ登録された SQL Server システム管理者アカウント (sa) もこのウィザードを起動できます。

PowerShell による DAC の削除

次のコードを含む PowerShell スクリプト ファイル (DeleteDAC.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 削除イベントをサブスクライブするためのコードを追加します。

    ## Subscribe to the DAC delete events.
    $dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
    $dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
    
    ## Subscribe to the DAC delete events.
    $dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
    $dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
    
  4. 削除対象の DAC を指定するためのコードを追加します。次の例では、DAC 名を指定しています。

    ## Specify the DAC to delete.
    $dacName  = "MyApplication"
    
    ## Specify the DAC to delete.
    $dacName  = "MyApplication"
    
  5. 上で指定した情報を使用して Uninstall メソッドを実行するためのコードを追加します。どの削除オプションが適しているかによって、これらの 3 つのコードのいずれかを使用します。

    • DAC 登録を削除し、データベースをそのままにするには

      ## Only delete the DAC definition from msdb, the associated database remains active.
      $dacstore.Unmanage($dacName)
      
      ## Only delete the DAC definition from msdb, the associated database remains active.
      $dacstore.Unmanage($dacName)
      
    • DAC 登録を削除し、データベースをデタッチするには

      ## Delete the DAC definition from msdb and detach the associated database.
      $dacstore.Uninstall($dacName, [Microsoft.SqlServer.Management.Dac.DacUninstallMode]::DetachDatabase)
      
      ## Delete the DAC definition from msdb and detach the associated database.
      $dacstore.Uninstall($dacName, [Microsoft.SqlServer.Management.Dac.DacUninstallMode]::DetachDatabase)
      
    • DAC 登録を削除し、データベースを削除するには

      ## Delete the DAC definition from msdb and drop the associated database.
      ## $dacstore.Uninstall($dacName, [Microsoft.SqlServer.Management.Dac.DacUninstallMode]::DropDatabase)
      
      ## Delete the DAC definition from msdb and drop the associated database.
      ## $dacstore.Uninstall($dacName, [Microsoft.SqlServer.Management.Dac.DacUninstallMode]::DropDatabase)
      

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

データ層アプリケーションの削除ウィザードの使用

Management Studio では、オブジェクト エクスプローラーでデータ層アプリケーション ノードを右クリックし、[データ層アプリケーションの削除] をクリックしてウィザードを起動できます。

次の一覧にあるリンクをクリックすると、ウィザードのページの詳細に移動できます。

  • 説明

  • 方法の選択

  • 概要

  • データ層アプリケーションの削除

[説明] ページ

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

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

[次へ >] : [方法の選択] ページに進みます。

[キャンセル] : データ層アプリケーションもデータベースも削除することなくウィザードを終了します。

[方法の選択] ページ

このページでは、データ層アプリケーションを削除する方法を指定します。

[登録の削除] : データ層アプリケーションを定義しているメタデータを削除しますが、関連付けられたデータベースはそのまま保持されます。

[データベースのデタッチ] : データ層アプリケーションを定義しているメタデータを削除して、関連付けられたデータベースをデタッチします。

データベース エンジンのインスタンスはデータベースを参照できなくなりますが、データ ファイルとログ ファイルはそのまま保持されます。

[データベースの削除] : DAC を定義しているメタデータと、関連付けられたデータベースを削除します。

データベースのデータ ファイルとログ ファイルは、完全に削除されます。

[< 戻る] : [説明] ページに戻ります。

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

[キャンセル] : DAC もデータベースも削除することなくウィザードを終了します。

[概要] ページ

このページでは、DAC インスタンスの削除時にウィザードが行うアクションを確認します。

[選択内容の概要の確認] : ボックスに表示されている DAC、データベース、および削除方法を確認します。情報が正しい場合は、[次へ] または [完了] をクリックして DAC を削除します。DAC とデータベースの情報が正しくない場合は、[キャンセル] をクリックしてから正しい DAC を選択します。削除方法が正しくない場合は、[戻る] をクリックして [方法の選択] ページに戻り、別の方法を選択します。

[< 戻る] : [方法の選択] ページに戻り、別の削除方法を選択します。

[次へ >] : 前のページで選択した方法で DAC インスタンスを削除して、[データ層アプリケーションの削除] ページに進みます。

[キャンセル] : DAC インスタンスを削除することなくウィザードを終了します。

[データ層アプリケーションの削除] ページ

このページには、削除操作の成功または失敗が表示されます。

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

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

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

変更履歴

変更内容

PowerShell の使用についてのセクションを追加しました。