首先说一下我们的环境

我们使用的是事务复制,复制是单向的,主服务器和从服务器都在同一个机房,当然不同机房也可以,只需要改一下IP和端口

下面的脚本在我们的SQLServer 2008上已经应用,暂时没有发现问题,当然,如果大家使用过程中有发现问题欢迎向我反馈o(∩_∩)o 

 

首先,我们为什麽要校验呢?

我们知道因为网络延迟,或者从库有写入的情况(当然一般我们在订阅端会设置为db_datareader,不允许写)会造成主从数据不一致的情况

无论是SQL Server还是MySQL,所以我们就需要进行数据校验,以便大概知道我们的数据什么时候开始不一致

而校验是不可能每时每刻都做校验的,因为需要读取全表数据,对性能会有影响

 

 

下面的过程只需要远程上去从服务器,也就是订阅服务器上面做就可以了,完全不需要远程主服务器也就是发布服务器

线上我们做复制的表都比较小,数据量也不大

我们做复制的最大一个表是600MB的表 

600MB的表 校验时间是1 分钟,那么可以推算 50000MB(50GB)的表 大概80分钟 ,至于这个时间根据不同的环境 硬件和软件 所需的校验时间可能会有所不同

我们使用的服务器是DELL R720 

 

这个脚本原理很简单,就是利用SQL Server的job每天定时执行来获取主从上面的数据,从而判断主从数据是否一致

废话不说了,上脚本


1、在订阅端执行查看哪些表做了复制

首先你需要知道你现在哪些表是做了复制的,当然有些人会到发布服务器上去看,点击几下按钮,其实在订阅端是有视图可以看出

当前哪些表做了复制的

--在订阅端执行
use [Task] -- 要复制的库
GO



select article from dbo.MSreplication_objects
group by article
GO

有9个表做了复制

用脚本定时监控SQL Server主从一致性

 

2、建立linkedserver

--建立linkedserver
USE [master]
GO

DECLARE @IP NVARCHAR(MAX)
DECLARE @Login NVARCHAR(MAX)
DECLARE @PWD NVARCHAR(MAX)

SET @Login = N'xxx' --★Do
SET @PWD = N'xxx'  --★Do
SET  @IP ='192.168.100.6,1433'


EXEC master.dbo.sp_addlinkedserver @server = @IP,@srvproduct = N'SQL Server'

EXEC master.dbo.sp_serveroption @server = @IP,@optname = N'collation compatible', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @IP,@optname = N'data access', @optvalue = N'true'
EXEC master.dbo.sp_serveroption @server = @IP, @optname = N'dist',@optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @IP, @optname = N'pub',@optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @IP, @optname = N'rpc',@optvalue = N'true'
EXEC master.dbo.sp_serveroption @server = @IP, @optname = N'rpc out',@optvalue = N'true'
EXEC master.dbo.sp_serveroption @server = @IP, @optname = N'sub',@optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @IP,@optname = N'connect timeout', @optvalue = N'0'
EXEC master.dbo.sp_serveroption @server = @IP,@optname = N'collation name', @optvalue = NULL
EXEC master.dbo.sp_serveroption @server = @IP,@optname = N'lazy schema validation', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @IP,@optname = N'query timeout', @optvalue = N'0'
EXEC master.dbo.sp_serveroption @server = @IP,@optname = N'use remote collation', @optvalue = N'true'
EXEC master.dbo.sp_serveroption @server = @IP,@optname = N'remote proc transaction promotion',@optvalue = N'true'

USE [master]
EXEC master.dbo.sp_addlinkedsrvlogin 
@rmtsrvname = @IP,
@locallogin = NULL, 
@useself = N'False', 
@rmtuser = @Login,
@rmtpassword = @PWD
View Code

相关文章:

  • 2022-12-23
  • 2021-09-01
  • 2021-11-12
  • 2021-05-22
  • 2022-12-23
  • 2021-07-28
  • 2022-01-26
猜你喜欢
  • 2021-09-14
  • 2021-06-22
  • 2022-01-10
  • 2022-01-09
  • 2021-12-17
  • 2022-12-23
  • 2021-11-20
相关资源
相似解决方案