《Replication的犄角旮旯》系列导读

Replication的犄角旮旯(一)--变更订阅端表名的应用场景

Replication的犄角旮旯(二)--寻找订阅端丢失的记录

Replication的犄角旮旯(三)--聊聊@bitmap

Replication的犄角旮旯(四)--关于事务复制的监控

Replication的犄角旮旯(五)--关于复制identity列

Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)

Replication的犄角旮旯(八)-- 订阅与发布异构的问题

Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具

---------------------------------------华丽丽的分割线--------------------------------------------

接触Replication只有1年多的时间;曾追随JD首席DBR(DB for Replication)陈璟同鞋学习复制,受益匪浅;

关于SQLServer Replication的文章看过不少,大多以原理介绍、如何搭建复制居多。本文旨在从生产环境出发,挖掘Replication中各种犄角旮旯的功能,使其成为运维环节中便于使用的工具;

如无特殊说明,本系列均是基于transaction replication场景;

变更订阅端表名的应用场景

本文以之前我在SQL PASS活动上分享的“翻滚吧 Replication”为背景,相关PPT及demo如下:

http://pan.baidu.com/s/1bnzvsuz

场景描述:一般通过快照或备份初始化,订阅端表名与发布端一致;而我们要研究的是订阅端表名与发布端不一致时的应用场景(发布端 table、订阅端table_new)

用途:适用于在不影响当前复制链路的情况下,实现对同一订阅存在多个副本,以至于延伸到可以满足数据移动、表结构变更等用途;

案例:对于一个较大的且数据表,如果业务方提出要升级表结构(如int类型改为bigint),如何尽量减少停机操作时间?如果这个表参与复制呢?如果被修改的column是主键呢?

操作:

  1、按照一般方法创建好一个publication,并添加需要发布的article;

  2、编辑项目属性,参照下图,编辑“目标对象名称”、“名称已被使用时的操作”及“语句传递”

    注:

      a)对于修改表结构(int类型改为bigint类型)的需求,可以先在订阅端创建新结构的新表(如table_new),在通过指定“名称已被使用时的操作”为“现有对象保持不变”,让订阅在应用快照时只写入数据而忽略表结构上不一致;

      b)事务复制是通过调用订阅端对应的ins、del、upd存储过程实现复制命令在订阅端的执行,为了不影响原有复制链路,需要自定义新的订阅端存储过程名

  3、添加订阅并通过快照初始化,即可生成“更名的订阅”;

  4、参照原订阅端旧表,添加对新表的相关权限、索引等;

  5、在停机维护窗口,停止发布端的写操作;

  6、待复制命令完全应用到订阅端后,拆除全部复制关系,交换订阅端table和table_new的表名,参照旧的复制关系重新添加不初始化的订阅,即可实现订阅端表结构的变更;

  至此,我们实现了大数据表升级表结构的业务需求,较之直接在数据表上进行alter table,时间大大缩短,且尽可能的避免长时间架构锁给业务带来的影响;

  对于无复制关系的单表而言,同样可以参照此方法创建“更名的订阅”实现表结构的升级,但需要注意的是SQLServer Replication的限制:

  1、同一个数据库不能既是发布又是订阅(自己复制到自己是不允许的);

  2、如果增加一个实例,实现A--B--A的链式复制,

    你会发现,即使复制链路可以搭建成功,但B--A,是不会应用复制命令的(貌似Replication将此类复制认为是形成了复制环,也是不被允许的)

  针对上述限制,就产生了我提出的另一个概念--复制回路;

  其实就是欺骗了一下Replication,既然2个实例被认为是复制环,那就再加1个实例:A--B--C--A,这样就实现了复制回路,相当于将A上的table重新复制回A上,并更名为table_new;

  关于复制回路2实例和3实例的测试,可以看一下我云盘中“复制回路Demo.flv”的演示;

  http://yun.baidu.com/share/link?shareid=2819400848&uk=120218674

Replication的犄角旮旯(一)--变更订阅端表名的应用场景的更多相关文章

  1. Replication的犄角旮旯(二)--寻找订阅端丢失的记录

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  2. Replication的犄角旮旯(八)-- 订阅与发布异构的问题

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  3. Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  4. Replication的犄角旮旯(三)--聊聊@bitmap

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  5. Replication的犄角旮旯(四)--关于事务复制的监控

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  6. Replication的犄角旮旯(五)--关于复制identity列

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  7. Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  8. Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  9. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

随机推荐

  1. .net类库里ListView的一个BUG

    今天在CSDN论坛里看一个帖子,说是在ListView中添加了条目后第一行内容不显示,为了还原他的问题我写了以下代码. private void LoadFiles(DirectoryInfo dir ...

  2. Linux下NFS服务器的搭建与配置

    一.NFS服务简介 NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的. 它最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享个别 ...

  3. PHP-redis中文文档介绍(转自http://www.jb51.net/article/33887.htm)

    Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号t ...

  4. C++中虚继承派生类构造函数的正确写法

    最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们 ...

  5. Linux中的工作管理(Job Control )

    以前使用Linux老是会不小心按下Ctrl + z,然后就出现看不懂的情况,以为程序突然就没了,今天专门研究了下Linux下的几个快捷键和工作管理. 其中找到一篇很不错的文章,大部分是里面转载的. 原 ...

  6. SparkContext的初始化(季篇)——测量系统、ContextCleaner及环境更新

    <深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...

  7. EM最大期望化算法

    最大期望算法(Expectation-maximization algorithm,又译期望最大化算法)在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计. 在统计计算中,最 ...

  8. mac系统 下 npm 安装 bower报错

    在mac终端运行 sudo npm install -g bower (安装之前你要确定你已经成功安装了node 和 git) 然后会报错 like this: npm ERR! Darwin 15. ...

  9. noip2010-t3

    [题目描述] S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来 ...

  10. centOS升级python3.5

    CentOS自带的版本是2.7.5  目前在看廖老师的教学,他给的新版本是3以上了,果断升级到最新的Python版本 (windows下面多线程里面有点问题没解决,所以才换到linux下继续学习) 一 ...