将SQL server迁移到Windows Azure上的SQL database

Windows Azure把SQL作为服务提供给了用户,这项服务名为SQL database。尽管SQL database的后台也是SQL server,但是它与SQL server还是有很多的不同,具体体现在:

  • 不需要安装:通过Azure的管理门户,一个按钮就可以创建一个数据库,花费时间不超过10秒钟
  • 不需要配置:SQL database对用户隐藏了配置细节,用户看不到数据库文件和日志的存储位置,也看不到后台操作系统和文件系统,管理员需要做的,除了备份基本上啥事也没有了。而传统的硬件调优,完全不需要做了。用户只需要进行SQL优化
  • 不需要HA:传统配置HA的方式是配置双机进行主备切换。在SQL database上,Azure后台已经自动为每个数据库配置了1主两备,任何一份数据都会同步写到3个不同的物理服务器上,确保了高可用。另外,当一台服务器宕机时,Azure会自动创建另一个备份节点,保证永远都有3份拷贝运行
  • 价格经济:传统数据库采用CPU数进行授权。SQL database采用容量计费,而且是实际存储容量。比如用户申请了150G的数据库,但是只存了1G的内容,那么只会收1G的费用。1GB存一个月的大概费用是10美元,10GB大概50美元,100GB 175美元。可见容量越大,单价越低
  • 管理方便:SQL database提供了一个基于浏览器的管理工具,这个工具上可以进行数据库建表、查询、SQL执行统计等常用的功能。管理员执行一些简单的任务时,不再需要安装客户端管理软件,比如management studio,或者visual studio

下面是SQL database的架构图. 可见,SQL database后台是一个庞大的SQL server集群,每个用户见到的SQL database实例,是一个逻辑的概念,对应于SQL server集群上的一组实例。前端的负载均衡器根据策略将用户请求分发到3个实例的主实例上。而用户看到的SQL Server,也是一个逻辑的概念,对应一组逻辑资源。在SQL database上,一个SQL Server可以支持150个实例,同一个SQL server使用相同的访问控制策略,提供同一个管理门户入口。另外,多个用户是共享物理资源和SQL server的

当然,SQL database也有一些局限:

  • 最大只能150GB。再大的话要进行数据库分片(federation),将一个数据库显式分解为多个数据库,或者租VM装数据库
  • 不支持Windows认证,必须用SQL认证
  • 不支持传统的备份、恢复,提供了新的备份方式
  • 不支持Analysis Services, Replication, and Service Broker
  • 不支持Resource Governor, file group references, and some physical server DDL statements
  • 不支持SQL Server 2008过期的数据类型,也就说,向前兼容到SQL Server 2008
  • 所有的表必须有聚类索引(clustered index)

可见,一般的SQL应用,使用SQL database显然是最方便、最经济的。对于新应用来说,直接在Azure上建立新的数据库,并用visual studio、sql server management studio或者Web界面创建表就可以很快完成数据库的部署。但对于已有应用的迁移来说,如何进行迁移呢?

实际上,迁移的方法有很多种:

上面列出了7种方法,其中,方法1-4都是通过SQL server management studio完成的。这些方法执行效率较低,但过程很简单,适合于数据库规模较小的时候。而5和6采用BCP进行批处理,效率较高,适合于数据量较大的情况。其中方法6采用图形化界面,使用更方便。方法7可以实现本地数据库和远程数据库的连续同步,适合于多个数据库同时运行的情况,或者是需要数据库停机不停机的情况

采用SQL server management studio进行同步

具体步骤如下:

在sql server management studio中,右键要迁移的数据库,在task选项中可以看到很多项

其中,generate script会导出SQL,对应第4种方法。Deploy database to SQL azure对应第2种方法,export data-tier application 对应第1种方法,export data对应第3种方法。在很多情况下,方法1、2、3在导出或者导入的过程中发生错误的概率较大,导致迁移无法顺利进行,这主要是因为SQL database的某些限制,如用户、数据类型、索引等。因此,推荐用第4种方法进行迁移。这种方法直接使用SQL,即使有问题也可以及时编辑SQL进行调整。

导出建表SQL

在高级选项里面,把script for database engine type选成SQL Azure database

使用SQL语句进行迁移时,建议分为两个阶段,分别迁移schema和数据内容。在types of data to script里面,第一次选schema only. 导出后再次运行导出动作,选data only. 这样可以生成2个脚本,分别是建表和填充数据

在script indexes里面选true,表示要导出index。如果本地数据库有的表没有建聚类索引,那么需要在导出的SQL里面手动添加建聚类索引的语句。或者导出完成后对于SQL database的表建立聚类索引

另外,将Convert UDDTs to Base Types 设为true

新建SQL database

导出完成后,就可以将其导入Azure上的SQL database了。首先在Azure上创建database

在Limit database size部分需要注意,这里指定的是数据库容量的上限,如果要导入的数据库较大,则这个地方需要选的数值也要大。在Edition部分是数据库版本,Web版的容量上限是5GB,如果更大则要选Business

输入用户密码,选择区域为东亚

创建完成后,点击左边菜单的SQL database,在右侧找到创建的示例,然后点击进入

在dashboard的右侧点击manage allowed IP address,设置允许访问的客户端IP

点击add to allowed ip address,然后点击页面底部的Save

回到上一页,查看数据库域名。

在本地打开SQL server management studio,输入域名,用户名和密码,即可连入SQL database

之后就可以在SQL database上执行SQL操作,将刚才导出的表和数据发布到Azure上.

采用SQL database migration wizard 进行同步

该工具是一个开源工具,可以从http://sqlazuremw.codeplex.com/下载,它把数据库的内容用BCP进行批量导出,再批量导入到Azure上,导入时可以不考虑键的约束,因此效率很高。

启动这个工具后,选择分析并迁移数据库。可见这个工具支持多种迁移方式。

然后按下一步选择源数据库,之后直接按下一步即可,十分简单。可见导出命令是BCP,效率很高

下面继续,选择目标数据库,然后执行

不过,这个工具有个不足,就是迁移时,必须同时访问源库和目标库,而不能实现:先把源库导出文件->文件上传至Azure->文件导入目标库。如果有这样的需求,只能导出源库后,手动执行BCP了


使用该工具可以自动为我们建立聚类索引。这样基本上我们不需要修改原有数据库的任何配置,就可以进行迁移了。

使用Visual studio连接SQL database

SQL server management studio连接SQL database的时候,无法以图形化的方式展示表内容,也无法进行表设计,只能执行SQL。替代方法是用Visual studio的SQL工具。

在Visual studio菜单的视图->SQL server 对象资源管理器

打开后添加SQL database,填入Azure上SQL database的数据库地址,用户信息

下面就可以打开图形化界面了

从SQL database迁移回SQL server

把数据库从Azure迁移回来的过程与原过程想法,之前的7个方法只有方法2不可用。剩下的方法里面,如果数据量较大,仍推荐方法5和6. 数据量小时,可用1和4。 其中使用1的原因是:SQL database的备份方式就是data tier application(备份到Blob里),且SQL server management studio 2012已经支持直接从Azure Storage导入数据库。

首先在Azure门户上export数据库为dacpac文件,存储在blob里

然后在客户端进行导入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值