如何删除数据层应用程序

您可以通过使用“删除数据层应用程序向导”或 Windows PowerShell 脚本,删除数据层应用程序。您可以指定是保留、分离还是删除关联数据库。

准备工作

在您删除某一数据层应用程序 (DAC) 实例时,您可以选择三个选项之一,这三个选项指定要对与该数据层应用程序相关联的数据库执行何种操作。所有这三个选项都删除 DAC 定义元数据。这些选项在如何处理与数据层应用程序相关联的数据库上有所不同。向导并不删除与 DAC 或数据库相关联的任何实例级别的对象,例如登录名。

选项

数据库操作

删除注册

关联的数据库保持不变。

分离数据库

关联的数据库被分离。数据库引擎的实例无法引用该数据库,但数据和日志文件保持不变。

删除数据库

关联的数据库被删除。数据和日志文件被删除。

在删除某一 DAC 后,没有自动的机制可以还原该 DAC 的定义元数据或数据库。您可以手动重新生成 DAC 实例的方式取决于删除选项。

选项

如何重新生成 DAC 实例

删除注册

从原来的数据库中注册一个 DAC。

分离数据库

通过使用 sp_attachdb 或 SQL Server Management Studio 重新附加数据库,然后从该数据库注册一个新的 DAC 实例。

删除数据库

从在删除 DAC 前生成的完整备份还原数据库,然后从该数据库注册一个新的 DAC 实例。

注意注意

通过从还原或重新连接的数据库注册 DAC 重新生成一个 DAC 实例时,将不会重新创建该原始 DAC 的某些部分,例如服务器选择策略。

权限

只能由 sysadminserveradmin 固定服务器角色的成员删除 DAC,或者由数据库所有者删除。名为 sa 的内置 SQL Server 系统管理员帐户也可以启动该向导。

使用 PowerShell 删除 DAC

创建包含以下代码的 PowerShell 脚本文件(例如 DeleteDAC.ps1)。

  1. 添加代码以便创建一个 SMO Server 对象,并且将该对象设置为包含您要删除的 DAC 的实例。该示例将服务器对象设置为本地计算机上的默认实例:

    ## 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)
    
  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})
    
  4. 添加代码以便指定要删除的 DAC。此示例指定 DAC 名称:

    ## Specify the DAC to delete.
    $dacName  = "MyApplication"
    
  5. 添加代码以便使用上面指定的信息运行 Uninstall 方法。根据适合的删除选项,使用以下三个代码集之一:

    • 删除 DAC 注册但保持数据库不变:

      ## 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)
      
    • 删除 DAC 注册并删除数据库:

      ## 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 的部分。