我有三个他们复制的链接服务器。然后每两个小时。我想仔细检查一个高度事务性的表,以确保它是同步的。所以服务器A =服务器B,服务器B =服务器C.所以我有一个脚本,由于时间的原因,现在又一次失败(选择来自...... A,B,C的计数它们是否匹配)。由于声明是几毫秒的漂移,因为它是顺序运行的,最后是+/-行是在计算总数时。我的问题是有一种方法可以同时查询三台服务器上的表,或者是时间快照选项或任何其他最佳实践,以便同时在三台服务器上敏锐地检查三个表。 (表在SQL Server 2008 R2上有大约4百万行)
答案 0 :(得分:0)
如果您有一个存储添加记录的日期/时间的列,那么您可以使用它来获取整个数据库中某个时间点的准确计数。
首先设置一个变量来保存datetime
检查点:
declare @dateTimeCutOff datetime = GETDATE()
由于您没有提供任何代码,我不确定您是如何运行检查的,但您可以使用此值来查询服务器上的数据库:
SELECT COUNT(1)
FROM TransactionTable
WHERE DateAdded <= @dateTimeCutOff
如果对具有相同变量值的3个数据库表运行此查询(仅设置一次并在检查之间共享),它们应该产生相同的结果。
答案 1 :(得分:0)
如果您只检查3台服务器上的count
表,我可能会在链接服务器上执行PROCEDURE
的服务器上创建COUNT
CREATE PROCEDURE spc_GetTableCount @TableName sysname AS
DECLARE @RowVal int,
@SQLString nvarchar(max)
SET @SQLString = N'Select @RN=COUNT(*) from ' + @TableName + ' WITH (NOLOCK)'
EXEC sp_executesql @SQLString, N'@RN int OUTPUT', @RN = @RowVal OUTPUT
RETURN ISNULL(@RowVal, 0)
然后您可以从任何链接服务器执行此操作
DECLARE @RN int
exec @RN = servername.dbname.dbo.spc_GetTableCount 'TABLENAME'
Select @RN
WITH (NOLOCK)
将确保您在选择