Replication--复制与CDC和镜像
复制和CDC 都是使用logreader来从日志中读取数据的变更,然后写入到分发库(复制)或变更表中。
1> 单独创建复制发布
在该情况下,会在分发服务器上创建日志读取代理作业(ServerName_DBName_logreaderID)
2> 单独使用CDC
在该情况下,会在当前实例的代理上创建两个作业‘cdc.DBName_capture’(调用sys.sp_MScdc_capture_job来读取日志)和‘cdc.DemoDB3_cleanup’(调用sys.sp_MScdc_cleanup_job来清理过期的变更历史记录)
3>先创建复制发布,再使用CDC
创建复制时在分发服务器上创建日志读取代理作业,使用CDC时只在当前实例的代理上创建作业‘cdc.DemoDB3_cleanup’
4>先使用CDC,再创建复制
使用CDC时,会在当前实例的代理上创建两个作业‘cdc.DBName_capture’和‘cdc.DemoDB3_cleanup’,然后在创建复制发布时,删除作业‘cdc.DBName_capture’,然后在分发服务器上创建日志读取代理作业。
当数据库上最后一个复制发布删除时,如果数据库还在使用CDC,则会删除复制的日志读取代理作业,创建一个CDC作业‘cdc.DBName_capture’。
当数据库上最后一个表上CDC被禁用时,不会删除CDC的作业,而如果在数据库级别禁用CDC时,会删除CDC相关的两个作业。
MSDN如是说:
当日志读取器代理同时用于变更数据捕获和事务复制时,复制的更改将首先写入分发数据库。 然后,捕获的更改会写入更改表。 两项操作会一起提交。 如果在写入分发数据库时有任何滞后时间,则在更改显示在更改表中之前,将有对应的滞后时间。
总结:
1.当复制和CDC一起使用时,CDC会使用复制的日志读取代理作业,代理作业读取到日志后,会优先将数据写入到分发库,然后再将数据写入到CDC的历史变更表中。
2. 无论在多少张表上启用CDC或创建多少个发布,一个数据库上只能有一个作业负责读取日志。
3. 默认情况下,日志需要等待被复制和CDC处理完成后才会被同步到镜像端。
JD DBR(肖磊削一刀)补充:
CDC和复制共同使用会有一些莫名其妙的bug,而这些bug不能完全重现,尚不知道因何引起,因此不推荐两者一起使用。
===============================================================================================
肖磊提到:在复制和CDC均有的环境中,直接删除最后一个发布将导致logreader被删除,即便CDC重新创建capture,但也会报错,貌似是LSN滞后的错误,导致CDC失效;
测试1:
步骤:搭建事务复制和CDC,事务复制使用表TB2,CDC使用表TB1,在对表TB1循环插入数据的同时,删除复制发布。
结果:复制发布被成功移除,新的capture作业被新建,历史跟踪表中数据未丢失(操作期间所有的操作都被写入到历史表中)
PS: 肖大侠所遇问题的场景与测试1的场景类似。
测试2:
步骤:在表TB1上启用CDC,然后在表TB1上创建快照复制,然后删除快照复制(UI操作)
结果:删除失败
解决办法:在表和数据库上禁用CDC后,可以正常删除快照复制
测试3:
步骤:在表TB1上启用CDC,然后在表TB1上创建事务发布,并创建订阅,保证订阅成功运行,在对表TB1循环插入数据的同时,删除复制发布。
结果:复制发布被成功移除,新的capture作业被新建,历史跟踪表中数据未丢失(操作期间所有的操作都被写入到历史表中)
测试总结:
在测试中未能重下肖大侠所说的问题,由于测试的局限性,肖大侠所说的问题仍需要考虑
解决办法猜想:
如果按肖大侠所说的LSN问题,那么是否可以在删除复制之前停用复制,然后再删除发布,这样是否可能降低问题出现的概率呢?
=================================================================================================
一台服务器上出现复制问题,日志读取出现问题,重启日志读起代理依然报错,错误提示如下:
- 错误消息:
- 进程无法在“WIN-SL4UN7FJ2UJ\SQL_MASTER”上执行“sp_replcmds”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20011)
- 获取帮助: http://help/MSSQL_REPL20011
- 未能在变更数据捕获变更表中插入行。请参阅当前会话中的以前错误以确定原因,并更正所有关联的问题。 (源: MSSQLServer,错误号: )
- 获取帮助: http://help/22863
- 进程无法在“WIN-SL4UN7FJ2UJ\SQL_MASTER”上执行“sp_replcmds”。 (源: MSSQL_REPL,错误号: MSSQL_REPL22037)
- 获取帮助: http://help/MSSQL_REPL22037
经调查,发布中的部分表开启了CDC功能。
解决办法:
1.禁用表和数据库上的CDC
2.重新初始化订阅
3.开启数据库和表上的CDC
=================================================================================================
参考链接:
1>禁用表上CDC http://msdn.microsoft.com/zh-cn/library/bb510702(v=sql.105)
2>禁用数据上CDC http://msdn.microsoft.com/zh-cn/library/bb522508(v=sql.105).aspx
惯例上图招狼
Replication--复制与CDC和镜像的更多相关文章
- 浅谈MySQL Replication(复制)基本原理
1.MySQL Replication复制进程MySQL的复制(replication)是一个异步的复制,从一个MySQL instace(称之为Master)复制到另一个MySQL instance ...
- Chapter 17 Replication 复制
Chapter 17 Replication 复制 Table of Contents 17.1 Replication Configuration 17.2 Replication Implemen ...
- 在Docker平台实现MySQL Replication(复制)
MySQL Replication提供了数据库之间复制数据的功能,通过这个功能可以让一个数据库的数据更改自动同步到另外一个数据库.通常用这个功能来实现数据备份.数据容灾.数据冗余,进一步实现数据的读写 ...
- Redis的Replication(复制)
文件并发(日志处理)--队列--Redis+Log4Net 分布式中使用Redis实现Session共享(二) http://www.cnblogs.com/stephen-liu74/archive ...
- Active Directory Replication(复制)
KCC(The Knowledge Consistency Checker)知识一致性检查器是一个内置的程序,在所有与管理器上运行,为林创建复制拓扑.默认,KCC15分钟间隔运行一次,根据当时存活的最 ...
- Windows 下MySql Replication(复制)配置
环境准备 到官网下载mysql-installer-web-community-5.7.21.0.msi并安装,选择MySql Workbench,记录安装时root输入的密码. 需要安装在两台机器上 ...
- MongoDB基础之九 replication复制集
准备工作:创建目录 mkdir -p /home/m17 //home/m18 /home/m19 /home/mlog 1:启动3个实例,且声明实例属于某复制集 # ./bin/mongod --d ...
- MySQL 5.6 Replication 复制 FAQ
原文请参照MySQL官方文档Reference Manual,版本5.6.10. 复制功能使得数据可以从一个MySQL数据库(master主库)复制到另一个或多个MySQL数据库(slave从库).缺 ...
- mysql replication 复制的一些问题
1 过大的复制延迟 mysql 的复制延迟是一个常见问题,现在已经有一些解决方案,如淘宝开发的一些工具 2 没有磁盘空间 复制导致磁盘空间塞满,二进制日志.中继日志或临时文件把磁盘塞满,slave ...
随机推荐
- 【Latex】数学公式排版
http://www.cnblogs.com/houkai/p/3399646.html 常用latex数学符号表 https://zh.wikipedia.org/wiki/Help:%E6%95% ...
- 不定义JQuery插件 不要说会JQuery
二.普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.extend(object) ...
- 基于.Net实现前端对话框和消息框
关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局等等一些本可以使用插件的.好了,废话不 ...
- C语言对文件的操作函数用法详解2
fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const ...
- 超全面的JavaWeb笔记day07<Java基础加强>
1.myeclipse安装和使用(**) 2.debug调试模式(**) - F6: 单步执行 - F8:结束断点,后面有断点到下一个断点 3.myeclipse快捷键(**) 4.junit单元测试 ...
- swift - UIImageView 的使用
1.创建 var imageView = UIImageView()//初始化 2.图片的显示及图片的改变 imageView = UIImageView(image: UIImage(named: ...
- 使用命令wsimport构建WebService客户端
原文:http://www.cnblogs.com/ningvsban/p/3760085.html wsimport命令介绍 在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据w ...
- Android package属性、package name和Application ID三者的联系及区别
package属性:在AndroidManifest.xml文件中. package name:模块结构的包名. Application ID:模块defaultConfig块下的applicatio ...
- ARM、MCU、DSP、FPGA、SOC各是什么?区别是什么?(转)
ARM ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器.更早称作Acorn RISC Machine.ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等 ...
- poj_1084 剪枝-IDA*
题目大意 给出一个由2*S*(S+1)构成的S*S大小的火柴格.火柴可以构成1x1,2x2...SxS大小的方格.其中已经拿走了几个火柴,问最少再拿走几个火柴可以使得这些火柴无法构成任何一个方格. 题 ...