微软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会自己主动帮你做这些工作。

Viewbutton选择Server Explorer,右键Data Connections然后选择Create New SQL Server Database

微软ASP.NET网站部署指南(10):迁移至SQL Server

Create New SQL Server Database对话框的Server name框里输入".\SQLExpress",在New database name 框里输入"aspnetTest",然后确定OK。

微软ASP.NET网站部署指南(10):迁移至SQL Server

用相同的步骤创建"SchoolTest"数据库。(使用Test后缀,是由于开发环境和測试环境在一个机器上。我们须要让不同的数据库执行在不同的实例上。)

Server Explorer里显示了创建的2个数据库。

微软ASP.NET网站部署指南(10):迁移至SQL Server

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帮你做的就是下边每一个数据库的部署:

  1. 创建一个SQL脚本,用于向目标库里创建库结构(表,列。约束等等)
  2. 创建一个SQL脚本,用于向目标库插入数据库
  3. 在目标库里执行这些脚本

測试环境改动配置设置。打开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选项卡没选择不论什么一个数据库。所以没有不论什么影响。

微软ASP.NET网站部署指南(10):迁移至SQL Server

选择Package/Publish SQL选项卡,设置build配置为Test,点击Import from Web.config

微软ASP.NET网站部署指南(10):迁移至SQL Server

Visual Studio会自己主动查找Web.config文件的连接字符串。找到了 membership 数据库和School数据库,而且在Database Entries表里加入了2行记录。

下一步要做的就是怎样部署这些数据库, Database Entries表以下的Database Entry Details 面板会显示具体的信息,每选择一个数据库。以下都会显示该数据库的部署配置信息。

微软ASP.NET网站部署指南(10):迁移至SQL Server

配置Membership 数据库的部署设置

Database Entries里选择DefaultConnection-Deployment行。以便显示membership库的配置信息。

Connection string for destination database里输入新SQL Server Express membership数据库的连接字符串(你能够通过Server Explorer-> Data Connections-> aspnetTest-> Properties窗体里的Connection
String
来获取)。

微软ASP.NET网站部署指南(10):迁移至SQL Server

复制连接字符串到Package/Publish SQL 选项卡里的Connection string for destination database 框里。

Data Source=.\SQLExpress;Initial Catalog=aspnetTest;Integrated Security=True;Pooling=False

确保选择了Pull data and/or schema from an existing database项,它会生产脚本以便在目标数据库自己主动创建。

Connection string for the source database值是从Web.config文件中获取的,指向是开发用的SQL Server Compact数据库,他是用来生产脚本,然后在目标库执行的。由于是要部署生产环境数据库,所以要把名字从"aspnet-Dev.sdf"改成"aspnet-Prod.sdf"。

将Database scripting options从Schema Only改成Schema and data。由于你的数据(測试账户)也须要部署到新库里。

另外,你自己创建的赋权脚本也须要执行,在Database Scripts框里点击Add Script,然后在Select File对话框里选择你创建的Grant.sql。然后点击Open

微软ASP.NET网站部署指南(10):迁移至SQL Server

完毕以后,Database Entries表里的DefaultConnection-Deployment的设置应该是这种:

微软ASP.NET网站部署指南(10):迁移至SQL Server

配置School 数据库的部署设置

接下来。选择SchoolContext-Deployment行。以配置School数据库。

相同的方式须要设置连接字符串到Connection string for destination database 框里。

Data Source=.\SQLExpress;Initial Catalog=SchoolTest;Integrated Security=True;Pooling=False

确保选择了Pull data and/or schema from an existing database项。

Connection string for the source database值是从Web.config文件中获取的,指向是开发用的SQL Server Compact数据库。他是用来生产脚本。然后在目标库执行的。由于是要部署生产环境数据库,所以要把名字从" School -Dev.sdf"改成" School -Prod.sdf"。

改动Database scripting optionsSchema and data

也须要为数据库赋予读写权限。所以也须要加入Grant.sql脚不能文件。

完毕以后,Database Entries表里的SchoolContext -Deployment的设置应该是这种:

微软ASP.NET网站部署指南(10):迁移至SQL Server

最后。在Package/Publish SQL选项卡上保存改动。

为赋权脚本设置Transacted Mode

部署过程中,会自己主动生产脚本以便部署schema和数据。默认情况下。这些脚本是在一个事务里执行的。但自己定义的脚本(想赋权脚本)默认不在事务里执行。假设部署存在混合事务模式的话,就有可能出现超时的情况,,本章节将指导你怎样设置自己定义脚本文件也在一耳光事务里执行。

在Solution Explorer,右键ContosoUniversity项目,选择Unload Project。

微软ASP.NET网站部署指南(10):迁移至SQL Server

然后又一次右键该项目,选择Edit ContosoUniversity.csproj。

微软ASP.NET网站部署指南(10):迁移至SQL Server

Visual Studio编辑器会显示项目文件的XML内容。注意到里面有非常多PropertyGroup元素(下图里省略了一些)。

微软ASP.NET网站部署指南(10):迁移至SQL Server

第一个没有Condition 实现,它的设置和build配置无关。另外几个。有一个是Debug用的,一个是 Release用的,另外一个是Test用的,注意到。Test的这个PropertyGroup 元素里面。有个元素叫PublishDatabaseSettings。是你在Package/Publish SQL选项卡里设置的内容:

微软ASP.NET网站部署指南(10):迁移至SQL Server

注意到上图标记的红色框。在Object里的Source元素是指向了你配置的自己定义文件,他的Transacted属性值是False,这个就是设置事务模式的,你须要将它设置为True。设置应该是这种:

微软ASP.NET网站部署指南(10):迁移至SQL Server

保存关闭项目文件。然后右键解决方式里的项目。选择又一次Reload Project。

微软ASP.NET网站部署指南(10):迁移至SQL Server

5.  为測试库的连接字符串创建Web.Config Transform

Package/Publish SQL 里为SQL Express数据库设置的连接字符串仅仅是为Web Deploy更新目标数据库用的,程序用到的连接字符串还是须要在Web.config文件中又一次设置的(通过之前将的Transform)。

打开Web.Test.config文件。connectionStrings元素替换成例如以下代码:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=.\SQLExpress;Initial Catalog=aspnetTest;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
<add name="SchoolContext"
connectionString="Data Source=.\SQLExpress;Initial Catalog=SchoolTest;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<!-- appSettings element, comments, and system.web element -->
</configuration>

终于部署结果是在Web.config 里。connectionString元素里每一个add元素的providerName属性被替换成上述代码。这个和Package/Publish SQL选项卡里的是不一样的。另外字符串里加入上MultipleActiveResultSets=True,是由于这是Entity Framework和Universal Providers所必须的设置。

6.  部署到測试环境

如今已经准备好開始部署到測试环境了。

Solution Configurations下拉框里选择TestPublish profile里选择Test,然后点击Publish Web。(假设你自己定义了你的Visual Studio使这些工具栏的这些设置不能用的话,请參考第8章的内容)

微软ASP.NET网站部署指南(10):迁移至SQL Server

Visual Studio部署了改动后的程序,并在Output窗体显示了成功信息。

微软ASP.NET网站部署指南(10):迁移至SQL Server

执行程序。又一次測试,加入一个student来验证数据库更新操作十分正常,再訪问Update Credits页面(须要登录)来验证membership数据库是否工作正常。

7.  为生产环境创建SQL Server数据库

測试环境部署并測试以后。能够向生产环境部署了。注意本章节前面的内容提到了Cytanium 仅仅同意创建执行一个数据库。所以我们须要将2个数据库的全部内容都合并到一个新的数据库里。

进入Cytanium控制面板。鼠标移动到Databases上,然后选择SQL Server 2008

微软ASP.NET网站部署指南(10):迁移至SQL Server

SQL Server 2008页面,点击Create Database

微软ASP.NET网站部署指南(10):迁移至SQL Server

输入数据库名为"School"然后点击Save保存。

程序自己主动加入contosou前缀,所以你的真正数据库名字是contosouSchool。

微软ASP.NET网站部署指南(10):迁移至SQL Server

同一页面。点击Create User,在Cytanium'sserver上创建的是混合账户。而不是平时用到的系统集成账户。你须要改动Web.config文件的连接字符串里的账户信息。这个步骤,你将创建一个用户。

微软ASP.NET网站部署指南(10):迁移至SQL Server

在SQL User Properties 页面输入必填项:

输入username: ContosoUniversityUser

输入password:Pas$w0rd.

选择contosouSchool作为默认数据库

选择contosouSchool check box

微软ASP.NET网站部署指南(10):迁移至SQL Server

8.  为生产环境创建配置数据库部署

如今能够来想配置測试环境一样。来设置Package/Publish WebPackage/Publish SQL里的參数了。

打开Project Properties窗体,选择Package/Publish Web选项卡,然后在Configuration下拉菜单里选择Active (Release)Release

确保选择了Exclude files from the App_Data folder项.,数据库部署不须要复制App_Data目录里的内容,不过在目标库生成并执行脚本。

确保选择了Include all databases configured in Package/Publish SQL tab项。

微软ASP.NET网站部署指南(10):迁移至SQL Server

选择Package/Publish SQL选项卡。设置build配置为Release。和測试环境一样点击Import from Web.config

能够看到2行记录被加入到Database Entries表里了。

在为每一个数据库设置部署參数的时候,与測试环境的设置唯一不同的是:測试环境须要设置2个不同的连接字符串。而生成环境须要设置同样的连接字符串。由于它们是被部署到一个生成环境数据库上的。

配置Membership 数据库部署设置

选择Database Entries 表里的DefaultConnection-Deployment 行来设置membership 数据库的部署信息。

在Connection string for destination database里输入运行刚刚创建的生成环境数据库的连接字符串信息(你能够从欢迎邮件里得到)。邮件里的地址和以下的类似:

Data Source=vserver01.cytanium.com;Initial Catalog={myDataBase};User Id={myUsername};Password={myPassword};

替换3个变量以后,字符串变成了:

Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Pas$w0rd;

复制connection string到Package/Publish SQL里的Connection string for destination database里。

确保选择了Pull data and/or schema from an existing database

Connection string for the source database值是从Web.config文件获取的,指向了App_Data文件夹下的SQL Server Compact数据库,改动aspnet-Dev.sdfaspnet-Prod.sdf

Database scripting options项改动为Schema and data

完毕以后,DefaultConnection-Deployment的设置应该是这种:

微软ASP.NET网站部署指南(10):迁移至SQL Server

配置School 数据库的部署设置

接下来。选择SchoolContext-Deployment来配置School数据库的设置。

复制相同的connection string(在上面membership设置里)到Connection string for destination database

确保选择了Pull data and/or schema from an existing database项,Connection string for the source database的值是从Web.config文件获取的。 指向的是开发库。改动School-Dev.sdfSchool-Prod.sdf

Database scripting options项改动为Schema and data

完毕以后,SchoolContext-Deployment的设置应该是这种:

微软ASP.NET网站部署指南(10):迁移至SQL Server

保存Package/Publish SQL 选项卡上的改动。

9.  为生产库的连接字符串创建Web.Config Transform

为了让Web.config里的数据库连接地址指向新的生产环境数据库,你改动又一次设置Web.config的transfermation。

连接地址和Package/Publish SQL选项卡里的地址是差点儿一样的。唯一的差别是加入了一个MultipleResultSets选项。

打开Web.Release.config替换例如以下的内容到connectionStrings元素节点:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Pas$w0rd;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
<add name="SchoolContext"
connectionString="Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Pas$w0rd;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<!-- appSettings element, comments, and system.web element -->
</configuration>

有时候,你能够看到一些建议。要对Web.config 文件中的connection strings进行加密。那是由于你的server是放在自己公司里的,部署到虚拟主机上话,你要充分信任主机提供商的安全保护能力呦。

10.    部署到生产环境

如今能够向生产环境部署了,部署过程将读取App_Data 目录下的SQL Server Compact 数据库文件,然后在生产环境数据库里又一次创建全部的表和数据。

在部署之前。确保上传了app_offline.htm文件,原因參考第7章内容。

首先要通过Cytanium 控制面板里的File Manager 功能将aspnet-Prod.sdf和School-Prod.sdf备份到开发环境里的App_Data文件夹。确保再次向生产环境部署的数据是最新的。

Solution Configurations下拉框里选择ReleasePublish profile里选择Release,然后点击Publish Web

(假设你自己定义了你的Visual Studio使这些工具栏的这些设置不能用的话,请參考第8章的内容)

Visual Studio部署了改动后的程序。并在Output窗体显示了成功信息。

微软ASP.NET网站部署指南(10):迁移至SQL Server

測试之前。须要先删除app_offline.htm文件。与此同一时候也能够删除App_Data文件夹下的sdf文件。

执行程序,又一次測试,加入一个student来验证数据库更新操作十分正常。再訪问Update Credits页面(须要登录)来验证membership数据库是否工作正常。

11.    开发环境切换到SQL Server Express

综述里介绍的内容。开发的时候最好使用和測试、生产环境相同的数据库(还记得上面说的SQL Server Express和完整版SQL Server是一样功能么?)。本小节我们将设置ContosoUniversity项目使用SQL Server Express。

最简单的方式是让Code First和membership system来帮你创建新数据库:

n  改动connection strings来指定新的SQL Express数据库

n  同意程序, Code First会自己主动创建程序数据库

n  点击登录,并注冊一个測试账户,ASP.NET membership系统会自己主动帮你创建membership数据库

只是,假设你有非常多測试账户须要创建的话,你肯定不想手工输入。能够将SQL Server Compact的数据迁移到SQL Server Express闪个。假设你想这么做,那请继续,假设不想这么多。请忽略这一章节,继续訪问:为Web.config文件更新Connection String

创建开发环境Membership数据库

View菜单选择Server Explorer,右键Data Connections选择Create New SQL Server Database

Create New SQL Server Database对话框, Server name 里输入.\SQLExpressNew database name框里输入aspnetDev,点击OK确定。

配置数据库部署

如今须要为新数据库配置部署设置了,无需改动如今有的測试环境设置,你能够建立一个新的Build配置,以Test Build配置为基础取名为MigrateToSQLExpress

从Visual Studio的Build菜单,选择Configuration Manager弹出Configuration Manager对话框:

微软ASP.NET网站部署指南(10):迁移至SQL Server

Active solution configuration框里选择NewNew Solution Configuration 对话框出现以后,为新build配置输入新名称MigrateToSQLExpress,然后选择从Test复制设置。

选择Create new project configurations点击OK

微软ASP.NET网站部署指南(10):迁移至SQL Server

打开Project Properties窗体,选择Package/Publish Web选项卡。Configuration下拉框里选择Active (MigrateToSQLExpress),选择Exclude files from the App_Data folder并确保选中Include all databases configured
in Package/Publish SQL tab

选择Package/Publish SQL选项卡,设置build配置为Active(MigrateToSQLExpress),点击Import from Web.config

Database Entries表里,取消选择SchoolContext-Deployment(由于不须要部署School数据库)。然后选择DefaultConnection-Deployment来配置membership 数据库的设置。

Connection string for destination database里,输入以下列出的connection string,它指向你刚为开发环境创建的新SQL Server Express membership数据库。

Data Source=.\SQLExpress;Initial Catalog=aspnetDev;Integrated Security=True;Pooling=False;

确保选择了Pull data and/or schema from an existing database项,

Connection string for the source database的值来自Web.config文件。它指向原来的开发环境SQL Server Compact membership数据库。

Database scripting options 的项从Schema Only改动为Schema and Data

微软ASP.NET网站部署指南(10):迁移至SQL Server

保存Package/Publish SQL里的改动。

部署到測试环境

Solution Configurations下拉框里选择MigrateToSQLExpress build配置, Publish profile下拉框里选择Test,然后点击Publish Web

(假设你自己定义了你的Visual Studio使这些工具栏的这些设置不能用的话,请參考第8章的内容)

微软ASP.NET网站部署指南(10):迁移至SQL Server

Visual Studio部署了改动后的程序。并在Output窗体显示了成功信息。

改动Web.config 里的Connection Strings

打开Web.config文件。替换以下的代码到connectionStrings元素节点:

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=aspnetDev;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient"/>
<add name="SchoolContext" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=SchoolDev;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>

Control-F5执行,和測试、生产环境一样,加入一个student验证数据库能否正常工作。

假设依照上面的步骤迁移了用户数据,訪问Update Credits页面来验证部署是否正确,假设没有的话,创建一个administrator账户然后訪问Update Credits页面来验证。

12.    清除SQL Server Compact文件

如今,不在须要支持SQL Server Compact 的数据库文件和NuGet包了。假设你原因,能够删除这些不必要的文件(不强求)。

Solution Explorer里删除App_Data文件夹下的.sdf文件(amd64x86子文件夹)。

Solution Explorer里,右键ContosoUniversity项目选择Add Library Package Reference。在Add Library Package Reference对话框里选择EntityFramework.SqlServerCompact包并点击Uninstall

微软ASP.NET网站部署指南(10):迁移至SQL Server

卸载成功以后,相同的方式也卸载SqlServerCompact包(必须卸载,由于EntityFramework.SqlServerCompact依赖于它)。

相同的步骤,删除ContosoUniversity.DAL项目里的这2个包。

最后,能够MigrateToSqlExpress Build配置了,由于它不过为迁移数据而准备的。

Build菜单里选择Configuration Manager,在弹出的Configuration Manager对话框里。Active solution configuration下拉菜单里选择Edit,在Edit Solution
Configurations
对话框里选择MigrateToSQLExpress,然后点击Remove

如今已经成功将数据库迁移至SQL Server Express和完整版SQL Server。下一章节,将做另外一处数据库改动,然后在測试、生产环境使用SQL Server Express和完整版SQL Server的时候。怎样部署这些改动。

上一篇:docx文件怎样打开 - 转


下一篇:160314、MVC设计模式