设为首页 收藏本站
查看: 2795|回复: 0

[经验分享] 微软ASP.NET站点部署指南(10):迁移至SQL Server

[复制链接]

尚未签到

发表于 2015-6-28 13:17:37 | 显示全部楼层 |阅读模式
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
  
DSC0000.png
  在Create New SQL Server Database对话框的Server name框里输入".\SQLExpress",在New database name 框里输入"aspnetTest",然后确定OK。
  
DSC0001.png
  用同样的步骤创建"SchoolTest"数据库。(使用Test后缀,是因为开发环境和测试环境在一个机器上,我们需要让不同的数据库运行在不同的实例上。)
  Server Explorer里显示了创建的2个数据库。
  
DSC0002.png

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选项卡没选择任何一个数据库,所以没有任何影响。
  
DSC0003.png
  选择Package/Publish SQL选项卡,设置build配置为Test,点击Import from Web.config
  
DSC0004.png
  Visual Studio会自动查找Web.config文件的连接字符串,找到了 membership 数据库和School数据库,并且在Database Entries表里添加了2行记录。下一步要做的就是如何部署这些数据库, Database Entries表下面的Database Entry Details 面板会显示详细的信息,每选择一个数据库,下面都会显示该数据库的部署配置信息。
  
DSC0005.png
  
  配置Membership 数据库的部署设置
  Database Entries里选择DefaultConnection-Deployment行,以便显示membership库的配置信息。
  在Connection string for destination database里输入新SQL Server Express membership数据库的连接字符串(你可以通过Server Explorer-> Data Connections-> aspnetTest-> Properties窗口里的Connection String来获取)。
  
DSC0006.png
  复制连接字符串到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
  
DSC0007.png
  完成以后,Database Entries表里的DefaultConnection-Deployment的设置应该是这样的:
  
DSC0008.png
  
  配置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的设置应该是这样的:
  
DSC0009.png
  最后,在Package/Publish SQL选项卡上保存修改。
  
  为赋权脚本设置Transacted Mode
  部署过程中,会自动生产脚本以便部署schema和数据,默认情况下,这些脚本是在一个事务里运行的,但自定义的脚本(想赋权脚本)默认不在事务里运行,如果部署存在混合事务模式的话,就有可能出现超时的情况,,本章节将指导你如何设置自定义脚本文件也在一耳光事务里运行。
  在Solution Explorer,右键ContosoUniversity项目,选择Unload Project。
  
DSC00010.png
  然后重新右键该项目,选择Edit ContosoUniversity.csproj。
  
DSC00011.png
  Visual Studio编辑器会显示项目文件的XML内容。注意到里面有很多PropertyGroup元素(下图里省略了一些)。
  
DSC00012.png
  第一个没有Condition 实现,它的设置和build配置无关,另外几个,有一个是Debug用的,一个是 Release用的,另外一个是Test用的,注意到,Test的这个PropertyGroup 元素里面,有个元素叫PublishDatabaseSettings,是你在Package/Publish SQL选项卡里设置的内容:
  
DSC00013.png
  注意到上图标记的红色框,在Object里的Source元素是指向了你配置的自定义文件,他的Transacted属性值是False,这个就是设置事务模式的,你需要将它设置为True,设置应该是这样的:
  
DSC00014.png
  保存关闭项目文件,然后右键解决方案里的项目,选择重新Reload Project。
  
DSC00015.png

5.  为测试库的连接字符串创建Web.Config Transform
  Package/Publish SQL 里为SQL Express数据库设置的连接字符串只是为Web Deploy更新目标数据库用的,程序用到的连接字符串还是需要在Web.config文件里重新设置的(通过之前将的Transform)。
  打开Web.Test.config文件,connectionStrings元素替换成如下代码:




  
   
   
  
  

  
  最终部署结果是在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章的内容)
  
DSC00016.png
  Visual Studio部署了修改后的程序,并在Output窗口显示了成功信息。
  
DSC00017.png
  运行程序,重新测试,添加一个student来验证数据库更新操作十分正常,再访问Update Credits页面(需要登录)来验证membership数据库是否工作正常。

7.  为生产环境创建SQL Server数据库
  测试环境部署并测试以后,可以向生产环境部署了。注意本章节前面的内容提到了Cytanium 只允许创建运行一个数据库,所以我们需要将2个数据库的所有内容都合并到一个新的数据库里。
  进入Cytanium控制面板,鼠标移动到Databases上,然后选择SQL Server 2008
  
DSC00018.png
  在SQL Server 2008页面,点击Create Database
  
DSC00019.png
  输入数据库名为"School"然后点击Save保存。程序自动添加contosou前缀,所以你的真正数据库名字是contosouSchool。
  
DSC00020.png
  同一页面,点击Create User,在Cytanium's服务器上创建的是混合账户,而不是平时用到的系统集成账户。你需要修改Web.config文件的连接字符串里的账户信息。这个步骤,你将创建一个用户。
  
DSC00021.png
  在SQL User Properties 页面输入必填项:
  输入用户名: ContosoUniversityUser
  输入密码:Pas$w0rd.
  选择contosouSchool作为默认数据库
  选择contosouSchool check box
  
DSC00022.png

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项。
  
DSC00023.png
  选择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的设置应该是这样的:
  
DSC00024.png
  
  配置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的设置应该是这样的:
  
DSC00025.png
  保存Package/Publish SQL 选项卡上的修改。

9.  为生产库的连接字符串创建Web.Config Transform
  为了让Web.config里的数据库连接地址指向新的生产环境数据库,你修改重新设置Web.config的transfermation。连接地址和Package/Publish SQL选项卡里的地址是几乎一样的,唯一的区别是添加了一个MultipleResultSets选项。
  打开Web.Release.config替换如下的内容到connectionStrings元素节点:




  
   
   
  
  

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

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窗口显示了成功信息。
  
DSC00026.png
  测试之前,需要先删除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对话框:
  
DSC00027.png
  在Active solution configuration框里选择NewNew Solution Configuration 对话框出现以后,为新build配置输入新名称MigrateToSQLExpress,然后选择从Test复制设置。选择Create new project configurations点击OK
  
DSC00028.png
打开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


DSC00029.png

保存Package/Publish SQL里的修改。

  
  部署到测试环境
  Solution Configurations下拉框里选择MigrateToSQLExpress build配置, Publish profile下拉框里选择Test,然后点击Publish Web。(如果你自定义了你的Visual Studio使这些工具栏的这些设置不能用的话,请参考第8章的内容)
DSC00030.png
  Visual Studio部署了修改后的程序,并在Output窗口显示了成功信息。
  
  修改Web.config 里的Connection Strings
  打开Web.config文件,替换下面的代码到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


DSC00031.png

卸载成功以后,同样的方式也卸载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的时候,如何部署这些修改。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81176-1-1.html 上篇帖子: SQL Server 动态生成分区脚本 下篇帖子: SQL Server 性能优化之——T-SQL TVF和标量函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表