Step2:SQL Server 复制事务发布
一、背景
在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到这些数据,作为DBA你需要从权限和性能控制的角度出发,我采用了SQL Server的事务复制技术和timestamp,下面只讲述事务复制的搭建过程;
二、实现过程
(一) 环境信息
系统环境:Windows Server 2008 + SQL Server 2008 R2
发布服务器:192.168.1.151,服务器名称:USER-H2B2A89PEK
分发服务器:与发布服务器同一台机器
订阅服务器:192.168.1.152,服务器名称:USER-FJMO8L052U
发布数据库:Task
订阅数据库:TaskSiteInfo
数据库帐号:ReplicationUser/ ReplicationPassword
(二) 搭建步骤
A. 发布服务器配置
首先在发布数据库和订阅数据库上创建相同的帐号和密码(ReplicationUser/ ReplicationPassword),并且设置Task数据库的安全对象,设置这样的帐号的目的就是为了和程序连接到数据库的帐号区分开,可以做权限上的控制,方便问题的排查;
--更改安全对象的所有权
ALTER AUTHORIZATION ON DATABASE::[Task] TO [ReplicationUser]
在E盘目录下创建文件夹:E:\ReplData,并设置这个文件夹为共享目录,共享用户为barefootadmin;
(Figure1_1:文件夹权限)
这里需要设置SQL Server Agent登陆帐号为上面文件夹访问用户barefootadmin;
(Figure1_2:SQL Server Agent登陆帐号)
(Figure2:分发服务器)
如果你设置快照文件夹路径为:E:\ReplData,即使你的发布服务器本身就是分发服务器,如果订阅服务器是另外一台机器,那么在请求(Pull)订阅(如果是推送(Push)订阅就没有这个限制)模式下订阅代理是无法访问到这个快照文件的;除非你发布服务器、分发服务器和订阅服务器都是同一台机器;你应该设置快照文件夹路径为:\\USER-H2B2A89PEK\ ReplData;
(Figure3:快照文件夹)
(Figure4:数据库)
- 快照发布:隔一段时间会覆盖订阅服务器的数据库,在订阅服务器上做的修改同样被覆盖;
- 事务发布:是一种接近实时地从源到目标分发数据的方法;
- 具有可更新订阅的事务发布:订阅服务器可更新发布服务器的数据;
- 合并发布:发布服务器和订阅服务器的更新都会同步到对方,注意ID在合并发布上的冲突
(Figure5:事务发布)
注意表必须有主键才能进行复制,选择你必要的字段,这样可以减轻快照文件的大小和传输时间,而且在业务逻辑上更加安全,如果有需要,你还可以对记录进行过滤;
(Figure6_1:表字段)
(Figure6_2:表字段)
(Figure6_3:表字段)
(Figure7:快照代理)
(Figure8:安全设置)
使用上面创建好的ReplicationUser帐号作为连接到发布服务器的帐号和密码;
(Figure9:使用刚刚创建的帐号密码)
(Figure10:创建发布)
(Figure11:发布名称)
(Figure12:查看复制情况)
B. 订阅服务器配置
创建完发布服务器(分发服务器也一起创建了),接下来就可以创建订阅服务器了,下面是具体的步骤:
(Figure13:查找发布服务器)
(Figure14:查找发布服务器)
(Figure15:选择发布)
(Figure16:请求订阅)
(Figure17:订阅数据库)
(Figure18:订阅连接)
(Figure19:帐号密码)
(Figure20:代理计划)
(Figure21:初始化订阅)
(Figure22:创建订阅)
(Figure23:订阅)
(Figure24:发布服务器上的订阅)
(Figure25:复制监视器)
(Figure26:订阅数据库新增的表)
(Figure27:表数据)
三、注意事项
1. 在SQL SERVER下实现发布服务器和订阅服务器的通信正常(即可以互访),打开1433端口,在防火墙中设置入站规则;
2. 发布服务器与订阅服务器的SQL Server Agent代理帐号必须设置的一样,否则不能互访;
3. 如果你希望在复制的过程中一并复制非聚集索引,可以对发布属性-项目进行如下设置,修改完之后需要重新生成快照;
(Figure28:非聚集索引复制)
4. 复制代理:快照代理(snapshot agent) 分布式代理(Distribution agent)日志读代理(log Reader agent) 合并代理(Merge agent) 队列读代理(Queue Reader Agent)
5. 适合使用复制的一些场景包括:
1) 负载均衡:通过将数据复制到其它数据库服务器来减少当前服务器的负载,比如说最典型的应用就是分发数据来分离OLTP和OLAP环境;
2) 分区:将经常使用的数据和历史数据隔离,将历史数据复制到其它数据库中;
3) 授权:将一部分数据提供给需要使用数据的人,以供其使用;
4) 数据合并:每个区域都有其各自的数据,将其数据进行合并。比如一个大公司,每个地区都有其各自的销售数据,总部需要汇总这些数据;
5) 故障转移:复制所有数据,以便故障时进行转移;
6. 快照复制或事务复制生成快照文件的类型有:
架构 (.sch)、数据 (.bcp)、约束和索引 (.dri)、约束 (.idx)、触发器 (.trg)(只用于更新订阅服务器)、压缩的快照文件 (.cab)。
四、疑问
1. SQL Server 只有在完整日志模式下才能使用复制嘛?
解惑:在简单模式下一样可以使用复制;
2. 如果是跨网段(跨机房)的发布与订阅,有没办法实现?需要注意什么?
解惑:可以通过修改host文件的方式搭建复制,请参考:SQL Server跨网段(跨机房)复制
3. 如果说上面的情况可以在host设置,但是如果有端口映射的,host也无法设置吧?
解惑:在SQL Server配置管理器里建立别名,同样可参考:SQL Server跨网段(跨机房)复制
4. 订阅的形式可以选择推送订阅或者请求订阅,请求订阅降低分发服务器处理工作的开销,这个开销有多大呢?怎么计算影响?
解惑:只有在有很多订阅服务器的时候才比较明显,推送订阅与请求订阅更大的区别是在管理方面的不同;
Step2:SQL Server 复制事务发布的更多相关文章
- SQL Server 复制系列(文章索引)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 复制逻辑结构图(Construction) 系列文章索引(Catalog) 总结&am ...
- 【查阅】教你使用SQL SERVER复制
关键词:复制,复制总结,复制汇总,复制查阅 1.概念与搭建 Step1:SQL SERVER复制介绍 Step2:SQL Server 复制事务发布 Step3:SQL Server 通过备份文件初始 ...
- SQL Server 复制:事务发布
一.背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到 ...
- SQL Server 复制:事务发布(读写分离)
一.背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在YangJiaLeClub数据库中有表.存储过程.视图.用户定义函数,需要提供给其它程序读取放入缓存,程序需要比较及时的获 ...
- SQL Server提高事务复制效率优化(一)总体概述
随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...
- SQL Server 复制 订阅与发布
SQL Server 复制 订阅与发布 通过SQL Server 2008数据库复制实现数据库同步备份 SqlServer2008 数据库同步的两种方式(Sql JOB) SqlServer2008 ...
- (初稿)SQL Server 复制(Replication)系列(2)——事务复制搭建
原文:(初稿)SQL Server 复制(Replication)系列(2)--事务复制搭建 本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为 ...
- SQL Server 2000事务复制问题
2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长●-● SQL Server 2000事务复制问题服务器A(发布) 服务器B(分 ...
- SQL Server 复制 - 发布订阅(SQL Server 数据同步)
原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...
随机推荐
- darknet的安装及报错解决
darknet 是YOLO网络的一个框架,安装见官网:https://pjreddie.com/darknet/ 跟着步骤就可以安装好了. 由于官网是全英文的,所以本文根据官网进行中文释义. 本人在按 ...
- 【剑指offer】部分思路整理
题目 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去 ...
- Spark log4j日志配置详解(转载)
一.spark job日志介绍 spark中提供了log4j的方式记录日志.可以在$SPARK_HOME/conf/下,将 log4j.properties.template 文件copy为 l ...
- U盘安装ubuntu 16.04 遇到 gfxboot.c32:not a COM32R image boot 的解决方法
从U盘启动的时候出现了gfxboot.c32:not a COM32R image的问题,经过研究发现按下Tab键,会出现live live-install check memtest hd main ...
- SpringBoot 项目健康检查与监控(转)
前言 You build it,You run it, 当我们编写的项目上线后,为了能第一时间知晓该项目是否出现问题,常常对项目进行健康检查及一些指标进行监控.Spring Boot-Actuator ...
- 对比损失(Contrastive Loss)学习【转载】
转自:https://blog.csdn.net/autocyz/article/details/53149760 https://www.tensorflow.org/tutorials/repre ...
- git cherry-pick 报错is a merge but no -m option was given
gerrit上提示代码冲突的时候,我们首先会想到rebase下,不行的话就只能解决冲突了,最简单的做法是我的另一篇博客https://www.cnblogs.com/zndxall/p/9140813 ...
- express框架之session 存储
1.express-session 是基于express框专门用于处理session的中间件.这里不谈express-session怎么安装,只给出相应的实例代码.另外,session的认证机制离不开 ...
- 利用TensorFlow实现多元逻辑回归
利用TensorFlow实现多元逻辑回归,代码如下: import tensorflow as tf import numpy as np from sklearn.linear_model impo ...
- 使用github(一)
一.使用Github(目的.基本概念) 1.目的 借助github托管项目代码 2.基本概念 (1)仓库(Repository) 仓库即项目的意思,你想在github上开源一个项目,那就必须要新建一个 ...