位置: 编程技术 - 正文

Transactional replication(事务复制)详解之如何跳过一个事务

编辑:rootadmin

推荐整理分享Transactional replication(事务复制)详解之如何跳过一个事务,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在transactional replication, 经常会遇到数据同步延迟的情况。有时候这些延迟是由于在publication中执行了一个更新,例如update ta set col=&#; Where &#;,这个更新包含巨大的数据量。在subscription端,这个更新会分解成多条命令(默认情况下每个数据行一个命令),应用到subscription上。 不得已的情况下,我们需要跳过这个大的事务,让replication继续运行下去。

现在介绍一下transactional replication的一些原理和具体的方法

当publication database的article发生更新时, 会产生相应的日志,Log reader会读取这些日志信息,将他们写入到Distribution 数据库的msrepl_transactions和msrepl_commands中。

Msrepl_transactions中的每一条记录都有一个唯一标识xact_seqno,xact_seqno对应日志中的LSN。 所以可以通过xact_seqno推断出他们在publication database中的生成顺序,编号大的生成时间就晚,编号小的生成时间就早。

Distributionagent包含两个子进程,reader和writer。 Reader负责从Distribution 数据库中读取数据,Writer负责将reader读取的数据写入到订阅数据库.

reader是通过sp_MSget_repl_commands来读取Distribution数据库中(读取Msrepl_transactions表和Msrepl_Commands表)的数据

下面是sp_MSget_repl_commands的参数定义

这个存储过程有6个参数,在Transactional replication 中,只会使用前4个(并且第三个参数和第四个参数的值是固定不变的.分别为0和)。下面是一个例子:

execsp_MSget_repl_commands ,0xFAEA,0,

@agent_id表示Distributionagentid,每个订阅都会有一个单独的Distributionagent来处理数据。 带入@agent_id后,就可以找到订阅对应的publication 和所有的article。

@last_xact_seqno 表示上一次传递到订阅的LSN。

大致逻辑是:Reader读取subscription database的MSreplication_subscriptions表的transaction_timestamp列,获得更新的上一次LSN编号,然后读取分发数据库中LSN大于这个编号的数据。 Writer将读取到的数据写入订阅,并更新MSreplication_subscriptions表的transaction_timestamp列。然后Reader会继续用新的LSN来读取后续的数据,再传递给Writer,如此往复。

如果我们手工更新transaction_timestamp列,将这个值设置为当前正在执行的大事务的LSN,那么distribution agent就会不读取这个大事务,而是将其跳过了。

下面以一个实例演示一下

环境如下

Publisher: SQLW2K8R

Distributor: SQLW2K8R

Transactional replication(事务复制)详解之如何跳过一个事务

Subscriber: SQLW2K8R

图中高亮的publication中包含3个aritcles,ta,tb,tc

其中ta包含,,万数据,然后我们进行了一下操作

在:进行了更新语句,

update ta set c=-

后续陆续对表ta,tb,tc执行一些插入操作

insert tb values(0,0)

insert tc values(0,0)

之后我们启动replication monitor ,发现有很大的延迟,distribution agent一直在传递a)操作产生的数据

在subscription database中执行下面的语句,得到当前最新记录的事务编号

在我的环境中,事务编号为0xE9A

返回到distribution database,执行下面的语句,得到紧跟在大事务后面的事务编号. 请将参数替换成您实际环境中的数据。(请注意,如果执行下列语句遇到性能问题,请将参数直接替换成值)

在我的环境中,事务编号为0xC

在subscription database中执行下面的语句,跳过大的事务。请将参数替换成您实际环境中的数据

执行完成后开启distribution agent job即可。

接下来您就会发现,事务已经成功跳过,ta在订阅端不会被更新,后续的更新会逐步传递到订阅,延迟消失。

SQL语句中含有乘号报错的处理办法 在ADO中,我们需要在SQL语句中使用乘法运算,可是添加'*'以后执行程序总是会出错,这是因为‘*'与sql中的‘*'关键字重合了,所以编译会出错。解决办

SQL SERVER先判断视图是否存在然后再创建视图的语句 如果我们的语句为:IFNOTEXISTS(SELECT1FROMsys.viewsWHEREname='Report_IndividualTicket')BEGINcreateviewReport_IndividualTicketasSELECTTicket.TicketNumber,Ticket.TicketID,GisProcess.StageName,Co

sql中循环处理当前行数据和上一行数据相加减 以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的argument1相加存放到当前行的argument2中,比较简单。--droptable#temptablecreatetable#temptab

标签: Transactional replication(事务复制)详解之如何跳过一个事务

本文链接地址:https://www.jiuchutong.com/biancheng/320315.html 转载请保留说明!

上一篇:SQL SERVER中关于exists 和 in的简单分析

下一篇:SQL语句中含有乘号报错的处理办法(sql乘函数)

  • 企业生产经营管理包括哪些
  • 其他负债是流动负债还是非流动负债
  • 报销金额限制多少
  • 服务业的费用都有哪些
  • 网上认证勾选平台登录不成功
  • 当期处置子公司,当期还纳入合报范围嘛
  • 税务局代增值税专用发票冲红,如何重新申报退税
  • 固定资产评估增值的账务处理
  • 补交以前年度印花税记到哪个会计科目
  • 出现销项负数
  • 应交增值税为什么是销项减进项
  • 库存商品记错了怎样写分录
  • 算材料成本的时候要算增值税吗?
  • 小规模公司可以贷款吗
  • 为什么要预提企业收入
  • 零税率购房发票
  • 贴现的利息能不能取出来
  • 政府机关有纳税识别号吗
  • 案例讲解:当年度未及时取得有效凭证的相关成本、费用涉税处理
  • 业务招待费可以结转下年抵扣吗
  • 公司注销后原有债权
  • 装修费用如何做分录
  • 账务中如何把短期借款转变为实收资本?
  • 企业开具咨询费的发票
  • 公司成本和费用过高怎么办
  • 月销售不超过10万免征哪些税
  • 设备安装公司如何经营
  • 不征收增值税的项目有哪些
  • win10怎么删除搜索
  • iphone怎么格式化掉所有内容和设置
  • 系统升级为win11
  • 公司提取员工公积金
  • xshell远程连接linux命令
  • 出租厂房折旧可以税前扣除
  • PHP 中 Orientation 属性判断上传图片是否需要旋转
  • php aop
  • yolov3简介
  • 巴芬岛旅游
  • php正则函数内容匹配
  • php中面向对象
  • 政府会计制度下财务会计包含几要素
  • vue框架教程视频
  • 31.JavaScript数组进阶,一网打尽数组操作函数slice、filter、map、reduce、some、every、find、splice
  • 票据权利的取得要件
  • 收到银行承兑汇票
  • 什么情况下需要异地预缴增值税
  • 劳务成本 科目
  • 销售费用包括哪些明细科目
  • 预收款方式销售货物的会计分录
  • 无形资产分期付款入账价值如何核算?
  • 应交增值税进项税额转出账务处理
  • 企业收到的财政性补贴要交企业所得税吗
  • 建筑行业怎么确认主营业务收入
  • 退货只能退一半价钱合理吗
  • 物料损耗率计算例题及答案
  • 其他应收款坏账准备计提标准
  • 普通发票如何作废操作流程
  • 职工教育经费的差旅费可以抵扣吗
  • mysql修改默认编码
  • fedora常用命令
  • Solaris 10 Openssh安装和配置
  • vs显示进程已退出
  • mac上的
  • win10 directx9
  • 浮动浮动
  • jquerygrid
  • 下雪了作文
  • dos命令查看磁盘分区
  • javascript:void(0)的作用示例介绍
  • window.navigate 与 window.location.href 的使用区别介绍
  • 选择照片的快捷键
  • 使用ssh登录远程服务器有两种方法
  • unity3d改变物体坐标系
  • shell脚本实现文件移动、复制等操作
  • nodejs定义数组
  • android基础入门教程
  • python爬虫:入门+进阶
  • 税务要求实名认证
  • 中国进口0号柴油价格
  • 专票一个单位一张可以吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设