了解数据层应用程序

数据层应用程序 (DAC) 是一个包含由应用程序使用的所有数据库和实例对象的实体。DAC 提供一个单元来创作、部署和管理数据层对象,而无需分别对其进行管理。DAC 使数据层开发与关联应用程序代码的开发能够更紧密地集成。它还为管理员提供其系统中资源使用情况的应用程序级别视图。

使用数据层应用程序

通过以下过程使用 DAC:

  • 首先,创建一个 DAC 类型或 DAC 定义,以指定由关联应用程序使用的对象。然后,将 DAC 定义内置于 DAC 包中,该包是用于部署或升级 DAC 的文件。创建 DAC 定义和包的方法有两种:

    • 在 Microsoft Visual Studio 2010 中打开一个数据层应用程序项目,并指定组成该 DAC 的对象。生成 DAC 项目后,Visual Studio 将编译 DAC 定义并将其放置于 DAC 包中。

    • 可从现有数据库中提取 DAC 定义,然后使用“提取数据层应用程序向导”创建一个 DAC 包。

    有关详细信息,请参阅实现数据层应用程序

  • 使用“部署数据层应用程序向导”将 DAC 包部署到数据库引擎实例。DAC 包的部署通常与用于应用程序可执行文件的部署相协调。部署创建一个 DAC 实例,该实例具有两个主要部分:

    • DAC 定义存储在 msdb 系统数据库(SQL Azure 中的 master 数据库)中。

    • 创建一个用户数据库,并用在 DAC 定义中指定的对象填充此数据库。

    如果数据库引擎实例是 SQL Server 实用工具中的托管实例,则将该 DAC 作为已部署的 DAC 上载到实用工具控制点。

    有关详细信息,请参阅部署数据层应用程序

  • 应用程序将连接到与 DAC 关联的数据库。通过使用已确定的过程,管理员可以监视和管理与 DAC 关联的数据库。但是,管理员可从 DAC 本身获取其他信息:

    • SQL Server Management Studio (SSMS) 的**“实用工具资源管理器”“已部署的数据层应用程序”**节点提供了一个以应用程序为中心的资源使用情况报告,使管理员可更快地评估其数据层应用程序实例的运行状况。

    • Management Studio 的**“对象资源管理器”“数据层应用程序”**节点报告每个 DAC 实例的属性。

  • DAC 简化了支持从数据库的一个版本升级到另一个版本的过程。使用 Transact-SQL 脚本部署数据库时,在首次部署后,数据库开发人员必须为该数据库的每个版本生成两组脚本。一组脚本可用于将现有数据库升级到新版本,另一组脚本可用于安装新的数据库。使用 DAC 时,数据库开发人员只需生成一个 DAC 包,以描述该应用程序的新版本使用的架构。可以将该包与“部署数据层应用程序向导”一起使用,以安装一个新的 DAC 实例。可以将同一个包与“升级数据层应用程序向导”一起使用来升级现有 DAC 实例。“升级数据层应用程序向导”将这两个架构进行比较,并动态执行将现有 DAC 实例转换到 DAC 新版本所需的操作。

    有关详细信息,请参阅升级数据层应用程序

  • 可以使用“删除数据层应用程序向导”将 DAC 从数据库引擎实例中删除。

有关生成和使用 DAC 的详细信息,请参阅数据层应用程序教程

数据层应用程序元素

DAC 定义包含以下元素:

  • 定义 DAC 特征的 DAC 属性。例如,每个 DAC 都具有一个应用程序名称属性和一个版本属性,它们的值通常与关联的应用程序的名称和版本号相关。

  • 该应用程序使用的所有数据库对象(如架构、表、视图和存储过程)的定义。使用 SQL Server 2008 R2 或 Visual Studio 2010 创建的 DAC 并不支持所有可用的 SQL Server 对象。有关详细信息,请参阅对 SQL Server 对象和版本的 DAC 支持

  • 与数据库对象关联并由应用程序使用的实例级对象(如登录名)的定义。

  • 服务器选择策略,用于定义数据库引擎实例承载该 DAC 必须具有的先决条件。策略是使用“服务器选择”方面定义的,可以评估诸如实例的版本和默认排序规则等此类条件。

  • 在 Visual Studio 中创作 DAC 时可嵌入 DAC 定义中的文件和脚本。例如,应用程序文档、指定如何创建有意义的测试数据的数据生成计划或预部署脚本和后期部署脚本。

数据层应用程序项目

通常,DAC 由数据库开发人员使用数据层应用程序项目在 Visual Studio 2010 中开发。数据库开发人员定义开发的 DAC 所支持的应用程序所需的数据层对象。当 DAC 可供数据库开发人员或测试团队使用时,数据库开发人员将生成 DAC 项目,以创建一个可用于部署该 DAC 的 DAC 包文件。

有关 DAC 项目的详细信息,请参阅实现数据层应用程序

数据层应用程序包

当 DAC 可供部署时,它将内置在 DAC 包中,该包是一个包含 DAC 定义的文件。该 DAC 包是一个部署单元,与可执行文件是用于应用程序代码的部署单元很类似。DAC 包通常与应用程序可执行文件一起生成。当系统管理员将可执行文件部署到应用程序层或客户端计算机时,数据库管理员将关联的 DAC 包部署到数据库引擎实例。 

例如,开发小组正在开发一个名为“Finance”的 3 层应用程序。应用程序的内部版本 1.0.1.123 通过了所有接受性测试,且已准备就绪可部署到生产中。应用程序开发人员将 1.0.1.123 版 Finance.exe 文件传送给生产系统管理员,以部署到生产应用程序服务器。数据库开发人员将 1.0.1.123 版 Finance.dacpac 文件传送给生产数据库管理员,以部署到数据库引擎的生产实例。

DAC 包是一个包含多个 XML 文件的 zip 文件。有关 DAC 包文件内容的详细信息,请参阅 Microsoft SQL Server 文件格式文档

数据层应用程序实例

当将 DAC 部署到某个数据库引擎实例时,它将构成一个 DAC 实例:

  • 使用该数据库引擎实例的默认数据库属性创建一个数据库。在新的数据库中创建在 DAC 中定义的数据库对象。

  • 创建在 DAC 中定义的所有实例级别对象,如登录名。

  • 原始 DAC 定义和有关 DAC 实例的元数据都存储在 msdb 系统数据库(SQL Azure 中的 master 数据库)中。

实例部署之后,用户可以开始使用这些对象,并将数据添加到为该 DAC 创建的数据库。

为现有数据库创建数据层应用程序

可以使用“提取数据层应用程序向导”从现有数据库中提取 DAC 定义。DAC 定义包含该数据库中的所选对象以及关联的实例级对象,如映射到数据库用户的登录名。该向导将 DAC 定义内置于 DAC 包中。然后,通常将提取的 DAC 包导入到 Visual Studio 中的某个 DAC 项目,在此开始开发下一个版本的应用程序。此外,还可以使用提取的包将 DAC 部署到数据库引擎的另一个实例。

也可以使用“注册数据层应用程序向导”来为现有数据库注册一个 DAC。该向导创建一个包含现有数据库中对象的 DAC 定义,然后将此定义存储在 msdb 数据库(SQL Azure 中的 master 数据库)中。如果数据库引擎实例是 SQL Server 实用工具中的托管实例,则将该 DAC 注册作为已部署的 DAC 上载到实用工具控制点。