云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

时间:2021-11-17 16:49:23

如果数据库用的是SQL Server,那SQL Azure无疑是最吸引人的地方之一。在测试了虚拟机磁盘IO之后,我们迫不急待地进行了SQL Azure的测试。

(一)

首先进入manage.windowsazure.cn -> SQL DATABASES,创建一个数据库(如下图)。

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

输入数据库名称,选择BUSINESS版本,选择数据库空间大小,最后还要选择一下“New SQL  database server”(明明是第1次创建数据库,默认却显示Choose a server,让用户多了2次鼠标操作,这个地方需要改进)。

然后设置数据库用户帐户(SQL Server Management Studio远程连接时用的就是这个帐户),见下图:

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

数据库创建后成功后会显示如下图的信息,注意最后一列显示的服务器名称是随机字母序列,很不友好、很难区分(建议让用户可以指定服务器名称)。

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

然后点击数据库名称,进入DASHBOARD,点击右侧的Show connection strings,从连接字符串中得到服务器连接地址。

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

(二)

将SQL Server 2008数据库压缩备份文件上传至Azure虚拟机,在虚拟机中安装SQL Server 2012并恢复数据库备份文件。

在Management Studio中右键选择要迁移至SQL Azure的数据库,然后选择Tasks,就会看到Deploy Database to SQL Azure(见下图,SQL Server 2012的Management Studio才有这个功能)。当时想强大啊、方便啊,Management Studio直接内置SQL Azure的迁移功能,迁移过程会不会如“轻舟已过万重山”般轻松?

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

接着摁一下Deploy Database to SQL Azure,进入迁移界面点击Next,进入Deployment Settings界面,点击Connect,用之前创建的帐户与得到的服务器地址连接SQL Azure,然后选择Edition of SQL Azure与Maximum database size,得到如下的界面:

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

然后点击Next -> Finish,就开始Exporting database...

在美好的憧憬与期待中,心想不会这么轻松吧?。。。果然,没这么轻松,等来的是错误界面:

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

点开Validating schema model一看,晕掉了,一大堆错误。

云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

统计了一下,一共有750个错误。大多数错误是这样的:

Procedure: [存储过程] has an unresolved reference to object [另一个数据库].[dbo].[表]

所有涉及跨数据库访问的存储过程全部出错。

既然是存储过程引起的,那我们把所有存储过程干掉,再迁移试试。

还是出错,但错误少多了,只剩下13个错误,错误出在两个地方:1,数据库中已有的用户帐户;2,视图中的跨数据库访问。

于是,继续干掉用户帐户与所有视图,继续进行迁移,心想这下应该成功了。

结果让人大失所望,出现了74个错误!

让我们来具体看看这74个错误与哪些因素有关:

1. The element Extended Property: [dbo].[表名].[字段名].[MS_Description] is not supported when used as part of a data package (bacpac).

给字段添加了Description定义。

2. Element Index: [dbo].[表名].[索引名称] has an unsupported property FillFactor set and is not supported when used as part of a data package.

索引\主键\约束中定义了FillFactor。

3. Table Table: [dbo].[表名] does not have a clustered index.  Clustered indexes are required for inserting data in this version of SQL Server.

数据库表没有定义聚集索引。

4. Element Primary Key: [dbo].[表名] has an unsupported property DataCompressionOptions set and is not supported when used as part of a data package.

表启用了Data Compression。

难道还要干掉所有的索引(除了聚集索引),所有的Data Compression,所有的Description,才可以迁入SQL Azure!

(三)

试用感言

这让人想到了一部电影《绝代艳后》,玛丽·安托瓦内特在嫁入法国从奥地利进入法国边境时,除了自己的身体,什么都不能带入法国,包括衣服、心爱的宠物。难道从SQL Server迁移到SQL Azure也要这么干净吗?但这不是从奥地利到法国,这是从微软的一个“坑”到微软的另一个“坑”。

不考虑自家产品的兼容性,真是让人大失所望的糟糕设计。