微软的产品更新越来越快了,几乎每年都有产品更新,今天呢,我们主要介绍一下,如何将本地的SQL Server数据库迁移到windows azure上的SQL Server Database。当然说到SQL Serrver数据库的迁移,大家都会想到最普通及最普遍的方法,那就是通过备份数据库,然后通过备份的数据库文件进行还原。其实呢,我们在IT运维的工作中多少会有体会,最普通的方法往往是最有效的方法也是最安全的方法,但是效率不高,由于时代进步的太快了,我们也不能太out了,也不想用这个古老的方法去做数据迁移,毕竟SQL Server及windows azure都是微软的产品,微软肯定也有其他管理工具进行迁移或者管理。我们日常都会用到,数据库的管理工具,我们首选会用到SQL Server Manager Studio(SSMS)进行管理操作。那SSMS到底支不支持从本地的SQL Server数据库迁移数据到Windows azure SQL Server Database呢。答案是肯定支持的,那怎么操作呢,那就是我们今天介绍的主要内容,我们会主要着重介绍两种方法,第一是通过SSMS直接迁移到windows azure sql database下,还有一种就是通过SSMS导出需要迁移的数据库架构信息,然后在windows azure sql database下导入架构信息。
关于本地SQL Server迁移到Azure Database,首先我们需要明确二者之间的差异(比如支持的SQL语法及一些约束条件等),然后根据这些差异制定基于当前数据库的迁移计划。关于Azure SQL Database与传统SQL Server数据库几点重要的差异:
1. 聚集索引要求:Azure SQL Database 不支持没有聚集索引的表,表必须具有聚集索引(这点非常重要,更多约束参考:Azure SQL Database 一般性的指导原则和限制)。
2. Azure SQL Database Transact-SQL 参考
关于具体的迁移实现过程,我们可以参考微软官方提供的迁移方案:
1. 将 SQL Server 数据库迁移到 Azure SQL Database
2. 使用 SQL Server Data Tools 将数据库迁移到 Azure SQL Database
使用SQL Server数据库导入Azure
前提条件:
a. 需要在本地安装SQL Server 2012 SP1 CU2 或者更新的版本. 如果您安装了 SQL Server 2012 SP1,可以从下面的连接下载并更新SQL Server.
SQL Server2012 SP1 CU2 |
http://support.microsoft.com/kb/2790947/en-us |
SQL Server2012 SP1 CU4 |
http://support.microsoft.com/kb/2833645/en-us |
b. 本地数据库的数据对象需要满足支持DAC的要求,具体可以查看 对 SQL Server 对象和版本的 DAC 支持 (http://technet.microsoft.com/zh-cn/library/ee210549.aspx)
另外我们还可以通过第三方的工具来迁移。
使用SQLAzureMW进行迁移
SQLAzureMW是微软公司发布在CodePlex上的一个项目,它可以将SQL 2005及SQL 2008数据库迁移到SQL Azure上。其最新版本是3.3,下载地址是:
http://sqlazuremw.codeplex.com/releases/view/32334
SQLAzureMW会检测并纠正SQL Server 2005/2008与SQL Azure之间的不兼容性。向导能修复的一些常见问题有:使用varChar(max)替换text列、将用户自定义类型转换为基类型。将text列转换为varchar(max),将image转换为varbinary(max),同时它还会取消对XML schema的绑定,因为SQL Azure并不支持它。由于SQL Azure缺乏对hierarchyID的支持,因此需要手工完成。除了在SQL Azure上生成脚本以部署迁移的schema之外,用户还可以凭借该工具通过BCP来迁移表数据。
废话不多说了,今天我们主要介绍通过SSMS如果做数据的迁移。具体操作见下:
前提是我们已经在windows azure上创建好了数据库,然后用2008的Sql Server Manager Studio对数据库进行连接管理,我们通过SSMS连接了本地的SQL SERVER及windows azure上的SQL Server Database。我们连接后发现,2008 sql server manager studio工具的任务下,没有部署数据到windows azure database的选项,经过咨询世纪互联后,告知,SSMS的版本必须是2012以上版本,而我们现在使用的是2008版本的SSMS,所以无法通过以下方法进行导出及导入:
为了解决问题,我们就在微软的MSDN网站上下载最新的数据库,目前微软最新的数据库版本为SQL Server 2014,所以我们就下载了SQL Seraver 2014 Manager Studio管理工具的安装包。
Sql server 2014 manager studio管理数据库
开始安装SQL Server Manager Studio2014
安装完成后,我们运行SQL Server Manager Studio2014工具
还是连接本地的SQL server数据库和Windows azure Sql server database数据库后,然后我们在本地数据库下,右击要迁移的数据库---Deploy Database to windows azure sql database
我们发现一共有两个选项,还有一个是Deploy Database to windows azure vm,这个选项是windows azure 上的vm上运行的sql 数据库迁移
我们迁移本地数据到windows azure sql database后,我们默认下一步
解析来我们需要连接目标服务,也就是说迁移的目的地,我们要迁移到windows azure上,所以我们需要连接windows azure sql server database
可根据自己的选项进行连接及配置
开始导出sql server 的架构信息
开始在windows azure上创建对应的数据库架构及数据包。
操作完成
我们通过SSMS可以看见windows azure sql server database下多了一个本地的数据库,通过查询语句查看,数据完整性好。
方法2:
我们在迁移数据库的时候还有一张方法,那就是Export data-tier application进行还原。该功能类似于数据库的备份机还原。
我们默认下一步
保存模板文件,模板文件的类型为.bacpac
保存信息提示
操作完成。导出数据库及架构等信息。
导出的架构文件及数据文件
接下来我们还是通过SSMS链接windows azure SQL Server database进行还原。我们右击windows azure sql server database后,右击import data-their application
提示信息。
我们选择刚才备份的数据库架构文件
确认数据库的配置信息后,下一步
确认信息
操作完成。
我们还是通过SSMS查看windows azure下的SQL Server database数据库信息
我们还是通过sql 查询语句对刚才迁移的数据库进行查询机判断。