微软ASP.NET站点部署指南(10):迁移至SQL Server
1. 综述
第2章的部署SQL Server Compact和第9章的部署数据库更新里解释了为什么最终要升级到完整版SQL Server 。本章节将告诉你如何来做。
SQL Server Express和完整版SQL Server
一旦你决定使用完整版SQL Server,你需要在开发和测试环境使用SQL Server Express 或者完整版SQL Server。在工具支持和数据库引擎功能上,SQL Server Compact 和其它版本的SQL Server都是有区别的,可以导致不同的代码产生不同的结果。
通常在开发和测试环境(本机)是选择SQL Server Express,因为它是免费的,而且随Visual Studio一起默认安装的。和SQL Server Compact不一样, SQL Server Express和完整版SQL Server的数据库引擎是一样的。也就是说再SQL Server Express测试的结果和在生产环境完整版SQL Server上测试的结果是一样的。完整版SQL Server的工具大部分都可以在SQL Server Express上用(除了SQL Server Profiler)。 而且SQL Server Express也完整地支持存储过程,视图,触发器,复制功能。(由于虚拟主机一般都不支持SQL Server Express,所以生产环境你需要使用完整版的SQL Server。)
合并数据库
在Contoso University程序里有2个SQL Server Compact数据库,一个是membership 数据库(aspnet.sdf),另一个是程序数据库(School.sdf)。迁移的时候你可以将它们继续保持2个数据库,也可以合并成一个数据库。为了使用方便,你可能想让2个库合并在一起,还有一个原因是虚拟主机提供商,一个账户可能只允许创建一个数据库,本教程用的提供商就是这样的。
在本章节,你可以安装如下方式迁移你的数据库:
在开发和测试环境迁移到2个SQL Server Express数据库
在生产环境迁移到一个完整版的数据库
提醒:如果根据本章节所做的操作出现错误信息或一些功能不正常的话,请务必check Troubleshooting页面。
2. 为测试环境创建SQL Server Express数据库
向测试环境部署QL Server Express数据库之前,你需要手工创建这些数据库,但不需要手工创建表和插入数据,Web Deploy会自动帮你做这些工作。
从View按钮选择Server Explorer,右键Data Connections然后选择Create New SQL Server Database。
在Create New SQL Server Database对话框的Server name框里输入".\SQLExpress",在New database name 框里输入"aspnetTest",然后确定OK。
用同样的步骤创建"SchoolTest"数据库。(使用Test后缀,是因为开发环境和测试环境在一个机器上,我们需要让不同的数据库运行在不同的实例上。)
Server Explorer里显示了创建的2个数据库。
3. 为新数据库创建授权脚本
开发机的IIS上运行程序的时候,访问数据库使用的是默认应用程序池。但是,默认的应用程序池认证是没有权限打开数据库的。所以需要运行一个授权脚本来授权。本小节,你需要创建这个脚本,过后运行它以便在IIS上运行的时候能打开数据库。
在解决方案的SolutionFiles文件夹里,创建一个Grant.sql文件,复杂下面的代码到该文件中,保存并关闭:
IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
CREATE LOGIN [IIS APPPOOL\DefaultAppPool]
FROM WINDOWS WITH DEFAULT_DATABASE=[master],
DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [ContosoUniversityUser]
FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_datareader', 'ContosoUniversityUser'
GO
EXEC sp_addrolemember 'db_datawriter', 'ContosoUniversityUser'
GO
(注:本脚本是用在本教程的环境上,Win7+IIS+SQL2008,如果你使用不同的SQL版本,请参看联机丛书)
4. 为测试环境配置数据库部署
前面部署数据库的设置仅仅是复杂文件到App_Data目录里,现在要使用SQL脚本,并且在目标数据库运行才行。实际上,Web Deploy帮你做的就是下边每个数据库的部署:
- 创建一个SQL脚本,用于向目标库里创建库结构(表,列,约束等等)
- 创建一个SQL脚本,用于向目标库插入数据库
- 在目标库里运行这些脚本
测试环境修改配置设置,打开Project Properties窗口,选择Package/Publish Web选项卡,然后在Configuration下拉菜单里选择Active (Test)或Test。
确保选择了Exclude files from the App_Data folder项,Web Deploy会读取App_Data目录下的.sdf文件,然后在SQL Server Express数据库里创建表和相应的数据,但是不需要将他们复杂到目标站点。
确保选择了Include all databases configured in Package/Publish SQL项, The Package/Publish SQL选项卡就是你配置SQL Server Express设置的地方。尽管选择了这个checkbox,但是因为你在Package/Publish SQL选项卡没选择任何一个数据库,所以没有任何影响。
选择Package/Publish SQL选项卡,设置build配置为Test,点击Import from Web.config。
Visual Studio会自动查找Web.config文件的连接字符串,找到了 membership 数据库和School数据库,并且在Database Entries表里添加了2行记录。下一步要做的就是如何部署这些数据库, Database Entries表下面的Database Entry Details 面板会显示详细的信息,每选择一个数据库,下面都会显示该数据库的部署配置信息。
配置Membership 数据库的部署设置
Database Entries里选择DefaultConnection-Deployment行,以便显示membership库的配置信息。
在Connection string for destination database里输入新SQL Server Express membership数据库的连接字符串(你可以通过Server Explorer-> Data Connections-> aspnetTest-> Properties窗口里的Connection String来获取)。