最近为了进一步装逼,决定将本博客的数据库从SQL Server 2008 R2迁移到Windows Azure上,即SQL Azure,云数据库。今天花了半天时间成功完成了迁移,把经验拿出来给大家分享。

注意:本文的方法只在SQL Server 2008 R2和SQL Server 2012数据库上试过,其他版本生死未卜。

首先,不管你现在的数据库是MSSQL2008R2的还是MSSQL2012的,你都需要安装SQL Server 2012版的SSMS。这是最方便的迁移方法。如果不想用SSMS,可以试试codeplex上的这个工具:http://sqlazuremw.codeplex.com/

1. 启动SSMS后,在要被迁移的本地数据库上点右键,选择Tasks - Deploy Database to SQL Azure...

2. 在弹出的向导中,点击Connect,连接到你在Windows Azure上创建好的SQL Azure服务器。并在“New database name”里输入目标数据库的名字。这个向导将会按照你的配置在SQL Azure上创建一个新数据库。

3. 点击下一步,进入Summary页面,确认配置是否正确。

4. 如果确认无误,点击“Finish”,向导就开始撸你的数据库了。不过要记住,请确保你的数据库里没有不正常的schema和user(比如从其他数据库服务器恢复到本机数据库就容易有这个问题),不然向导会爆掉。

5. 撸完以后,向导会提示你迁移成功,就OK了。

6. 然后,你得更改现有程序里的连接字符串。以我的ASP.NET博客为例,连接字符串如下:

<add name="ApplicationServices"
         connectionString="Server=tcp:服务器.database.windows.net,1433;Database=EdiBlog_75_AzureMigrationTest;User ID=用户名@服务器;Password=密码;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
         providerName="System.Data.SqlClient" />
<add name="EdiBlogEntities"
     connectionString="metadata=res://*/Entities.EdiBlog.csdl|res://*/Entities.EdiBlog.ssdl|res://*/Entities.EdiBlog.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=tcp:服务器.database.windows.net,1433;Database=EdiBlog_75_AzureMigrationTest;User ID=用户名@服务器;Password=密码;Trusted_Connection=False;multipleactiveresultsets=True;Encrypt=True;Connection Timeout=30;&quot;"
     providerName="System.Data.EntityClient" />

注意,EntityFramework的连接字符串一定要加上“multipleactiveresultsets=True”,不然运行时会爆掉。

7. 最后,测试你的应用程序,看看是否能正常操作数据库。这时候你应该能在Azure Portal上看到你的SQL Azure数据库了。如果看不到的话等个十几分钟应该就会刷出来。