sql server 2008 R2 Data-tier Application 提供新的数据库升级方法
数据库的升级总是比应用程序的升级要困难。应用程序升级不外乎就是完整的覆盖文件。而数据库的升级不能简单的做文件整体覆盖,而必须考虑用户数据的存在,保证用户数据是完整性和可用性。
以往我们升级数据库的方法可以简称为Create then Alter 。这个方法常常有两个文件构成,一个为Create.sql,一个是Alter.sql .Create.sql 建立1.0的数据库(包括模式和数据),Alter.sql 可以在任何版本的用户数据库上运行,然后把这个数据库升级到最新版本。整个alter.sql内,必须详细的说明从1.0以来到最新版本的全部变化——需要小心编写这个文件——做很多的检查来适应不同版本的数据库,并且不能破坏任何用户数据。
比如说我们做了一个应用,1.0 版本中有一个表
CREATE TABLE [dbo].[Person]
(
id int NOT NULL,
name int NOT NULL
)
在版本2.0的时候,需要为Person表添加一个新的字段,email。
那么我们必须在Alter.sql内添加一个过程语句。表明从1.0的数据库模式 如何变成2.0的模式:
Alter table Person Add Column email varchar(50) null;
就是说,开发者必须自己用过程的方法,告诉sql server,数据库模式如何一步步的从1.0 到2.0 的。
这样的变化非常的多,多年的经验说明,数据库版本的升级可以新增表,删除表,填写数据,修改字段名称,字段类型,约束等等。其间的繁琐冗长,可以想得到。
sql server 2008 R2 DAC提供了新的升级方法。
DAC的定义:A Data-tier Application (DAC) is an entity that contains all of the database and instance objects that are required to support an application, like stored procedures, tables, views, logins, etc.(DAC 是一个实体,内含全部数据库和实例的对象,比如存储过程,表,视图,登录帐号等等)
这个定义很准确,但是不容易看出应用的范围。我的个人看法可以简而言之:DAC 提供了数据库的声明型的升级,而不是过程型升级。
同样以Person为例。DAC的做法,就是直接说明新的模式如下:
CREATE TABLE [dbo].[Person]
(
id int NOT NULL,
name int NOT NULL,
email varchar(50) null
)
然后 ,由DAC 自动比较新老模式的差异,自动升级模式和迁移。假设要升级的数据库为 People ,那么具体过程如下:
_ 以新的模式定义文件,创建一个新的数据库,比如 people_new
_ 拷贝 People 的数据到 people_new
_ 老数据库 People 改名(新名称和现有数据库不能重复)
_ people_new 改名为people。
这样整个升级完成。
声明型升级相比过程型升级的好处就是开发者只要说明新版本的模式是怎样的就行了,而不必担心如何做,以及怎样迁移数据。
DAC相当的程度上做到了声明型升级。使用 Data-Tier Application,开发者只需要为新的版本编译出新的dacpac包文件,DBA 定位到现存的DAC然后选择升级功能,升级向导会比对新老版本差异,然后自动确定需要升级的操作。
DAC模式是有限定的。以字段的调整为例,修改字段的类型、约束,新增字段,删除字段都可以自动的完成数据的迁移。
“修改字段名称”这样的数据库模式升级是无法自动迁移数据的。而必须自己编写脚本来完成—— 因为和删除一个字段然后在新增一个字段无法区别。
Visual Studio 2010 可以提供 DAC应用 开发的支持。开发工程的模板为 Data-tier Application 。
本文强调了两种数据库升级方法的思想差异和DAC模式的限定。具体操作方面的内容和我的文章参考的内容,可以从以下资源获得(没有指明URL,因为你可以自己搜索):
1. SQL Server 2008 R2 Update for Developers Training Kit@microsoft. 非常翔实,具体而容易操作。有PPT,Video,动手试验三方面的内容构成。
2. SQL Server 2008 R2数据管理新纪元@it168。初步的,新特性级别的描述,容易阅读。
3. 主数据管理和实施 @developerworks。原来我们的基本信息诸如商品,科目,仓库等是有一个统一的名字,叫做主数据!
4. Is SQL Server 2008 R2 For You? 从2000,2005,2008的不同的用户角度分析R2带来的新特性。
5.Master Data Management and Customer Data Integration Data Warehousing Folks Don’t Get It。没有仔细看。
6. Why SQL Server 2008 R2 Matters to Small Business。没有仔细看。
7. Why Upgrading to SQL Server 2008 R2 Is Not a Given。没有仔细看。
8. SQL Server 2008 R2 August CTP Available Today。新特性,概览以下就行。
9.Frequently Asked Questions: SQL Server 2008 R2。新特性,概览以下就行。
10. SQL Server 2008 R2: The DAC Pack。较有看法的文章。
11.SQL Server 2008 R2: Into the Clouds。较有看法的文章。