1. tablediff是什么?

tablediff 实用工具用于比较两个非收敛的表中的数据,它对于排除复制拓扑中的非收敛故障非常有用。 后来发现SSIS中的Lookup控件同样可以实现对表的比较,而且不限于tabel column一致的情况;具体实现可以参照另外一篇博文:http://zalman.blog.51cto.com/5251664/1396468

2. tablediff用哪些用法?

1) . 在充当复制发布服务器的 Microsoft SQL Server 实例中的源表与充当复制订阅服务器的一个或多个 SQL Server 实例中的目标表之间进行逐行比较。
2) . 通过只比较行数和架构可以执行快速比较。
3) . 执行列级比较。
4) . 生成 Transact-SQL 脚本,用以修复目标服务器中的差异,以使源表和目标表实现收敛。
5) . 将结果记录到输出文件或目标数据库的表中。

3. tablediff  语法

tablediff
[ -? ] |
{-sourceserver source_server_name[\instance_name]-sourcedatabase source_database -sourcetable source_table_name [ -sourceschema source_schema_name ][ -sourcepassword source_password ][ -sourceuser source_login ][ -sourcelocked ]-destinationserver destination_server_name[\instance_name]-destinationdatabase subscription_database  -destinationtable destination_table [ -destinationschema destination_schema_name ][ -destinationpassword destination_password ][ -destinationuser destination_login ][ -destinationlocked ][ -b large_object_bytes ] [ -bf number_of_statements ] [ -c ] [ -dt ] [ -et table_name ] [ -f [ file_name ] ] [ -o output_file_name ] [ -q ] [ -rc number_of_retries ] [ -ri retry_interval ] [ -strict ][ -t connection_timeouts ]
}

参数说明:
[ -? ]  返回支持参数的列表。-sourceserver source_server_name[\instance_name] 源服务器的名称。 指定 SQL Server 默认实例的 source_server_name。指定 SQL Server 命名实例的 source_server_name\instance_name。-sourcedatabase source_database 源数据库的名称。-sourcetable source_table_name 正在检查的源表的名称。-sourceschema source_schema_name  源表的架构所有者。 默认情况下,表所有者假定为 dbo。-sourcepassword source_password    使用 SQL Server 身份验证连接到源服务器时所使用的登录帐户的密码。
安全说明

可能的话,请在运行时提供安全凭据。 如果必须在脚本文件中存储凭据,则应保护文件以防止未经授权的访问。

-sourceuser source_login  使用 SQL Server 身份验证连接到源服务器时所使用的登录帐户。 如果未提供 source_login,则连接到源服务器时使用 Windows 身份验证。请尽可能使用 Windows 身份验证。-sourcelocked  在使用 TABLOCK 和 HOLDLOCK 表提示的比较过程中锁定源表。-destinationserver destination_server_name[\instance_name]  目标服务器的名称。 指定 SQL Server 默认实例的 destination_server_name。指定 SQL Server 命名实例的 destination_server_name\instance_name。-destinationdatabase subscription_database  目标数据库的名称。-destinationtable destination_table  目标表的名称。-destinationschema destination_schema_name 目标表的架构所有者。 默认情况下,表所有者假定为 dbo。-destinationpassword destination_password  使用 SQL Server 身份验证连接到目标服务器时所使用的登录帐户的密码。
安全说明

可能的话,请在运行时提供安全凭据。 如果必须在脚本文件中存储凭据,则应保护文件以防止未经授权的访问。

-destinationuser destination_login  使用 SQL Server 身份验证连接到目标服务器时所使用的登录帐户。 如果未提供 destination_login,则连接到该服务器时使用 Windows 身份验证。请尽可能使用 Windows 身份验证。-destinationlocked  在使用 TABLOCK 和 HOLDLOCK 表提示的比较过程中锁定目标表。-b large_object_bytes 大型对象数据类型列中要比较的字节数,这些数据类型包括:text、ntext、p_w_picpath、varchar(max)、nvarchar(max) 和 varbinary(max)。 large_object_bytes 默认为列的大小。任何大于 large_object_bytes 的数据将不进行比较。-bf number_of_statements  使用 -f 选项时要写入到当前 Transact-SQL 脚本文件中的 Transact-SQL 语句数。 当 Transact-SQL 语句数超过 number_of_statements 时,将创建一个新的 Transact-SQL 脚本文件。-c   比较列级差异。-dt   删除 table_name 指定的结果表(如果该表已经存在)。-et table_name  指定要创建的结果表的名称。 如果该表已经存在,则必须使用 -DT,否则操作将失败。-f [ file_name ]  生成 Transact-SQL 脚本,以使目标服务器中的表与源服务器中的表实现收敛。 (可选)可以指定生成的 Transact-SQL 脚本文件的名称和路径。如果未指定 file_name,则会在运行实用工具的目录中生成 Transact-SQL 脚本文件。-o output_file_name  输出文件的完整名称和路径。-q   通过只比较行数和架构可以执行快速比较。-rc number_of_retries  实用工具重试失败操作的次数。-ri retry_interval   两次重试之间的等待间隔(秒)。-strict  对源架构和目标架构进行严格比较。-t connection_timeouts  设置与源服务器和目标服务器连接时的连接超时时间(秒)。

4. tablediff 注意事项
tablediff 默认存放路径(SQL SERVER 2008) : C:\Program Files\Microsoft SQL Server\100\COM
tablediff 实用工具不能用于非SQL SERVE服务器
若要比较表,您必须要有比较表对象的 SELECT ALL 权限

5. tablediff 使用举例

创建测试环境:

--SERVER :HOUYAJUNuse TESTgocreatetable person(id intidentity(1,1),name varchar(50) default('guoqiang'),[address]varchar(100) default('anhui hefei'),infro varchar(100))goinsertinto person(infro)select'test1'unionselect'test2'unionselect'test3'goselect*from TEST.dbo.person with(nolock)-- SERVER: HOUYAJUN\JHIDCDBS005use RepTestgocreatetable person(id intidentity(1,1),name varchar(50) default('guoqiang'),[address]varchar(100) default('anhui hefei'),infro varchar(100))goaltertable RepTest.dbo.person add t1 intinsertinto person(infro)select'test1'unionselect'test2'unionselect'test3'go2select*from TEST.dbo.person with(nolock)

参数 -c : 比较列差异

a.两个表结构完全相同且数据相同

b. 我们来在HOUYAJUN\JHIDCSDBS005上面的表加10行数据

insertinto RepTest.dbo.personselect't_04', 't_05' ,'t_06'go10

再执行上面同样的命令可以看到以下不同:

在此处我们可以看到我对B表修改的列的主键,我们可以根据这些可对表进行操作。在下面会讲述如此对这些数据不一致进行生动生成脚本

c. 如果我们再对表结构进行修改

altertable RepTest.dbo.person add te01 int

再执行上述语句可以看到以下情况:

d. 在此处我们可以看到不同,但不能看到具体的不同,我们再来把刚才多余的数据进行删除看看有什么

deletefrom RepTest.dbo.person where id in (4 ,5 ,6 ,7 ,8 ,9 ,10,11 ,12,13)

可以看到和上面一样的错误,但是没有出现错误到底是什么不同哦。

参数 -q : 通过只比较行数和架构可以执行较快速比较

和上面-c的基本是一样。我们再来把多出的一列删除掉,插入2条记录看一下。

altertable reptest.dbo.person dropcolumn te01goinsertinto RepTest.dbo.personselect't_04', 't_05' ,'t_06'go2

现在应该是表结构一样,数据多了2个

可以看到这个是把2个表的数据行写出来了,一个为3,另外一个为5,没有指定那些不同,但是可以到出2个表是不一样的。

参数 –f: 生成T-SQL脚本,以使目标服务器上的表与源服务器上的表实现收敛

参数 –o: 输出文件的完整名称和路径。可以输出日志信息。

在这里我们没有看到错误信息了,因为错误信息已经写在了log里面,而persondiff则为对应的SQL修改语句。

log 信息为:

Table[test].[dbo].[person]on houyajun andTable[reptest].[dbo].[person]on houyajun\jhidcdbs005 have 2 differences.Fix SQL written to d:persondiff.sql.Err    id    ColDest. Only14    Dest. Only15    The requested operation took 0.154 seconds.

persondiff.sql 的信息为:

-- Host: houyajun\jhidcdbs005-- Database: [reptest]-- Table: [dbo].[person]SETIDENTITY_INSERT[dbo].[person]ONDELETEFROM[dbo].[person]WHERE[id]=14DELETEFROM[dbo].[person]WHERE[id]=15SETIDENTITY_INSERT[dbo].[person]OFF

附一个查询,可以直接粘在dos下,然后修改一下对应的参数:

DECLARE@sourceserver sysnameDECLARE@sourcedatabase sysnameDECLARE@sourceschema sysnameDECLARE@sourcetablenvarchar(1000)DECLARE@destinationserver sysnameDECLARE@destinationdatabase sysnameDECLARE@destinationschema sysnameDECLARE@destinationtablenvarchar(1000)select@sourceserver='HOUYAJUN' ,@sourcedatabase='TEST',@sourceschema='dbo',@sourcetable='REPET',@destinationserver='HOUYAJUN\SS005',@destinationdatabase='TEST',@destinationschema='dbo',@destinationtable='REPET'SELECT'tablediff -sourceserver '+@sourceserver+' -sourcedatabase '+@sourcedatabase+' -sourceschema '+@sourceschema+' -sourcetable '+@sourcetable+' -destinationserver '+@destinationserver+' -destinationdatabase '+@destinationdatabase+

摘自:http://www.cnblogs.com/zerocc/p/3233277.html

转载于:https://blog.51cto.com/zalman/1396465

TabelDiff实用工具相关推荐

  1. 如何使用 ASP.NET 实用工具加密凭据和会话状态连接字符串

    文章编号 : 329290 最后修改 : 2006年4月10日 修订 : 8.0 重要说明:本文包含有关如何修改注册表的信息.修改注册表之前,一定要先进行备份,并且一定要知道在发生问题时如何还原注册表 ...

  2. windows installer清理实用工具

    今天编译了一个程序,一个Windows Service卸载命令写错了,导致这个程序不能正常卸载. 只好手动卸载这个Windows Service,之后再卸载程序,依然不能卸载.最后只好使用MSICUU ...

  3. Unix实用工具教程:《sed与awk》修订第三版清晰版

    为什么80%的码农都做不了架构师?>>>    Unix实用工具教程:<sed与awk>修订第三版清晰版 本书介绍了一组名字奇特的Unix实用工具sed和awk,这组实用 ...

  4. ServiceModel 元数据实用工具 (Svcutil.exe)

    ServiceModel 元数据实用工具用于依据元数据文档生成服务模型代码,以及依据服务模型代码生成元数据文档. 在win7系统中的路径为C:\Program Files\Microsoft SDKs ...

  5. Scott Hanselman's 推荐的的实用工具集合(2011版)

    Scott Hanselman活跃于.NET社区,这篇文章来自于它的工具列表,地址是http://www.hanselman.com/tools .NET开发人员应该收藏的工具 LINQPad 快速理 ...

  6. wps右键新建里面没有word和excel_WPS竟然出过这么多实用工具?每个都免费无广告,简直相见恨晚...

    没想到,总被各种吐槽的WPS,竟然还出过这么多实用工具!向你分享4款WPS出品的软件和网站,其中1款让我又爱又恨,而另外几款免费无广告,和三顿一起来看看吧!WPS图片电脑上到底有没有好用的看图软件?这 ...

  7. 十款让 Web 前端开发人员更轻松的实用工具

    这篇文章介绍十款让 Web 前端开发人员生活更轻松的实用工具.每个 Web 开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具, ...

  8. 实用工具类库java.util

    本章介绍Java的实用工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.例如,Java提供日期(Data)类.日历(Calendar)类来产生和获取日期及时间,提供随机 ...

  9. 工作中常用,实用工具推荐!

    原文:工作中常用,实用工具推荐! Red Gate 家族 大名鼎鼎的RedGate,相信大家都不会陌生,Reflector就是它家做的.这里就不介绍了.我本地安装的是09年下的一个套装,我介绍下常用的 ...

最新文章

  1. 设置Button控件创建完毕时触发的事件.
  2. Alpha版验收通过
  3. **Java有哪些悲观锁的实现_80% 人不知道的 Redis 分布式锁的正确实现方式(Java 版)...
  4. 1.MySQL与MongoDB的操作对比,以及区别
  5. Linux 下文件打包和压缩
  6. 如何理解RESTful的幂等性
  7. Linux系统下文件字体乱码的解决方案
  8. springboot源码解析autoconfigure之WebMvcAutoConfiguration
  9. shell调用python函数 参数 返回_Python之系统shell交互(subprocess)
  10. 5.5的performance_schema
  11. 信安教程第二版-第22章网站安全需求分析与安全保护工程
  12. Java 并发编程之同步工具类栅栏 CyclicBarrier
  13. java多线程-创建线程
  14. delphi 的GetTickCount计时用法缺陷及管制
  15. 分区助手删除linux,分区助手彻底删除硬盘文件方法
  16. iOS 性能优化那些繁杂琐碎的事儿
  17. 快速记住《计算机文化基础》海量题法
  18. java输入数字星期,输出英文
  19. dpdk大页内存原理
  20. ubuntu16.04下安装dnw和fastboot工具,解决开发板只有uboot系统,没有网络的情况下,通过dnw和fastboot传送文件到开发板

热门文章

  1. Android仿QQ侧滑菜单
  2. 19.Extjs主页面显示js
  3. Cucumber入门之_World
  4. Vue.2.0.5-模板语法
  5. 线程编程常见API简介(上)
  6. symbian 根据指定的权限找到对应的API:Functions listed by capability
  7. TheBrain v11.0.84中文版
  8. DOM中严格区分大小写
  9. 洛谷P1003 铺地毯 noip2011提高组day1T1
  10. jquery的trigger和triggerHandler区别