数据应用层程序(Data-Tier Application Component, DAC)是SQL Sever 2008 R2的一大功能亮点,结合使用Visual Studio 2010,可以帮助开发人员和数据库管理员比以前更加有效的开发、部署、管理应用程序的数据层。
数据库应用层程序(DAC)是一个包含了几乎某一应用所需要的数据库及实例对象的实体,如表、视图、存储过程、登录等等。有了实体以后,开发人员或数据库管理员就可以把DAC打包成为一个单一实体,这个单一实体就是DAC包。 DBA可以把DAC包部署到SQL Server上,数据库管理员就可以把原本独立的对象视为一个数据库应用层的程序来进行部署、监控和管理。
DAC既为开发人员提供了新的数据库开发工具,又为DBA提供了数据层管理工具,开发人员开发出DAC应用后,通过VS2010 IDE的编译,打包成DAC包(其扩展名是.dacpac)并提供给数据库管理员,DBA通过SSMS把DAC包部署到SQL Server数据库上。DAC应用开发、部署、管理的整个过程如图1所示:
图1 DAC开发和生产过程
对DAC有了大概了解后,接下来我们以一个完整的实例结合VS 2010来介绍DAC应用程序的开发和部署过程。
这里我们分成三个部分:DAC开发环境、创建DAC应用、部署DAC应用。
1.DAC开发环境
在VS 2010 和SQL Server 2008 R2(包括SQL Server 2008)之前,我们是不能单独在Visual Studio或者SQL Server里创建DAC的,以VS 2008+SQL Server2008开发环境为例,在此环境下可以创建的数据库项目如图2所示:
图2 VS 2008数据库项目模板
而数据应用层支持的SQL Server版本如表1所示:
在DAC中,不是所有的SQL Server对象都支持, 能够支持的数据库对象如表2所示:
表2 DAC支持的SQL Server对象
应用&实践
使用AdventureWorks创建DAC包
为了验证SQL Server 2008 R2中DAC对SQL Server对象的支持,我们以SQL Server 2008 R2的实例数据AdventureWorks为例来演示。
对已经存在的数据库SQL Server 2008 R2可以使用向导来创建数据层应用程序,使用向导页面,可以设置DAC属性,查看对象依赖项和验证结果和生成DAC包。
(1)打开Microsoft SQL Server Management Studio,右击AdventureWorks,选择任务|提取数据层应用程序(X)…
(2)在弹出的页面中可以看到DAC简介,点击“下一步”,设置DAC属性,这里可以设置的属性有:应用程序名称、版本号、说明、保存的DAC包文件
(3)设置完成后点击下一步,查看对象依赖项和验证,验证结果如图3所示:
图3 AdventureWorks库验证结果
案例使用AdventureWorks创建DAC包不仅给大家展示了DAC支持和不支持的数据库对象,同时也给大家(尤其是DBA)提供了一种简单而有效的创建DAC的方法,感兴趣的读者可以自己下去尝试一下。
安装了SQL Server 2008 R2和VS 2010后,我们就可以创建DAC应用,如图4所示:
图4 使用VS2010创建数据层应用程序
同时在应用程序模板的右侧我们可以看到数据层应用程序的概念和作用。
2.创建DAC应用
开发人员创建DAC应用后,需要对数据DAC应用做一些初始化,这些初始化的操作可以是创建表、字段、视图,不仅如此,还可以把已经存在的DAC包导入,或者直接导入脚本来创建DAC应用。
案例&应用
在VS 2010中创建DAC应用SqlDacDemo
在如图3所示的界面上,我们创建用于演示的项目SqlDacDemo,并把项目的解决方案存入E:\Demo下,点击“OK”,创建DAC应用如图5所示:
图5 创建SqlDacDemo
在图4所示界面中,我们可以看到使用VS 2010创建DAC应用程序后,可以创建和实现的功能有:Data Generation Plans、Schema Comparison、Schema Objects、Script。其中Schema Objects是我们在此演示案例中主要创建的对象,使用Schema Comparison可以对数据库的Schema进行比较,常用来对同一个应用的不同版本Schema进行比较。
在此演示案例中,我们创建两个数据表:Users和Products,并对SqlDacDemo项目进行编译打包,为第三步部署DAC应用做好准备工作。
(1)在项目工程中依次展开Schema Objects|Schemas|tables,右击“Tables”,选择Add,弹出添加表的界面,如图6所示:
图6 添加数据表
输入Users,点击“Add”,创建Users.Table.Sql,重复步骤1,添加Products.Table.Sql,输入创建用户表(Users)和产品表(Products)的脚本,完成后可以在Schema Objects|Schemas|tables下增加了两个文件Users.Table.Sql和Products.Table.Sql,这样我们创建表的工作已经完成了。
我们可以直接写SQL 脚本来创建数据表,不仅如此,在DAC项目中,还可以创建的内容有:
在项目属性里设置项目版本、默认Schema、
数据层应用属性,如DAC的名称、版本、描述
Schema 对象,如Assembly、Trigger、安全、服务、存储、表、视图、函数
所有数据库引擎实例级别的对象,例如错误信息、连接的服务器
其他辅助文档和一些脚本,如部署前准备脚本及部署后清理脚本等等
(2)创建表完成后,需要设置项目的属性,右击解决方案“SqlDacDemo”,选择属性,弹出的属性页里选择项目设置,如图7所示:
图7 项目属性设置
如图7所示,在项目属性页里,可以项目版本、数据模型、默认的Schema,数据层应用属性,这里的重点是数据层应用属性,其可设置属性有名称、版本号、描述。
选择Build页,设置数据集合、编译输出文件路径、编译输出文件名称,设置完成后,点击保存。
(3)编译工程文件,选择菜单Build| Build Solution,可以看到:
SqlDacDemo -> E:\Demo\SqlDacDemo\SqlDacDemo\sql\debug\SqlDacDemo.dacpac
Build: 1 succeeded or up-to-date, 0 failed, 0 skipped
这说明我们的编译已经成功,右击我的电脑|打开-> E:\Demo\SqlDacDemo\SqlDacDemo\sql\debug\,看到打好的DAC包文件SqlDacDemo.dacpac。
3.部署DAC应用
创建DAC包成功后,需要把DAC包部署到数据库服务器上去,如果是开发人员测试部署,可以使用VS 2010自带的部署DAC包的功能,如果是DBA部署,可以使用SSMS来部署DAC包。
案例&应用
在VS 2010中部署DAC包SqlDacDemo.dacpac
在步骤2中,我们创建并打包好了DAC包文件SqlDacDemo.dacpac,接下来就要把这个包部署到数据库服务器上去,可以使用VS 2010来部署DAC包,也可以使用SSMS来部署DAC包。首先我们演示使用VS 2010来部署DAC包。
(1) 可以选择菜单Build | Deploy SqlDacDemo部署,也可以右击解决方案名称“SqlDacDemo”,选择Deploy部署,部署结果如下:
图8 部署DAC包
(2)解决部署错误
由图8我们可以看到失败的原因是没有连接到数据库,解决方法如下:右击解决方案SqlDacDemo,选择属性,打开项目属性设置,选择部署(Deploy)页,设置要连接的数据和数据库实例名称,本例中设置为SqlDacDemo,保存后再次部署,我们可以看到编译器输出如下代码:
Post-Deploy: Finished script execution.
Build: 1 succeeded or up-to-date, 0 failed, 0 skipped
Deploy: 1 succeeded, 0 failed, 0 skipped
VS 2010已经提示我们部署成功,使用SSMS打开数据库,我们可以清楚的看到SQL Server已经添加了数据库SqlDacDemo。
除了使用VS 2010 来部署DAC包,我们也可以使用SQL Server 2008 R2所带的实用工具管理器来部署DAC包。实用工具管理器部署DAC包主要实现两个主要步骤:创建并连接UCP、使用部署向导部署DAC包。
(1)打开查看|使用工具资源管理器,打开配置SQL Server实体的操作的界面如图9所示:
在此界面下,创建并连接到UCP,完成后就可以部署DAC包了。
(2)部署DAC
在已有DAC包的情况下,可以使用SSMS来部署DAC包,使用SQL Server 自带工具部署DAC包的界面如图10所示:
图10 部署DAC
如果我们把刚才使用VS 2010编译的SqlDacDemo.dacdpc包直接拿来部署,SQL Server会提示我们已经存在同名的DAC实例,这也为我们以后更新DAC包留下了一条后路。
点击“部署应用层程序”后,会弹出向导,根据向导选择要部署的DAC包,更新配置,部署DAC,部署DAC是最后一步,同时也是部署DAC最关键的一步,包括准备元数据、准备部署脚本、创建数据库、在MSDB中注册,都提示成功后就可以把DAC包部署到SQL Server 服务器上。刷新数据库,就可以看到已经创建了新的数据库,切换到实用工具资源管理器,可以看到如图11所示的界面:
图11 已部署的数据层应用程序
在这里我们可以看到已经部署的DAC包SqlDacDemo。
总结语
数据应用层程序(Data-Tier Application Component, DAC)提供了全新的方法来管理数据库,对DBA来说,可以通过SQL Server 2008 R2来创建、配置、更新、删除和管理DAC;对VS开发人员来说,可以通过Visual Studio 2010 来创建和部署DAC。有了这样简单而又强大的工具后,DBA对数据的管理会更加高效。
转自赛迪:http://news.ccidnet.com/art/32857/20100426/2044057_1.htmlMSDN上也有了:http://technet.microsoft.com/zh-cn/ff731129.aspx