最近有个维护的项目需要把 SQL Server 2012 的数据库迁移到 Azure SQL 上去,迁移过程可谓一波三折,故在此分享这次迁移中碰到的点点滴滴,希望对朋友们有所帮助。

Azure SQL 的版本

Azure SQL Database 是微软提供的 SQL 服务(PaaS)。最新的版本叫 Azure SQL Database V12,其实微软还是通过 SQL Server 2014 来提供数据库服务:

上图中第一个数据库服务器是本地安装的 SQL Server 2014,第二个和第三个则是云上的 Azure SQL Database。我们可以很清楚的看到,它们的版本是一样的。

但是可不要以为 Azure SQL Database 提供的数据库和本地安装版本是一样的噢。它们还是有不少差别的,这一点在迁移现有数据库时尤为重要。

由于提供的是在线的服务,所以 Azure SQL Database 可以快速的发布新特性,这些从不断更新的 MSDN 文档可见一斑。MS也强烈建议我们在和 Azure SQL Database 打交道时一定要用最新版的工具。笔者在刚开始使用了 SQL Server 2014 中的 SSMS (SQL Server Management Studio) ,结果连接 Azure SQL 后发现显示的信息和 Azure portal 对不上,安装最新版的 SSMS 后问题消失。

下面进入正题,看看迁移的过程中都需要什么样的工具,如何操作以及需要注意的事项。在此特别强调,旧数据库一般都是处于正在使用的状态,所以千万不要在真实的库上做各种实验。笔者所有的前期实验都是在通过恢复备份文件创建的测试库上完成的。

迁移要点分析

在云端创建 Azure SQL Server

Azure SQL Database 是运行在 Azure SQL Server 中的,所以我们要在 Azure 上先把 Azure SQL Server 创建好。操作过程比较简单,直接在 Azure 上添加 SQL Server (logical server) 就可以了,请注意选择合适的区域(这会影响访问速度)。

允许从本地访问 Azure SQL Server

Azure SQL Server 创建好以后,我们通过 SSMS 测试一下连接情况。当我们输入了正确的地址和用户信息后却弹出了一个提示框:

它提示我们,当前的IP不能访问 Azure 上的数据库服务器,并且让我以 Azure 账号登录并创建一条防火墙规则。

其实这是 Azure 提供的一个安全措施,它让你显式的指定哪些IP地址或者IP网段可以访问 Azure SQL Server。

此时我们有两种解决方法:

1.点击对话框中的 ”Sign in”,用 Azure 账户登录;然后点击 ”OK”,此时已经完成了防火墙规则的设置,SSMS 已登录 Azure SQL Server。这种方法一般用于开发和测试,只能添加当前客户端所使用的IP。

2.更加通用的方法是登录 Azure portal,进入 Azure SQL Server 的配置界面,为防火墙添加规则。同样的,可以添加单个IP也可以一次添加一个网段:

兼容性处理

由于 MS SQL Server 版本众多,且云上的版本与本地版本也有差异,所以能不能迁移成功,主要看能不能找到并解决数据库之间的兼容性问题。

下面将详细的介绍笔者碰到的兼容性问题。

兼容性处理详情

数据库中设置的用户不存在

兼容性检查的报告显示下面的信息:

Error SQL71564: Error validating element [xxxx]: The element [xxxx] has been orphaned from its login and cannot be deployed.

其中的xxxx是数据库中设置的用户名。

这个错误的原因是用户被定义在本地的 SQL Server 中,数据库中一旦使用用户的信息,把数据库迁移到云上后,就找不到对应用户的定义了,所以就需要移除本地用户的信息。

不用担心数据库的访问问题,因为完成迁移后,你可以使用刚才创建的 Azure SQL Server 账号访问数据库。当然你也可以为一个数据库创建独立的访问账号,具体操作请参考 MSDN。

不支持Extended Property

兼容性检查的报告显示下面的信息:

One or more unsupported elements were found in the schema used as part of a data package.

Error SQL71564: The element Extended Property: [dbo].[xxxx].[MS_Description] is not supported when used as part of a data package (.bacpac file).

其中的xxxx是数据库中一张表的名称。

这下可麻烦了,不支持 Extended Property!在笔者的数据库中有好几处都用到了这个特性。怎么办?只好一遍又一遍的查看程序。最后发现程序中没有使用这个特性,好像当时只是有人用它做了一些说明。还好,最终的结论是可以移除的。

创建 clustered index

兼容性检查的报告显示下面的信息:

One or more unsupported elements were found in the schema used as part of a data package.

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

其中的xxxx是数据库中一张表的名称。

需要给表创建 clustered index,这可不是一件小事情,因为任何对表的修改都可能会影响到程序逻辑,怎么办呢?网上的朋友们早就有了比较靠谱的解决方案,就是给表添加一列用来做 clustered index,这样原来表中的列就没有发生变化:

ALTER TABLE [xxxx] ADD

RowId int NOT NULL IDENTITY (, ) PRIMARY KEY CLUSTERED

GO

其他

还有一些点,主要是和业务相关的,就不在此赘述。个人感觉绝大多数的问题在网上都有不同的解决方案,关键是要采用自己的业务能够接受的方式去解决问题。

接下来把所有对数据库的变更写成一个脚本文件,在正式的迁移中,直接在正式库上执行脚本文件。

迁移过程

MS提供了不同的工具进行兼容性检查、迁移等工作。我们这里统统使用 SSMS (SQL Server Management Studio) 。

下面看看具体的操作步骤。

在 SSMS 中右键需要迁移的数据库,选择 Tasks 中的 ”Deploy Database to Microsoft Azure SQL Database…”。

在打开的向导中点击 “next” 进入 “Deployment Settings” 界面。

首先需要设置Azure SQL Server的连接地址和连接账号:

接下来设置迁移后的数据库名称和资源配置:

注意 Azure SQL Database settings,MS把数据库使用的资源划分成了三个不同的类别:Basic, Standard, Premium。每个类别中又划分了不同的收费标准,简单说就是你要使用更多更好的资源就要付更多的钱。当然也可以反过来说,如果我用的资源不多,付一点点钱就够了!

我们发现上图中的最后一行要求我们为 *.bacpac 文件指定一个存储路径。*.bacpac 文件是迁移过程中生成的中间文件,当兼容性检查通过后,就把数据库中的所有内容都导出到这个文件中。从这个信息我们可以得知,无论采用何种迁移方式,其核心操作都是两步:先从本地数据库生成 *.bacpac 文件,再从*.bacpac 文件恢复一个 Azure SQL Database。

单击 “Next” 显示配置的详情,再下一步就开始兼容性检查。如果没有兼容性问题,就执行迁移操作。

我的数据库存在一些兼容性问题,所以显示了错误报告并终止了迁移操作:

点击 “Result” 列中的链接就能看到详细的报告,前面已经介绍过兼容性问题,直接执行我们处理兼容性问题的脚本文件,然后再试一次!

这次的执行已经没有错误提示了,其实后台已经开始了迁移过程。比较不方便的是这个过程没有详细的进度提示,只能耐心等待。我的经验数据是8G的库完成迁移大概是8-12小时。当然这和你连接 Azure 的带宽有很大的关系…

结语

由于整个迁移过程涉及的方方面面实在太多,本文只是概要式的介绍笔者认为迁移过程中的要点和自己碰到的问题。总体感觉是MS提供的工具还算比较完善,网络上的各种已知问题解决方案也很详尽。所以尽管笔者碰到了很多的问题,但没有卡住的地方,总算磕磕绊绊的完成了数据库迁移的任务。

相关阅读:

最全的Windows Azure学习教程汇总

Azure Blob Storage 基本用法 -- Azure Storage 之 Blob

Azure Queue Storage 基本用法 -- Azure Storage 之 Queue

Azure File Storage 基本用法 -- Azure Storage 之 File

Azure Table storage 基本用法 -- Azure Storage 之 Table

迁移 SQL Server 数据库到 Azure SQL 实战的更多相关文章

  1. Microsoft: Get started with Dynamic Data Masking in SQL Server 2016 and Azure SQL

    Dynamic Data Masking (DDM) is a new security feature in Microsoft SQL Server 2016 and Azure SQL DB. ...

  2. SQL server 数据库备份还原Sql

    /************ 一.数据库备份 ************/ --完整备份默认追加到现有的文件 backup database DBXS To disk='d:\backup\DBXS_fu ...

  3. sql server 小技巧(7) 导出完整sql server 数据库成一个sql文件,包含表结构及数据

    1. 右健数据库 –> Tasks –> Generate Scripts   2. 选择所有的表   3. 下一步,选择Advanded, Types of data to script ...

  4. 通过sys.objects查询SQL SERVER数据库改动内容

    适用于: SQL Server 2008 + .Azure SQL 数据库.Azure SQL 数据仓库.并行数据仓库 系统视图sys.objects,在数据库中用户定义(创建)的每个架构范围对象(例 ...

  5. SQL Server数据库自增字段正确的插入值的描述

    我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...

  6. Sql Server数据库基础

    --------------------------------------第一章  Sql Server数据库基础------------------------------------------ ...

  7. MS Sql Server 数据库或表修复(DBCC CHECKDB)

    MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令.  1. DBCC CHECKDB  重启服务器后,在没有进行任何操作的情况下,在SQL ...

  8. SQL Server数据库应用技术

    SQL Server数据库应用技术 SQL是Structured Query Language的缩写.SQL是操作命令集,是一种功能齐全的数据库语言.SQL功能强大.简单.易学.使用方便,已经成为了数 ...

  9. Excel VBA 连接各种数据库(三) VBA连接SQL Server数据库

    本文主要涉及: VBA中的SQL Server环境配置 VBA连接SQL Server数据库 VBA读写SQL Server数据 如何安装SQL Client 系统环境: Windows 7 64bi ...

随机推荐

  1. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  2. RabbitMQ原理与相关操作(一)

    小编是菜鸟一枚,最近想试试MQ相关的技术,所以自己看了下RabbitMQ官网,试着写下自己的理解与操作的过程. 刚开始的第一篇,原理只介绍 生产者.消费者.队列,至于其他的内容,会在后续中陆续补齐. ...

  3. 网站上如何添加显示favicon

    favicon.ico图标是网站的缩略标志,可以显示在浏览器标签.地址栏左边和收藏夹,是展示网站个性的缩略logo标志,也可以说是网站头像.   要添加显示favicon,步骤如下: 1.生成favi ...

  4. [连载]《C#通讯(串口和网络)框架的设计与实现》- 10.宿主程序详细设计

    目       录 第十章           宿主程序详细设计... 2 10.1        配置文件设计... 3 10.2        加载设备驱动... 4 10.3        加载 ...

  5. GJM : Unity3D HIAR -【 快速入门 】 一、简介

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  6. 9.2.1 .net framework下的MVC 控件的封装(上)

    在写.net core下mvc控件的编写之前,我先说一下.net framework下我们MVC控件的做法. MVC下控件的写法,主要有如下三种,最后一种是泛型的写法,mvc提供的控件都是基本控件. ...

  7. Quartz框架(第一版)

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

  8. O365(世纪互联)SharePoint 之调查列表简单介绍

    前言 SharePoint中为了提供了很多开箱即用的应用程序,比如调查列表就是其中之一,同样,在O365版本里(国际版和世纪互联版本均可),也有这样的调查列表可以供我们使用,而使用起来非常方便和快速, ...

  9. 服务器开启https协议

    开启Tomcat https服务 发布企业级应用的时候遇到一个问题,就是IOS7.1之后app的下载地址URL必须是https开头的协议,所以服务器必须支持https协议. 实验环境:Mac OSX ...

  10. MarkdownPad 2 常用快捷键

    Ctrl + I : 斜体 Ctrl + B : 粗体 Ctrl + G : 图片 Ctrl + Q : 引用 Ctrl + 1 : 标题 1 Ctrl + 2 : 标题 2 Ctrl + 3 : 标 ...