如何将数据库注册为 DAC

使用**“注册数据层应用程序向导”**或 Windows PowerShell 脚本可以生成描述现有数据库中对象的数据层应用程序 (DAC) 定义,并在 msdb 系统数据库(SQL Azure 中的 master 数据库)中注册 DAC 定义。

准备工作

您可以从 SQL Azure 数据库 或者 SQL Server 2005 Service Pack 4 (SP4) 或更高版本中的数据库注册 DAC。 对于数据库引擎的托管实例,当下次将实用工具收集组从该实例发送到实用工具控制点时,已注册的 DAC 将合并到 SQL Server 实用工具中。 然后,该 DAC 将出现 Management Studio 中的**“实用工具资源管理器”“已部署的数据层应用程序”节点下,并且在“已部署的数据层应用程序”**详细信息页中报告。

注意  在数据库引擎的实例中注册 DAC 至少要求 ALTER ANY LOGIN 和数据库作用域 VIEW DEFINITION 权限,对 sys.sql_expression_dependencies 具有 SELECT 权限,且具备 dbcreator 固定服务器角色的成员身份。 sysadmin 固定服务器角色的成员或名为 sa 的内置 SQL Server 系统管理员帐户也可以注册 DAC。 注册在 SQL Azure 中不包含登录名的 DAC 要求 dbmanager 或 serveradmin 角色的成员身份。 注册在 SQL Azure 中包含登录名的 DAC 要求 loginmanager 或 serveradmin 角色的成员身份。

限制

只能在 SQL Azure、SQL Server 2005 SP4 或更高版本上执行 DAC 注册。 如果已为数据库注册了 DAC,则无法执行 DAC 注册。 例如,如果数据库是通过部署 DAC 创建的,则无法运行**“注册数据层应用程序向导”**。

如果数据库包含 DAC 中不支持的对象,您将无法注册 DAC。 有关 DAC 中支持的对象类型的详细信息,请参阅对 SQL Server 对象和版本的 DAC 支持

使用 PowerShell 注册 DAC

创建包含以下代码的 RegisterDAC.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. 添加代码以便指定该数据库。 此示例指定一个名为 MyDB 的数据库:

    ## Specify the database to register as a DAC.
    $dbname = "MyDB"
    
  3. 添加代码以便指定 DAC 的元数据。 此示例指定 DAC 名称、版本和说明:

    ## Specify the DAC metadata.
    $applicationname = "MyApplication"
    $version = "1.0.0.0"
    $description = "This DAC defines the database used by my application."
    
  4. 添加代码以便使用上面指定的信息运行 Register 方法。

    ## Register the DAC.
    $registerunit = New-Object Microsoft.SqlServer.Management.Dac.DacExtractionUnit($srv, $dbname, $applicationname, $version)
    $registerunit.Description = $description
    $registerunit.Register()
    

从您已加载了 SQL Server PowerShell 管理单元的 PowerShell 会话或者通过使用 sqlps 命令提示实用工具,运行 RegisterDAC.ps1。

使用“注册数据层应用程序向导”

在 Management Studio 中,可通过执行以下操作启动“注册数据层应用程序向导”:

  • 在**“对象资源管理器”中右键单击某一数据库节点,指向“任务”,然后选择“注册数据层应用程序…”**。

向导创建 DAC 定义,以定义由您在**“对象资源管理器”**层次结构中选择的节点所表示的数据库中的对象。 DAC 定义存储在 msdb 系统数据库(SQL Azure 中的 master 数据库)中。 DAC 说明与数据库的组合构成一个 DAC 实例。当将下一个实用工具收集组传输到实用工具控制点时,有关此 DAC 实例的信息将上载到 SQL Server 实用工具。 可以在实用工具资源管理器的“已部署的数据层应用程序”节点中查看该信息。

单击下面列表中的链接可以导航到向导中相关页的详细信息:

  • “简介”页

  • “设置属性”页

  • “验证和摘要”页

  • “注册 DAC”页

“简介”页

此页描述用于注册数据层应用程序的各个步骤。

不再显示此页。 - 选中该复选框可以停止在将来显示此页。

下一步 > - 进入**“设置属性”**页。

取消 - 终止向导而不注册 DAC。

“设置属性”页

使用此页可指定 DAC 级别的属性,如应用程序名称和版本。

应用程序名称。 - 指定用于标识 DAC 定义的名称的字符串,该字段用数据库名称进行填充。

版本。 - 标识 DAC 版本的数值。 该 DAC 版本用于 Visual Studio 中,以便标识开发人员正在处理的 DAC 的版本。 在部署 DAC 时,该版本存储于 msdb 数据库中,并且以后可以在 SQL Server Management Studio 的**“数据层应用程序”**节点下查看。

说明。 - 可选。 用来说明 DAC 用途的文本。 在部署 DAC 时,该说明存储于 msdb 数据库中,并且以后可以在 Management Studio 的**“数据层应用程序”**节点下查看。

< 上一步 - 返回到**“简介”**页。

下一步 > - 验证 DAC 是否可从数据库中的对象生成,并在**“验证和摘要”**页中显示结果。

取消 - 终止向导而不注册 DAC。

“验证和摘要”页

使用此页可以查看在注册 DAC 时向导将执行的操作。 当该页验证可从数据库的对象中生成 DAC 时,它将经历三个状态。

检索对象

检索数据库和服务器对象。 - 当该向导从数据库和数据库引擎实例中检索所有所需对象时,将显示一个进度栏。

< 上一步 - 返回到**“设置属性”**页以便更改条目。

下一步 > - 注册 DAC 并在**“注册 DAC”**页中显示结果。

取消 - 终止向导而不注册 DAC。

验证对象

检查 SchemaName**.ObjectName。** - 当该向导验证所检索对象的依赖项并验证这些对象都是用于 DAC 的有效对象时,将显示一个进度栏。 SchemaName**.**ObjectName 确定当前正在验证的对象。

< 上一步 - 返回到**“设置属性”**页以便更改条目。

下一步 > - 注册 DAC 并在**“注册 DAC”**页中显示结果。

取消 - 终止向导而不注册 DAC。

摘要

将使用以下设置注册 DAC。 - 显示将包含在 DAC 中的属性和对象的报表。

保存报表 - 选择此按钮可以将验证报表的副本保存到某一 HTML 文件。 默认文件夹是您的 Windows 帐户的 Documents 文件夹中的 SQL Server Management Studio\DAC Packages 文件夹。

< 上一步 - 返回到**“设置属性”**页以便更改条目。

下一步 > - 注册 DAC 并在**“注册 DAC”**页中显示结果。

取消 - 终止向导而不注册 DAC。

“注册 DAC”页

此页报告注册成功与否。

注册 DAC - 报告为注册 DAC 而执行的每个操作成功与否。 查看信息以便确定每个操作是成功还是失败。 遇到了错误的任何操作都将在**“结果”**列中具有一个链接。 选择该链接可以查看针对该操作的错误报告。

保存报表 - 选择此按钮可以将注册报表保存到某一 HTML 文件。 该文件报告每个操作的状态,并且包括任何操作生成的所有错误。 默认文件夹是您的 Windows 帐户的 Documents 文件夹中的 SQL Server Management Studio\DAC Packages 文件夹。 文件名采用 <DACPackageName>_RegisterDACReport_yyyymmdd.html 的格式。其中,<DACPackageName> 是正部署的包的名称,yyyy = 当前年份,mm = 当前月份,dd = 当前日期。

完成 - 终止向导。

更改历史记录

更新的内容

添加了有关使用 PowerShell 的部分。