事务复制是数据同步中常用的一种手段,复制过程难免会遇到不少问题,就笔者遇到的问题而言,一般有两大类:一类是通过重新启动Distributor Agent即可解决的问题,另一类是因为Subscriber修改了数据,导致发布的数据有冲突,这类问题一般需要手工去修复。
TableDiff是SQL Server 2005的一个命令行实用工具,该工具可以比较两个表,并且生成数据同步的脚本。借助这个工具,可以很容易地修复两个表数据不一致的问题。
本文的第1部分介绍了TableDiff工具的用法和笔者的一些使用测试,第2部分介绍了如何借助这个工具来修复事务复制中的数据冲突问题。希望通过这两个部分的介绍,能让大家对于解决事务复制中的问题有所帮助。
DECLARE
@User sysname, @Pwd sysname, @lock sysname,
@Source nvarchar(1000), @Destination nvarchar(1000)
-- set parameters on here
SELECT
@User = '',
@lock = 'HOLDLOCK',
@Source = N'publisher.pubs..titles',
@Destination = N'subscriber.pubs..titles'
SELECT 'tablediff'
+ ' /sourceserver' + QUOTENAME(sSrv, '"')
+ ' /sourcedatabase' + QUOTENAME(sDb, '"')
+ ' /sourceschema' + QUOTENAME(sSch, '"')
+ ' /sourcetable' + QUOTENAME(sTb, '"')
+ CASE
WHEN @lock IS NULL OR @lock = '' THEN ''
ELSE ' /sourcelocked' + QUOTENAME(@lock, '"') END
+ CASE
WHEN @User IS NULL OR @User = '' THEN ''
ELSE ' /sourceuser' + QUOTENAME(@User, '"')
+ ' /sourcepassword' + QUOTENAME(@Pwd, '"')
END
+ ' /destinationserver' + QUOTENAME(dSrv, '"')
+ ' /destinationdatabase' + QUOTENAME(dDb, '"')
+ ' /destinationschema' + QUOTENAME(dSch, '"')
+ ' /destinationtable' + QUOTENAME(dTb, '"')
+ CASE
WHEN @lock IS NULL OR @lock = '' THEN ''
ELSE ' /destinationlocked' + QUOTENAME(@lock, '"') END
+ CASE
WHEN @User IS NULL OR @User = '' THEN ''
ELSE ' /destinationuser' + QUOTENAME(@User, '"')
+ ' /destinationpassword' + QUOTENAME(@Pwd, '"')
END
--+ ' /q'
--+ ' /c'
--+ ' /strict'
--+ ' /b"8000"'
--+ ' /bf"10000"'
--+ ' /f"c:\syn.sql"'
--+ ' /o"c:\output.txt"'
--+ ' /et"TableDiffResult"'
--+ ' /dt'
--+ ' /rc"3"'
--+ ' /ri"300"'
--+ ' /t"15"'
FROM(
SELECT
sSrv = ISNULL(PARSENAME(Source, 4), N'localhost'),
sDb = ISNULL(PARSENAME(Source, 3), N'master'),
sSch = ISNULL(PARSENAME(Source, 2), N'dbo'),
sTb = ISNULL(PARSENAME(Source, 1), N'notable'),
dSrv = ISNULL(PARSENAME(Destination, 4), N'localhost'),
dDb = ISNULL(PARSENAME(Destination, 3), N'master'),
dSch = ISNULL(PARSENAME(Destination, 2), N'dbo'),
dTb = ISNULL(PARSENAME(Destination, 1), N'notable')
FROM(
SELECT
border-right: medium none; padding-right: 0cm; bo
分享到:
相关推荐
TableDiff GUI工具的核心功能是比对数据库表的结构和内容,帮助数据库管理员快速定位并解决数据不一致的问题。以下是TableDiff GUI工具的一些关键特性: 1. **用户界面友好**:与TableDiff命令行工具相比,GUI版本...
标题中的“一个Windows界面的TableDiff表比较工具”指的是在Windows操作系统环境下运行的一款用于数据库表数据比较的应用程序。TableDiff是Microsoft SQL Server提供的一种命令行工具,主要用于对比两个数据库之间的...
总的来说,`tablediff`是Laravel开发中的一个实用工具,它简化了数据库表结构比较的过程,提高了开发效率,同时保证了不同环境下的数据一致性。通过理解和熟练使用`tablediff`,开发者可以更有效地管理复杂的数据库...
第16章 SQL Server 2005管理...351 16.4.7 sqlservr实例运行程序 352 16.4.8 sqlwb实用工具 352 16.4.9 tablediff表中的数据比较工具 353 16.4.10 其他实用工具介绍 354 16.5 SQL Server联机丛书 355
"TableDiff-开源"是一个专为数据库管理设计的开源工具,其主要功能是帮助用户方便地比较和跟踪数据库中的表的变化。这个工具提供了一个简洁的图形用户界面(GUI),使得数据库管理员或者开发者能够轻松地从数据库中...
Tools like tablediff, SQLCMD, DTA, SQL Profiler, and Replication Monitor will be discussed to demonstrate the different techniques used in monitoring, administering, and troubleshooting replication....