【IT168专稿】在使用VS.Net开发的Windows或Web应用程序中,我们常常结合SQL Server来进行应用的开发部署。在云计算应用开发中,我们可以使用VS 2010来开发应用程序,对于数据存储,可以使用SQL Azure。对于现有的应用程序和数据库,也可以部署到云中去。本文介绍如何迁移现有SQL 数据库至SQL Azure。
迁移现有SQL 数据库至SQL Azure有两种方法,其一是使用SQL数据库管理工具(SQL Server Management Studio,SSMS)生成脚本的方法;其二是使用微软提供的开源工具SQL Azure 迁移向导(SQL Azure Migration Wizard,SQLAzureMW),下面我们分别介绍。
使用SSMS进行迁移
微软云计算平台对开发人员的特点之一是开发人员可以充分使用现有的技能和经验,使用熟悉的开发语言和工具,使用SQL数据库管理工具进行迁移也证明了这一点。下面来介绍使用SSMS进行迁移的详细步骤。
应用与案例
在这个案例中,我们将使用SSMS来迁移微软提供的实例数据库NORTHWND,最终生成能够在SQL Azure上部署的数据库脚本,详细步骤如下:
第一步:打开SSMS,找到NORTHWND数据库,右击选择任务(Tasks),在弹出的窗口中选择生成脚本(Generate Scripts…),如图1所示:
图1 选择数据库生成脚本
第二步:在弹出的SQL脚本向导窗口中,点击“下一步”,出现选择数据库窗口,选择微软实例数据库NORTHWND,点击“下一步“,选择脚本选项,在脚本选项页面里,我们要对脚本选项里的几项进行配置,需要配置的几项已经用红线标示出来了,如图2所示:
图2 设置导出脚本选项
(1)表/视图选项中需要配置
编写数据的脚本:设置编写数据的脚本为False,因为现在我们不能把数据写入到生成的脚本中。
(2)常规中配置
编写Use Database脚本:设置为False,因为SQL Azure不支持。
编写扩展属性脚本:设置为False,因为SQL Azure不支持扩展属性。
将UDDTs转换为基类型:设置为True,因为SQL Azure不支持用户自定义数据类型。能够使用的数据类型就是门户站点里列出来的类型。
第三步:选择要生成脚本的对象,在这里可以选择表、视图、存储过程,如图3所示:
图3 选择表
第四步:选择完表以后,点击“下一步“,SSMS自动生成脚本,这对于开发者或者DBA来说是非常熟悉的,生成成功后的窗口如图4所示:
图4 导出成功
在图4中,公有37个项目生成成功,这里包括了NORTHWND所有的表、视图和存储过程。在接下来的内容介绍中,我们还将使用这个实例数据库,不过迁移的方法换成了SQL Azure迁移向导这个工具。
使用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来迁移表数据。
应用与案例
在这个案例中,我们将使用SQLAzureMW来迁移微软提供的实例数据库NORTHWND,最终生成能够在SQL Azure上部署的数据库脚本,详细步骤如下:
第一步:下载SQLAzureMW。下载SQLAzureMW后,解压缩后包含四个文件,期中有2个配置文件,一个配置文件是SQL Azure不支持的文件,一个是SQL Azure数据迁移配置文件,如图5所示
图5 打开SQLAzureMW
第二步:运行SQLAzureMW。双击SQLAzureMW.exe,弹出窗口如图6所示,在图6的窗口中,我们可以看到:
SQLAzureMW支持数据迁移的类型:
(1) SQL Server到SQL Azure
(2) SQL Azure到SQL Server
(3) SQL Azure到SQL Azure
SQLAzureMW支持数据迁移的功能有:
(1) 只是分析数据库
(2) 分析和迁移数据库
(3) 不分析只迁移数据库
(4) 直接运行T-SQL进行分析
在这里我们选择了分析和迁移数据库|SQL Database,点击“下一步(Next)“,如图7所示:
图7 连接数据库
第三步:连接数据库。点击“连接服务器Connect to Server“,在弹出的窗口中我们可以输入要连接的数据库名称、用户名、密码,点击”连接Connect“,连接成功后的界面如图8所示:
图8 选择数据库
第四步:选择数据库。连接成功后,需要选择数据库,这里我们选择了示例数据库NORTHWND,点击下一步,如图9所示:
图9 选择数据库对象脚本
第五步:选择生成的脚步对象。在这里我们选择了数据库所有对象来生成脚本,点击下一步,如图10所示:
图10 导出结果
第六步:保存脚本文件。在图10中,我们生成了脚本的备份文件,这里调用了BCP命令,由于语言版本的问题,所以在图10中出现了一些乱码。但是我们还是可以看到已经生成完成了。切换到SQL Script这个Tab上来,如图11所示:
图11 生成的SQL脚本
在图11中,点击“保存 Save“,把生成的脚步保存成文件,这样我们就得到了一个能够在SQL Azure上部署的SQL脚本。我们的迁移工作可以说已经完成了百分之八十,剩下的工作就是拿这个脚本在我们云端的SQL Azure上去执行就可以了。
需要注意的是:SQL Azure构建在SQL Server 2008上,对其的兼容性级别达到了100。运行在较低兼容性级别如80或90之上的数据库可能会产生问题。虽然迁移工具可以捕获到兼容性级别问题,但我们强烈建议在使用该工具之前将数据库的兼容性级别提升到100。
不管是使用SSMS或者SQLAzureMW,迁移现有数据库到SQL Azure中并没有我们想象的那么困难,这两种方式各有其适用场景,SSMS更适合于DBA们来使用,SQLAzureMW对与开发者和DBA甚至不懂数据库的人来说,无疑于黑夜中的一盏明灯,而且它还使用BCP导出了数据库里的数据,因此单从数据迁移功能上来说,SQLAzureMW更强大一些。
总结
迁移现有SQL 数据库至SQL Azure有两种方法:SSMS和SQL Azure迁移向导。本文通过使用者两种方法对实例数据库NORTHWND进行迁移,最终生成了可以在SQL Azure上执行的SQL脚本,这样我们拿着现成的脚步就可以直接在云端去做部署了。