Windows Azure的SQL Azure和SQL Server 拥有不同的体系结构,可以说是两个不同的产品。SQL Azure不完全支持或者尚不支持SQL Server的某些功能,这使得我们不能像平常一样使用bak文件还原的方式迁移数据库,也不能使用数据导入导出向导。很多SQL Server的特性在SQL Azure中不被支持。
那我们怎样才能将现有数据库迁移到SQL Azure上呢?
一、“将数据库部署到SQL Azure”向导
我最先想到的是这个向导,对数据库右键=>任务=>选择“ 将数据库部署到SQL Azure”。按照部署向导一步一步执行到最后会得到这样一个长长的错误列表:
如图中错误信息所示,SQL Azure不支持SQL Server的扩展属性[MS_Description](字段说明)。修改现有数据库把所有字段说明全删除显然不可行,即使可以,也会有新的兼容性问题在等着你。使用数据导入导出向导同样不能完美解决问题。
二、使用DAC迁移数据库架构
于是我尝试用DAC包来只迁移架构,DAC是数据层应用程序,使用SQL Server Management Studio(SSMS)的“提取数据层应用程序”向导可以将数据库的架构信息打包至一个.dacpac文件里,如图所示:
然后打开SSMS,使用SQL Azure的“部署数据层应用程序”向导,选择刚才的.dacpac文件,即可将数据库架构迁移到SQL Azure。
但是DAC包只包含数据库的架构定义信息,不包含数据,所以只能进行架构的迁移。如果数据库有海量数据,该怎么迁移呢?
三、使用SQLAzureMW完美实施数据库迁移
SQLAzureMW是第三方数据库迁移工具,能很好的解决SQL Server至SQL Azure的迁移问题。
它会解决SQL Server和SQL Azure的兼容性冲突,生成SQL Azure兼容的脚本,然后远程执行脚本实施数据库迁移。
该工具下载地址:http://sqlazuremw.codeplex.com/
我以数据库School为例,它包含100万条数据以及复杂的外键关系,约束。另外还包含存储过程1个,视图1个。
具体步骤如下:
1. 选择分析并迁移/数据库
2.选择源数据库,以本地数据库school为例
3.选择要生成的数据库对象
4.打开高级选项,确保“生成表/数据”一项选择的是“表结构和数据”
5.检查将要生成脚本的数据库对象
6.脚本生成成功
7.链接目标数据库,我这里以SQL Azure上的SchoolAzure为例
8.点击下一步,执行脚本
9.打开SSMS查看结果,可以看到表、数据、主外键关系、约束、视图、存储过程都在。迁移成功!
后记:数据库一旦迁移到Azure上,以后的备份和还原工作就简单得多了,直接在Windows Azure管理门户上导出.bacpac包,即可进行备份或迁移至本地。