事务复制

本文截取自MSDN https://msdn.microsoft.com/zh-cn/library/ms151176(v=sql.120).aspx

事务复制通常从发布数据库对象和数据的快照开始。创建了初始快照后,接着在发布服务器上所做的数据更改和架构修改通常在修改发生时(几乎实时)便传递给订阅服务器。数据更改将按照其在发布服务器上发生的顺序和事务边界应用于订阅服务器,因此,在发布内部可以保证事务的一致性。

事务复制通常用于服务器到服务器环境中,在以下各种情况下适合采用事务复制:

  • 希望发生增量更改时将其传播到订阅服务器。
  • 从发布服务器上发生更改,至更改到达订阅服务器,应用程序需要这两者之间的滞后时间较短。
  • 应用程序需要访问中间数据状态。例如,如果某一行更改了五次,事务复制将允许应用程序响应每次更改(例如,激发触发器),而不只是响应该行最终的数据更改。
  • 发布服务器有大量的插入、更新和删除活动。
  • 发布服务器或订阅服务器不是 SQL Server 数据库(例如,Oracle)。

默认情况下,事务发布的订阅服务器应视为只读,因为更改将不会传播回发布服务器。但是,事务复制确实提供了允许在订阅服务器上进行更新的选项。

事务复制的工作机制

事务复制是由 SQL Server 快照代理、日志读取器代理和分发代理实现的。快照代理准备快照文件(其中包含了已发布表和数据库对象的架构和数据),然后将这些文件存储在快照文件夹中,并在分发服务器中的分发数据库中记录同步作业。

日志读取器代理监视为事务复制配置的每个数据库的事务日志,并将标记为要复制的事务从事务日志复制到分发数据库中,分发数据库的作用相当于一个可靠的存储-转发队列。分发代理将快照文件夹中的初始快照文件和分发数据库表中的事务复制到订阅服务器中。

在发布服务器中所做的增量更改根据分发代理的计划流向订阅服务器,分发代理可以连续运行以尽量减少滞后时间,也可以按预定的时间间隔运行。由于数据更改必须在发布服务器中进行(使用事务复制时,无需指定立即更新或排队更新选项),从而避免了更新冲突。最后,所有订阅服务器都将获得与发布服务器相同的值。如果事务复制使用了立即更新或排队更新选项,更新可以在订阅服务器中进行,对于排队更新,可能会发生冲突。

下图显示了事务复制的主要组件。

初始数据集

新的事务复制订阅服务器中必须包含一些表,这些表需要与发布服务器中的表具有相同的架构和数据,这样才能从发布服务器中接收增量更改。初始数据集通常是由快照代理创建并由分发代理分发和应用的快照。初始数据集还可以通过备份或其他方式提供,如使用 SQL Server Integration Services 提供。

在向订阅服务器分发并应用快照时,只有那些等待初始快照的订阅服务器才会受到影响。该发布的其他订阅服务器(已经初始化的订阅服务器)不会受到影响。

并发快照处理

在快照生成期间,快照复制会在作为复制的一部分发布的所有表上放置共享锁。这样可以防止更新正在发布的表。并发快照处理(事务复制的默认方式)在整个快照生成过程中并不保留共享锁,因而允许用户在复制创建初始快照文件时继续工作,而不会被打断。

快照代理

快照代理在事务复制中实现初始快照所使用的过程与快照复制所使用的过程相同(上述有关并发快照处理的情况除外)。

生成快照文件后,可以使用 Microsoft Windows 资源管理器在快照文件夹中查看这些快照文件

修改数据修改与日志读取器代理

日志读取器代理在分发服务器中运行;它通常连续运行,但也可以按照您制定的计划运行。执行日志读取器代理时,它首先读取发布事务日志(该日志与执行一般 SQL Server 数据库引擎操作期间用于事务跟踪和恢复的数据库日志相同),并标识任何 INSERT、UPDATE 以及 DELETE 语句,或者对已标记为要复制的事务进行的其他数据修改。然后,该代理将这些事务批量复制到分发服务器中的分发数据库中。日志读取器代理使用内部存储过程 sp_replcmds 从日志中获取标记为要复制的下一个命令集。这样,分发数据库就成为一个存储-转发队列,从该队列中将更改发送到订阅服务器中。只有已提交的事务才能发送到分发数据库中。

当整批事务都成功写入分发数据库之后,将提交这批事务。在每一批命令都提交到分发服务器后,日志读取器代理将调用 sp_repldone 以标记最终完成复制的位置。最后,代理在事务日志中标记可以清除的行。仍在等待复制的行不会被清除。

事务命令在传播到所有订阅服务器或达到最大分发保持期之前,一直存储在分发数据库中。订阅服务器按事务在发布服务器中应用的相同顺序接收事务。

分发代理

对于推送订阅,分发代理在分发服务器上运行;对于请求订阅,分发代理在订阅服务器上运行。该代理将事务从分发数据库移动到订阅服务器中。如果订阅被标记为需要验证,则分发代理还要检查发布服务器和订阅服务器中的数据是否匹配。

时间: 2024-12-14 18:44:33

事务复制的相关文章

监控SQL Server事务复制

通常,我们可以使用SSMS的复制监视器来监控复制.但我们不能24小时盯着看,得使用自动化的方式来监控它.微软在distribution数据库提供了系统存储过程dbo.sp_replmonitorsubscriptionpendingcmds,用于返回订阅上等待的命令数,以及需要投递所有这些命令到订阅者的时间的预估.我创建了一个每10分钟运行的作业,保存状态的历史记录数据到一个表,数据保留14天. 这个表在订阅者服务器的DBA数据库创建,代码如下: CREATE TABLE dbo.Replica

在Sql2000 sql2005 sql2008 下已能实现事务复制的强制订阅,但请求订阅始终不能实现总有下列错误提示

硬件环境 : 一台服务器 安装了 sqlserver2008 数据库 局域网还有一台机器 安装了 sqlserver2000数据库 两台server 通信 共享均没有问题 同步过程中遇到的问题  : 在Sql2000下已能实现事务复制的强制订阅,但请求订阅始终不能实现总有下列错误提示: 进程未能读取文件 "\\快照路径" 由于发生操作系统错误 5.. 步骤失败. 数据库的 [订阅] .[公布] 设置步骤 : 做了 从sql2008 到sql2000的数据同步 ,在sql2008数据库

如何处理SQL Server事务复制中的大事务操作

如何处理SQL Server事务复制中的大事务操作 事务复制的工作机制 事务复制是由 SQL Server 快照代理.日志读取器代理和分发代理实现的.快照代理准备快照文件(其中包含了已发布表和数据库对象的架构和数据),然后将这些文件存储在快照文件夹中,并在分发服务器中的分发数据库中记录同步作业. 日志读取器代理监视为事务复制配置的每个数据库的事务日志,并将标记为要复制的事务从事务日志复制到分发数据库中,分发数据库的作用相当于一个可靠的存储-转发队列. 分发代理将快照文件夹中的初始快照文件和分发数

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

原文:Replication的犄角旮旯(四)--关于事务复制的监控 <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Replication的犄角旮旯(三)--聊聊@bitmap Replication的犄角旮旯(四)--关于事务复制的监控 Replication的犄角旮旯(五)--关于复制identity列 Replication的犄角旮旯(六)-- 一个DDL引发

我了解的数据库事务复制

事务复制 事务复制的基本机制,在联机文档上也有介绍. 基本原理 如图,主要依靠2个代理,1.日志读取代理(log reader agent),2.分发代理(distribution agent). 其中log reader agent,负责从发布数据库上读取日志并且写入到分发数据库(distribution)中.然后distribution agent负责从distribution读取数据并且写入到订阅中. Log Reader Agent 开profiler,使用tsql模板即可.在已经有复制

事务复制和镜像共存性的测试

事务复制的发布库同时也是镜像的主库,测试的目的是当镜像发生故障转移时,事务复制关系是否能同时自动转移. 环境:JOEPC\SQLJOEC,DB_TEST1,DB_TEST2_VM三台机都是Win2008_R2_SP1+SQLServer2008_R2_SP1. JOEPC,DB_TEST1都是物理机,DB_TEST2_VM是建立在DB_TEST1上的虚拟机. 关系说明:JOEPC\SQLJOEC是镜像关系的主体,是事务复制关系的发布者, DB_TEST1是镜像关系的见证者,是事务复制的分发者和订

SQL Server 事务复制调优(1)

在如今有规模的OLTP系统中,为了缓解数据库单点读写压力,特别是读的压力,采用复制多个副本,是解决问题的一个不错的方法. 而SQL Server的事务复制 Transactional Replication  是我们所采用的最多的复制形式.以往的一些文章总是介绍一些基本的搭建, 缺少一些优化方面的介绍,今天我就简单介绍其中一些可以调整优化的地方,(其实微软这方面已经做的很出色,默认的情况下就以能 满足我们大部分的情形,希望通过这篇文章的介绍,大家结合自己系统的实际情况,做些调整可能会有一些意想不

(初稿)SQL Server 复制(Replication)系列(2)——事务复制搭建

本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为发布服务器,RepB为订阅服务器.均安装WindowsServer 2008R2英文版(在外企工作的原因).并确保两台服务器能互访. SQL Server: 在上面的虚拟机中分别安装SQLServer 2008 R2 x64 英文企业版. 演示数据库: 微软示例数据库AdventureWorks2008 R2 配置事务复制 复制的配置可以使用T-SQL来实现,但是所需的T-SQL及存储过程加

SQL Server 复制(Replication) ——事务复制搭建

本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为发布服务器,RepB为订阅服务器.均安装WindowsServer 2008R2英文版(在外企工作的原因).并确保两台服务器能互访. SQL Server: 在上面的虚拟机中分别安装SQLServer 2008 R2 x64 英文企业版. 演示数据库: 微软示例数据库AdventureWorks2008 R2 配置事务复制 复制的配置可以使用T-SQL来实现,但是所需的T-SQL及存储过程加