Azure进阶攻略 | 数据库上云:零停机、自动化
小明最近挺忙,刚刚在外地找了个新工作,正在忙着搬家。多年积攒的家当很多,根本不能潇洒地「说走就走」,于是他联系了搬家公司。专业的就是不一样,不费什么事,就把所有东西打包、运输、拆包到位了。抵达新城市的小明很快投入了新工作中。
上班第二天,上司就交代了一项任务:公司打算将本地部署的 SQL Server 数据库迁移到 Azure,并让小明出一份方案,必须将本地数据库内的数据尽快迁移上云,同时这一过程不能影响数据库的运作,更不能造成业务中断。
目前的具体情况是这样的:
公司本地运行着 SQL Server 2014,并已安装所有更新;
公司已经在 Azure 中开通了所需配置的 Azure SQL 数据库;
小明手头已经有两个数据库的访问凭据之类的东西。
那么,小明需要制定什么样的方案,执行什么样操作才能完成任务呢?不用麻烦,只要找对「搬家公司」,一样可以快速简单地把本地数据搬上云端

事务复制(TransactionalReplication)是由 SQL Server 快照代理、日志读取器代理和分发代理共同实现的一种复制操作,可在服务器和服务器之间实现下列任务:
发生增量更改时将其传播到订阅服务器;
从发布服务器上发生更改,至更改到达订阅服务器,应用程序需要这两者之间的滞后时间较短;
应用程序需要访问中间数据状态。例如,如果某一行更改了五次,事务复制将允许应用程序响应每次更改(例如,激发触发器),而不只是响应该行最终的数据更改;
发布服务器有大量的插入、更新和删除活动;
发布服务器或订阅服务器非 SQLServer 数据库的情况。
因此只需将 Azure SQL 数据库作为事务复制的订阅服务器,将本地 SQL Server 作为发布服务器,即可通过事务复制功能,直接将本地数据以「事务」的方式复制到 Azure,并确保不停机不中断,获得无缝的迁移体验。

事务复制功能的详细介绍可参阅这里。
使用SQL Server Management Studio
迁移实战
「搬家公司」已经有了,小明很快开始在 SQL Server Management Studio 中执行数据迁移操作:
1、创建一个新的事务复制。右键点击 Replication 下的 Local Publication,并选择 New Publication Wizard,会调出新建复制向导。

2、选择 Snapshot publication 或 Transactional publication,本文以 Transactional publication 为例。 
3、完成向导中的后续步骤,创建一个复制。 
4、创建一个新的订阅。右键点击刚创建的发布,选择 New Subscriptions,调出新建订阅向导。 
5、完成向导中所需步骤,在下图 Subscribers 页面,点击 Add Subscriber -> Add SQL Server Subscriber。 
6、输入所需的信息,连接到 Azure SQL DB。 
7、选择一个 Subscription Database 来接受复制内容。 
8、完成向导的余下部分,创建订阅。 
9、创建订阅后,可以看到改订阅出现在之前创建的发布下。 
接着只要等待就行了。取决于数据量等因素,整个过程可能会需要一段时间。在复制进行的过程中,本地数据库依然在正常运行,不会受到任何影响,同时本地进行的数据更新增减等操作,也会自动复制到 Azure。
为了验证复制是否已经生效,可以尝试在本地 SQL Server 发布的表中插入数据,并继续等待复制,如果插入的数据也出现在 Azure SQL 数据库对应的表中,即意味着复制已经顺利生效了。

你一定得知道的注意事项
事务复制是一种很强大的功能,但在使用时依然有些问题需要注意:
只支持 Snapshot 及单向事务(本地 SQL 到 Azure SQL)复制,不支持 Peer-to-peer 事务复制及MergeReplication。
目前仅支持 SQL Azure V12。
无法通过 SQL Database 门户来配置事务复制。
复制只能使用 SQL Server 身份验证方式登录连接到 SQL DB。
只支持 Push Subscription。
被复制的表必须要有主键。
此外,目前该功能要求发布服务器和订阅服务器至少是以下 SQL Server 版本之一:
SQL Server 2016 CTP3(预览版)和更高版本
SQL Server 2014 SP1 CU3 和更高版本
SQL Server 2014 RTM CU10 和更高版本
SQL Server 2012 SP2 CU8 和更高版本
SQL Server 2012 SP3(发行时) 推荐阅读
事务复制这个搬家公司怎么样?是不是让你的工作更加的高效便捷了,小编这里还有更多可以在你的操作中最常遇到的问题的解决办法,赶紧拿走吧:
《使用 Azure 虚拟机快速搭建安全的 FTPS 服务器》
对了,瞧小编这记性,差点就忘了一件大事被老板扣工资了,下面是大事。
大事:【Azure文档】菜单上线咯!
小伙伴们可以通过云科技公众号主页底部菜单【了解云】中的【Azure文档】菜单,一键获取你想得到想不到的 Azure 技术文档与示例等等无限量资源。
好了,就说这么多,更多的惊喜等你来发现!

Azure进阶攻略 | 数据库上云:零停机、自动化的更多相关文章
- Azure进阶攻略丨Azure网络通不通,PsPing&PaPing告诉你答案
很多时候,为了解决一些问题,要查各种文档,很麻烦你造吗!做「伸手党」又容易被鄙视,这时候就需要用到[Azure 进阶攻略]啦!特此,我们推出关于 Azure 常用操作指南的系列文章,每篇涉及一个 Az ...
- Azure进阶攻略丨共享访问签名是个什么东东?
Azure 进阶攻略]一经推出便受到了广大粉丝的热情追捧,大家纷纷表示涨了姿势,并希望能了解更多的攻略~根据大家的投票结果,本期,小编将为大家讲解“如何生成 Shared Access Signatu ...
- Azure 进阶攻略 | 上云后的系统,「门禁」制度又该如何实现?
各位办公室白领们,不妨回想一下自己每天去公司上班时的一些细节. 为避免「闲杂人等」进入工作场所,我们需要证明自己是这家公司的员工才能进入,对吧!所有员工,无论所属部门或职位,都必须先证明自己身份,例如 ...
- Azure进阶攻略 | 下载还是在浏览器直接打开,MIME说了算!
多年来,从一开始的网络菜鸟发展成 Azure 云专家,想必你一定学到了很多知识.不知道在这个过程中你自己是否遇到过,或者被人问到过类似下面这样的问题: 同样是直接点击网页上提供的 .mp4 视频文件链 ...
- Azure进阶攻略 | 该如何唤醒你?因内核超时而沉睡的Linux虚拟机!
周五下午,当你收拾好东西准备下班,奔赴 Happy Hour 时,突然接到开发团队的电话: 对方:伙计救命啊,我在搭建开发环境,但 Azure 上的 Linux 虚拟机无法启动! 你(心里想着:你要加 ...
- Azure进阶攻略 | VS2015和Azure,想要在一起其实很容易
下雨天,巧克力和音乐很配…… 大冬天,男神和捧在手里的奶茶很配…… 「驴牌」的包包,和女神的全部衣服都配…… 对于「王首富」,容易实现的小目标和一个亿是绝配…… …… 醒醒吧!!这些事情和每天只会写代 ...
- Azure进阶攻略丨如何驾驭罢工的Linux虚机网卡?
很多人的生活中,流传着一个屡试不爽,据说可以解决任何问题的百宝锦囊: 所以经常可以听到类似这样的对话: -我的电脑咋上不去网了? -重启一下电脑. -还是不行呢! -重启一下路由器. -怎么还不行-_ ...
- Azure进阶攻略 | 应用流畅运行杜绝超载,自有一套好方法
世界上很多东西,无论交通工具.房屋建筑,甚至计算机程序,在容量方面都存在设计上的理论最大值. 比如火车,正常情况下是这样的.舒适地坐着,安静地读一本书,时不时抬头若有所思地远眺车窗外风景,满满的文艺范 ...
- Azure进阶攻略 | 你的程序也能察言观色?这个真的可以有!
前段时间有个网站曾经火爆微博和朋友圈:颜龄机器人.只要随便上传一张包含人面孔的照片,这个网站就可以分析图片,并判断照片中人物的年龄.化妆.美颜 P 图.帽子墨镜之类的配饰,几乎都没法影响这个网站的检测 ...
随机推荐
- 在docker容器中安装vim命令进行编辑文件
首先执行: 执行apt-get update, 然后再次执行apt-get install vim即可成功安装vim. 然后我们就可以使用vim编辑 如果不进行更新就会报错: 此时会报出bash: v ...
- org.json里实现XML和JSON之间对象互转
org.json包里有一个类org.json.XML可以实现XML和JSON之间的转换.http://www.json.org/javadoc/org/json/XML.html JSONObject ...
- java 在web应用中获取本地目录和服务器上的目录不一致的问题
先来讲讲我所遇到的问题.最近有个新的项目添加新的功能. 修改之后部署到服务器上面发现取到classpath目录跑到别的地方去了.在本地测试却正常. 当时毛的着火了.硬是想不懂什么问题. 终于发现了这个 ...
- Go语言基础之2--字符串详解
一.字符串原理解析 1. 字符串底层就是一个byte数组,所以可以和[]byte类型互相转换:(字符串可以存文本,也可以存二进制,因为其本来就是一个字节流) 2. 字符串之中的字符是不能修改的,那怎 ...
- Clover笔记
1. Clover传参 a. jobflow传到子graph(GraphParameters): 设值: 用全局GraphParameters传递,在ExecuteGraph中的output mapp ...
- js 数字处理Number()
//js将数字转换保留2位小数 function toDecimal(x) { var val = Number(x) if (!isNaN(parseFloat(val))) { //toFixed ...
- 异地clone RAC数据库 +ASM USE RMAN
###sample 如何在本地生成数据库的备份,并复制到DG库新环境(高级) 1. 首先确定本地文件系统(存放备份集)足够大,可以使用如下语句查询当前数据库实际的使用总大小 Rman 备份进度: se ...
- 2019.03.21 读书笔记 枚举ENUM
其实没必要为枚举显式赋值,如果赋值了,就一定要全部赋值,否则默认在上一个元素的基础上+1,如果不给枚举变量赋值,就算枚举中没有0元素,也会显示为0,而超出枚举范围的整型数据,也会显示值本身,而不是异常 ...
- 本地git的使用
git和svn的解析 git 教程 git rebase的用法 attion: one: git中是严格区分大小写的,文件名字大小写敏感 two: git中分为:工作区,暂存区,分支 three: ...
- C# 进一取整
C#: // "/"号现在整形运算是取整,浮点运算时为除法运算 Console.WriteLine("(56/10):{0}", 56 / 10);//5 Co ...