一个事务复制的bug--更新丢失 续】的更多相关文章

阅读本文之前请参考http://www.cnblogs.com/stswordman/p/3258897.html 最近又做了一个case,环境是sql server 2008 R2. 客户添加了一个'replication support only'的订阅,之后发现现存订阅出现了更新丢失. 丢失的数据恰巧是添加订阅前的几秒钟内生成的. 我开始以为是log reader没有开启造成的,检查了distribution database的MSlogreader_history ,发现期间log re…
有两种情况会造成更新丢失,第一种是不正确的设置,例如外键或触发器的“Not For Replication” (NFR)属性没有开启.详情请参考http://blogs.msdn.com/b/apgcdsd/archive/2012/01/10/10254809.aspx 第二种是产品bug,例如使用了 MaxCmdsInTran http://support.microsoft.com/kb/2648158 前一阵我在做case的时候遇到了一个新的bug.这个bug在sql server 20…
原文:SqlServer 使用脚本创建分发服务及事务复制的可更新订阅 [创建使用本地分发服务器] /************************[使用本地分发服务器配置发布]***********************/ -- SqlServer 2008 R2 -- https://technet.microsoft.com/zh-cn/library/ms151860(v=sql.105).aspx use master go -- 服务器上是否已安装分发服务器 -- https://…
2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长,不对之处欢迎指正. sqlserver 2000事务复制问题服务器A(发布) 服务器B(分发+订阅)1.创建发布时对表identity属性问题因为该发布不允许使用可更新的订阅,当 IDENTITY 列被传输到订阅服务器时,不会传输 IDENTITY 属性.(例如,在发布服务器上定义为 INT IDENTITY 的列在订阅服务器上将定义为 INT.)如果想将 IDENTITY…
2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长●-● SQL Server 2000事务复制问题服务器A(发布) 服务器B(分发+订阅)1.创建发布时对表identity属性问题因为该发布不允许使用可更新的订阅,当 IDENTITY 列被传输到订阅服务器时,不会传输 IDENTITY 属性.(例如,在发布服务器上定义为 INT IDENTITY 的列在订阅服务器上将定义为 INT.)如果想将 IDENTITY 属性传输到订…
http://www.cnblogs.com/qanholas/archive/2012/03/22/2412444.html     一.为什么要使用对等事务复制 首先要说明的是使用sqlserver复制的目的 使用sqlserver数据库复制的目的,就是要将数据库压力由一台服务器分散到多台服务器,通过一台sqlserver服务器作为主机,将主数据库中的数据,复制到其他N台备份服务器上,从而实现分布式查询,大大降低了主服务器的压力. 在图一中,右面的拓扑结构就是典型的复制,写入的压力,全都在B…
Azure SQL DB 可以被配置成为 SQL Server 事务复制的一个订阅者( subscriber ). 主要应用场景有两种: 将您的数据迁移到 Azure SQL DB, 并且没有宕机时间. 将 Azure SQL DB 作为 SQL on-premises / on VMs 的一个备份或只读实例. 我们扩展了已有的事务复制逻辑以使得 Azure SQL DB 可以成为一个事务复制订阅者. 从使用的体验上来说,能够察觉到的唯一的区别是在你创建一个订阅者的时候:你需要提供 Azure…
Mysql 系列文章主页 =============== 刚开始学习 Mysql 锁的时候,觉得 Mysql 使用的是行锁,再加上其默认的可重复读的隔离级别,那就应该能够自动解决并发事务更新的问题.可事实上,并不能解决! 可是,为什么不能解决呢? 带着问题,自己写了个简单Demo,来测试并分析其中道理: Demo 代码路径:https://github.com/cyhbyw/cyh_Spring_IsolationConcurrencyTransaction Demo 工程名称:usingMyb…
网上找的, 没有作者信息, 只能在这里感谢一下了, 支持标准写法的四则运算 --2015-12-15 修改了一个内存泄漏的BUG - Pop方法没有释放申请的内存 unit Base.Calculate; interface uses System.SysUtils, System.Classes, System.Contnrs, System.Generics.Collections; type TTokenType = (tkNumber, tkAdd, tkSub, tkMul, tkDi…
事务复制使用 dbo.msrepl_transactions 和 dbo.MSrepl_commands 存储用于数据同步的Transaction和Command.在replication中,每个command只能更新(update,insert或delete)一条record:而在Publisher中,一个Trasaction能够更新Table Article的一条或多条Record,因此一个Transaction对应一个或多个command,只有当command全部执行成功,transact…
  随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的复制架构采用的是推送方式进行事务复制,发布服务器下面有4个从节点,两两指向同一虚拟IP,构成负载均衡,服务于不同的线上业务.对于4个节点,发布库和分法库的压力都很大,订阅库每秒I/O能达到5M,高峰时能达到数十兆.研究并试验了一些时间,给出一些优化建议: 1.硬件.数据库设计: 使用SSD磁盘,有钱…
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Replication的犄角旮旯(三)--聊聊@bitmap Replication的犄角旮旯(四)--关于事务复制的监控 Replication的犄角旮旯(五)--关于复制identity列 Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度) Replication的…
同事讨论删除发布表历史记录,导致订阅端数据滞后N小时.后来询问得知,发布表T只保留最近31天的数据,每天由Job删除31天前的数据,每天的删除量约400-500万条.默认情况下,在发布端删除400万条记录,这样的DEL将被作为一个大型的.多步骤事务发送到订阅服务器(有400万个命令写入到分发,并发送到订阅服务器).如果将删除命令封装成存储过程,并且复制存储过程的执行,则复制将仅发送在订阅服务器上执行存储过程的命令,而不会将所有DEL都写入分发数据库并随后通过网络将它们发送到订阅服务器.问题的原因…
1.脏读:一个事务读到另外一个事务还没有提交的数据.解决方法:把事务隔离级别调整到READ COMMITTED,即SET TRAN ISOLATION LEVEL READ COMMITTED.这时我们重复上面的动作会发现事务二会一直等到事务一执行完毕再返回结果,因为此时事务以已经把自己的更改ROLLBACK了,所以事务二可以返回正确的结果. 2.更新丢失: 3. 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同.解决方法:把事务隔离级别调整到REPEATABLE READ.使用SE…
本篇文章是SQL Server Replication系列的第四篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅.这一篇假设你遵循了前面三篇,并且你已经配置好发布.配置订阅为了能创建订阅,你必须使用一个(能够访问订阅服务器和发布服务器的)登录名连接到数据库.另外,这个登录名至少需要是订阅数据库和发布数据库的db_owner角色的成员.连接到发布服务器首先你需要在对象资源管理器下连接到订阅服务器.打开复制文件夹,…
本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库下).每一个项目对应一个数据库对象的全部或部分.一个数据库对象能够映射到多个发布中的项目.配置发布为了能够创建发布,你必须先把发布服务器与分发服务器联系起来.分发服务器可以是相同的SQL Server实例(Local Distributor)或者另一台机器上的单独实例(Remote Distribu…
本篇文章是SQL Server Replication系列的第四篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅.这一篇假设你遵循了前面三篇,并且你已经配置好发布.配置订阅为了能创建订阅,你必须使用一个(能够访问订阅服务器和发布服务器的)登录名连接到数据库.另外,这个登录名至少需要是订阅数据库和发布数据库的db_owner角色的成员.连接到发布服务器首先你需要在对象资源管理器下连接到订阅服务器.打开复制文件夹,…
本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库下).每一个项目对应一个数据库对象的全部或部分.一个数据库对象能够映射到多个发布中的项目.配置发布为了能够创建发布,你必须先把发布服务器与分发服务器联系起来.分发服务器可以是相同的SQL Server实例(Local Distributor)或者另一台机器上的单独实例(Remote Distribu…
复制类型: 1)事务型复制:通过复制事务日志到订阅点重做的方式,属于增量型复制: 2)合并型复制:通过触发器和元数据表追踪表数据改变,同样属于增量型复制: 3)快照型复制:通过创建数据库快照,并把快照复制到目标点,覆盖订阅端数据库,不追踪数据改变,属于替换型复制: 复制代理:一组SQL SERVER Agent Jobs用于整个复制过程中完成某个任务 分发代理:用于快照型复制和事务型复制,用于把初始化快照和事务日志分发到订阅服务器.它存在分发服务器或者订阅服务器取决于是推(Push)或者拉(Pu…
SQL Server 复制功能折腾了好几天了,现特将其配置过程以及其间遇到的问题记录下来,以备日后查阅.同时,也让“同道”同学们少走不必要的弯路.如果有不对之处,欢迎大家指正,欢迎沟通交流. 一.复制功能概述 SQL Server 复制功能实现了主从库的分离,从而将主库的压力分解掉,主库就主要负责数据的更.改等,而主库主要负责查询.(废话一句:本人之所以入了这个坑,还是因为项目需要,我勒个去~~,真的老血都吐了3.7坛了都).另外,有了主.从库,则从另一个方面,也多了一层安全性,即:备份.万一主…
原文:SQL Server 事务复制分发到订阅同步慢 最近发现有一个发布经常出现问题,每几天就出错不同步,提示要求初始化.重新调整同步后,复制还是很慢!每天白天未分发的命令就达五六百万条!要解决慢的问题,需要了解从发布数据库到订阅数据库中,有哪些操作,才知道哪个步骤同步缓慢. 这是很久之前自己做的一张图,主要描述发布到分发.分发到订阅中,复制使用了哪些操作,如下图: 发布到分发: 在发布中,复制是使用日志读取器读(sp_replcmds)取发布数据库中的事务日志的,日志读取器是按事务顺序读取的,…
一.环境要求及说明 1.快照复制和事务复制是单向的(2005及以后的版本中加入了订阅端可更新的事务复制). 2.合并复制是双向的. 3.快照复制对表结构没有要求. 4.事务复制要求表有主键. 5.合并复制要求表有 rowguid 列. ------------------------------------------------------- 快照复制 1.概念 快照复制是完全按照数据和数据库对象出现时的状态来复制和分发它们的过程. 快照复制不需要连续地监控数据变化,因为已发布数据的变化不被增…
事务复制使用 dbo.msrepl_transactions 和 dbo.MSrepl_commands 存储用于数据同步的Transaction和Command.在replication中,每个command只能更新(update,insert或delete)一条record:而在Publisher中,一个Trasaction能够更新Table Article的一条或多条Record,因此一个Transaction对应一个或多个command,只有当command全部执行成功,transact…
在使用Transactional Replication时,Subscriber 被认为是“Read-Only”的 , All data at the Subscriber is “read-only” (transactional replication does not enforce this at the Subscriber),不能更新Subscriber数据的主键,否则,某些数据更新操作会失败. 一,在Transactional Replication中,How Changes Ar…
今天碰到了一个奇怪的问题,是关于Oracle一个事务中的Insert和Update语句的执行顺序的问题. 首先详细说明下整个过程: 有三张表:A,B,C,Java代码中有一段代码是先在表A中插入一条数据,然后再更新表B的两个字段,更新的两个字段是特定值.并且插入和更新在一个事务中. 有个需求需要在表A添加一个Insert的行级触发器,在触发器里,插入表A一行记录后去表B查看更新的两个字段是否满足特定条件, 如果表B的两个字段同时等于特定值,则把表A和表B的数据整合下放到表C.触发器的初衷就是这样…
本篇文章是SQL Server Replication系列的第五篇,详细内容请参考原文. 这一系列包含SQL Server事务复制和合并复制的详细内容,从理解基本术语和设置复制的方法,到描述它是如何工作的,以及如何监控基本的复制进程.为了充分利用这一篇文章,你需要理解SQL Server数据修改操作,并熟练使用SSMS.第五篇假定你已经熟悉前四篇的内容.这一系列的前面几篇讨论了如何在多台服务器的环境配置发布.引入了分发服务器.发布服务器和订阅服务器,同时讲解了分发数据库.发布数据库和订阅数据库.…
原文:(初稿)SQL Server 复制(Replication)系列(2)--事务复制搭建 本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为发布服务器,RepB为订阅服务器.均安装WindowsServer 2008R2英文版(在外企工作的原因).并确保两台服务器能互访. SQL Server: 在上面的虚拟机中分别安装SQLServer 2008 R2 x64 英文企业版. 演示数据库: 微软示例数据库AdventureWorks20…
发布者是所有被复制(replicated)的数据的集合.每个发布者可以有多个发布(publication),每个发布项包含多个项目(articles),但是这些发布必须处于一个单一的数据库中,而每个项目又包含一个数据库对象的全部或者一部分.一个对象可以存在多个发布项中.下面是一个简单的示意图: 创建一个发布项 在创建发布项前,必须让发布者(Publisher)有一个对应的分发者(Distributor),分发者可以是与发布者同一个服务器,也可以想复制(6)中提到的分开独立的服务器. 权限 拥有数…
/*********************************************** 一个数据对象一个事务(且记录错误信息到处理对象) ***********************************************/ LOOP 要处理的对象 begin invoke api1 (api没有ROLLBACK机制) if api1有错 then rollback; 获取错误信息; 更新错误信息到处理对象; end if invoke api2 (api有ROLLBACK机…
本篇文章是SQL Server Replication系列的第五篇,详细内容请参考原文. 这一系列包含SQL Server事务复制和合并复制的详细内容,从理解基本术语和设置复制的方法,到描述它是如何工作的,以及如何监控基本的复制进程.为了充分利用这一篇文章,你需要理解SQL Server数据修改操作,并熟练使用SSMS.第五篇假定你已经熟悉前四篇的内容.这一系列的前面几篇讨论了如何在多台服务器的环境配置发布.引入了分发服务器.发布服务器和订阅服务器,同时讲解了分发数据库.发布数据库和订阅数据库.…