一、应用场景
在数据库很大的情况下(现在很多数据库都太庞大了),对数据库进行备份需要花很长的时间,但是通过数据库复制(如事务快照),数据的同步时间相对短,数据安全也得到保障。
在实际应用中,如果只是同步少量的表,可以考虑使用链接服务器+触发器来实现数据同步;但当要同步的数据表比较多,就需要考虑用数据库复制技术,来实现数据的同步。
在下面的应用场景中都适合使用数据库同步技术:
Ø 负载均衡
通过将数据复制到其它数据库服务器来减少当前服务器的负载,比如说最典型的应用就是分发数据来分离OLTP和OLAP环境;如果数据库很大,压力很大,读写很频繁,那么为了分担单个数据库服务器的压力,可以通过数据库复制技术,来实现读写分离。
可以从一个数据库,把数据复制到多台服务器上,主数据库用于写,而其他几台服务器用于读取数据,减轻主数据库的压力。
Ø 分区
将经常使用的数据和历史数据隔离,将历史数据复制到其它数据库中;
Ø 授权
将一部分数据提供给需要使用数据的人,以供其使用;
Ø 数据合并
每个区域都有其各自的数据,将其数据进行合并。比如一个大公司,每个地区都有其各自的销售数据,总部需要汇总这些数据;
Ø 故障转移
复制所有数据,以便故障时进行转移;
二、基本概念
2.1 术语名词
SSMS
SQL ServerManagement Studio Express
SSCM
SQL Server 配置管理器/SQLServer Configuration Manager
BCP命令
bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。bcp可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出。在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中。
2.2 数据复制角色
复制服务有三个角色,分别是发布服务器,分发服务器和订阅服务器。
2.2.1 发布服务器
也称为出版服务器,主要负责数据的发布和出版工作。这个角色就像现实中的出版社。
发布服务器是一种数据库实例,它通过复制向其他位置提供数据。发布服务器可以有一个或多个发布,每个发布定义一组要复制的具有逻辑关系的对象和数据。
2.2.2 分发服务器
分发服务器是一种数据库实例,它起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据。它主要负责将发布服务器的内容分发给订阅者,是连接发布服务器和订阅服务器的桥梁。这个角色就好比快递公司,将商品辗转送达我们的手里。
每个发布服务器都与分发服务器中的单个数据库(称作分发数据库)相关联。
分发数据库存储复制状态数据和有关发布的元数据,并且在某些情况下为从发布服务器向订阅服务器移动的数据起着排队的作用。
在很多情况下,一个数据库服务器实例充当发布服务器和分发服务器两个角色。 这称为“本地分发服务器”。 当发布服务器和分发服务器按各自的数据库服务器实例配置时,把分发服务器称为“远程分发服务器”。
2.2.3 订阅服务器
订阅服务器是接收复制数据的数据库实例。订阅服务器可以接收来自多个发布服务器分发的数据。
根据所选的复制类型,订阅服务器还可以将数据更改传递回发布服务器或者将数据重新发布到其他订阅服务器。
图1数据库复制系统架构图
2.3 数据订阅方式
数据订阅的方式有推送订阅和请求订阅两种,两种订阅方式在初始化订阅和同步数据的运作方式不一样。
推送订阅主要是分发服务器将数据推给订阅服务器,订阅作业运行在分发服务器上。在快照生成后,SQL Server会自动访问快照并将BCP命令传递到订阅数据库上,无须额外设置。
请求订阅是订阅服务器主动向分发服务器取数据,订阅作业运行在订阅服务器上,消耗的是订阅服务器的资源,而不会对分发服务器的性能产生大的影响。快照生成后,需要设置订阅属性“快照位置”来指明如何获取快照数据。发布服务器上的快照路径必须是共享路径,且订阅服务器的快照路径和发布服务器快照路径一样。
订阅方式从通俗来说,就好比购买商品,如果商家通过快递送货上门就是推送订阅,消耗的是快递公司(分发服务器)的资源;如果自己到商城去购买就是请求订阅,消耗的是我们自己的资源(订阅服务器)。
在实际应用中,具体选择那一种订阅方式,需要考虑两方面的因素:
① 网络环境如果外网远程服务器需要订阅本地数据,由于本地服务器没有公网IP,则需要采取由本地向远程服务器进行推送订阅,即强制订阅的形式。
② 服务器性能如果订阅服务器和分发服务器都是外网IP地址或者内网IP地址,但是要求复制过程中不会对分发服务器产生过大的压力,这种情况就可以采取请求订阅的方式。
2.4 数据发布类型
数据发布类型共有四种,不同的发布类型,会有不同的效果,适用于不同的场景。下面对这四种发布类型简单描述。
2.4.1 快照发布
发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照。也就是间隔时间一到,把数据的快照,也就是所有数据,都发布到订阅端。一般适合同步间隔时间比较长的,比如1周才同步一次。
快照发布会隔一段时间去覆盖订阅服务器的数据库,在订阅服务器上做的修改同样被覆盖;在发布服务器需要设置代理时间计划,订阅服务器可以不用设置代理时间计划。
使用快照发布的场景:
Ø 很少更改数据;
Ø 在一段时间内允许具有相对发布服务器已过时的数据副本;
Ø 复制少量数据;
Ø 在短期内出现大量更改。
图2快照发布流程图
2.4.2 事务发布
在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。
也就是,设置好后,第一次会进行初始化,然后以后每次同步的时候,只是把修改的数据,比如insert、update、delete,同步到订阅端,一般适合对同步时间要求比较严格的情况,间隔时间可能就10秒,或者几分钟。
在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。
事务发布:是一种接近实时地从源到目标分发数据的方法;
事务性复制通常用于服务器到服务器环境中,在以下各种情况下适合采用事务性复制:
Ø 希望发生增量更改时将其传播到订阅服务器;
Ø 从发布服务器上发生更改,至更改到达订阅服务器,应用程序需要这两者之间的滞后时间较短;
Ø 应用程序需要访问中间数据状态。例如,如果某一行更改了五次,事务性复制将允许应用程序响应每次更改(例如,激发触发器),而不只是响应该行最终的数据更改;
Ø 发布服务器有大量的插入、更新和删除活动。
图3事务发布流程图
2.4.3 具有可更新订阅的事务发布
在 SQL Server 订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。来自订阅服务器的事务被应用于发布服务器。
具有可更新订阅的事务发布:订阅服务器可更新发布服务器的数据;
2.4.4 合并发布
在订阅服务器收到已发布数据的初始快照后,发布服务器和订阅服务器可以独立更新已发布数据,更改会定期合并。Microsoft SQL Server Compact Edition 只能订阅合并发布。
合并发布时发布服务器和订阅服务器的更新都会同步到对方,要特别注意ID在合并发布上的冲突。
合并发布通常用于服务器到客户端的环境中。
合并发布适用于下列各种情况:
Ø 多个订阅服务器可能会在不同时间更新同一数据,并将其更改传播到发布服务器和其他订阅服务器;
Ø 订阅服务器需要接收数据,脱机更改数据,并在以后与发布服务器和其他订阅服务器同步更改;
Ø 每个订阅服务器都需要不同的数据分区;
Ø 可能会发生冲突,并且在冲突发生时,您需要具有检测和解决冲突的能力;
Ø 应用程序需要最终的数据更改结果,而不是访问中间数据状态。例如,如果在订阅服务器与发布服务器进行同步之前,订阅服务器上的行更改了五次,则该行在发布服务器上仅更改一次来反映最终数据更改(也就是第五次更改的值)。
图4合并发布流程图
总结一下:
快照发布 每次都是复制所有的数据,所以如果数据量大,那么往往复制的时间会很长;
事务发布 只有第一次复制全部数据,以后每次只复制变化的部分,所以速度较快;
可更新订阅事务发布 和事务发布的区别在于订阅端数据变化可同步更新到发布端数据库;
合并发布 服务端和订阅端相对独立,只记录数据的变化结果来更新两边数据。
2.5 其它知识点
项目
项目用于标识发布中包含的数据库对象。一次发布可以包含不同类型的项目,包括表、视图、存储过程和其他对象。当把表作为项目发布时,可以用筛选器限制发送到订阅服务器的数据的列和行。
发布
发布是一个数据库中的一个或多个项目的集合。将多个项目分组成一个发布,使得更便于指定一组作为一个单元复制的、具有逻辑关系的数据库对象和数据。
订阅
订阅是把发布副本传递到订阅服务器的请求,订阅定义了将接收的发布和接收的时间、地点。
快照文件
快照复制或事务复制生成快照文件的类型有:
架构 (.sch)、数据 (.bcp)、约束和索引 (.dri)、约束 (.idx)、触发器 (.trg)(只用于更新订阅服务器)、压缩的快照文件 (.cab)。
事务代理
快照代理(snapshot agent)
分布式代理(Distributionagent)
日志读代理(log Readeragent)
合并代理(Merge agent)
队列读代理(Queue ReaderAgent)
其它提示
在快照发布和事务发布中,SQLServer需要使用快照来将数据库某一时间点的数据传递给订阅,快照使用BCP的机制。
已发布的快照版本无法向老版本数据库兼容,意味着2008下创建的事务或快照发布,无法被sqlserver2005订阅
需要特别说明的是这个数据库复制,并不是实时的,最短复制间隔为10秒,所以不能完全满足高安全性的要求,也就是当出现故障时,会有少量数据没有复制到订阅端。
参阅:
http://www.cnblogs.com/TeyGao/p/3530303.html Replication--如何使用快照来初始化化请求订阅
http://www.cnblogs.com/gaizai/p/3305879.html SQL Server 复制:事务发布
http://www.cnblogs.com/gbmf/archive/2009/06/04/1496013.html SqlServer数据库同步方案详解