tablediff工具实用
1. tablediff 是什么?
tablediff 实用工具用于比较两个非收敛的表中的数据,它对于排除复制拓扑中的非收敛故障非常有用。
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、image、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 :HOUYAJUN
use TEST
go create table person
(
id int identity(1,1),
name varchar(50) default('guoqiang'),
[address] varchar(100) default('anhui hefei'),
infro varchar(100)
)
go insert into person(infro)
select 'test1'
union
select 'test2'
union
select 'test3'
go select * from TEST.dbo.person with(nolock) -- SERVER: HOUYAJUN\JHIDCDBS005
use RepTest
go create table person
(
id int identity(1,1),
name varchar(50) default('guoqiang'),
[address] varchar(100) default('anhui hefei'),
infro varchar(100)
)
go
alter table RepTest.dbo.person add t1 int insert into person(infro)
select 'test1'
union
select 'test2'
union
select 'test3'
go 2 select * from TEST.dbo.person with(nolock)
参数 -c : 比较列差异
a.两个表结构完全相同且数据相同
b. 我们来在HOUYAJUN\JHIDCSDBS005上面的表加10行数据
insert into RepTest.dbo.person
select 't_04', 't_05' ,'t_06'
go 10
再执行上面同样的命令可以看到以下不同:
在此处我们可以看到我对B表修改的列的主键,我们可以根据这些可对表进行操作。在下面会讲述如此对这些数据不一致进行生动生成脚本
c. 如果我们再对表结构进行修改
alter table RepTest.dbo.person add te01 int
再执行上述语句可以看到以下情况:
d. 在此处我们可以看到不同,但不能看到具体的不同,我们再来把刚才多余的数据进行删除看看有什么
delete from RepTest.dbo.person
where id in (4 ,5 ,6 ,7 ,8 ,9 ,10,11 ,12,13)
可以看到和上面一样的错误,但是没有出现错误到底是什么不同哦。
参数 -q : 通过只比较行数和架构可以执行较快速比较
和上面-c的基本是一样。我们再来把多出的一列删除掉,插入2条记录看一下。
alter table reptest.dbo.person drop column te01
go
insert into RepTest.dbo.person
select 't_04', 't_05' ,'t_06'
go 2
现在应该是表结构一样,数据多了2个
可以看到这个是把2个表的数据行写出来了,一个为3,另外一个为5,没有指定那些不同,但是可以到出2个表是不一样的。
参数 –f: 生成T-SQL脚本,以使目标服务器上的表与源服务器上的表实现收敛
参数 –o: 输出文件的完整名称和路径。可以输出日志信息。
在这里我们没有看到错误信息了,因为错误信息已经写在了log里面,而persondiff则为对应的SQL修改语句。
log 信息为:
Table [test].[dbo].[person] on houyajun and Table [reptest].[dbo].[person] on houyajun\jhidcdbs005 have 2 differences.
Fix SQL written to d:persondiff.sql.
Err id Col
Dest. Only 14
Dest. Only 15
The requested operation took 0.154 seconds.
persondiff.sql 的信息为:
-- Host: houyajun\jhidcdbs005
-- Database: [reptest]
-- Table: [dbo].[person]
SET IDENTITY_INSERT [dbo].[person] ON
DELETE FROM [dbo].[person] WHERE [id] = 14
DELETE FROM [dbo].[person] WHERE [id] = 15
SET IDENTITY_INSERT [dbo].[person] OFF
附一个查询,可以直接粘在dos下,然后修改一下对应的参数:
DECLARE @sourceserver sysname
DECLARE @sourcedatabase sysname
DECLARE @sourceschema sysname
DECLARE @sourcetable nvarchar(1000)
DECLARE @destinationserver sysname
DECLARE @destinationdatabase sysname
DECLARE @destinationschema sysname
DECLARE @destinationtable nvarchar(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+
tablediff工具实用的更多相关文章
- Chrome 开发者工具实用操作
Chrome 开发者工具实用操作 https://umaar.com/dev-tips/
- Final Cut Pro X for Mac(FCPX专业视频剪辑工具)实用技巧篇!
Final Cut Pro X for Mac是一款非常强大的专业视频剪辑工具,全球很多人都在用!现在小编给大家带来一些关于Final Cut Pro X for Mac的使用技巧,希望对大家以后的应 ...
- sqlserver tablediff 实用工具
tablediff 是sqlserver自带的实用工具 sqlserver 2012 在110目录下,sqlserver2008在100目录下 官方参考文档如下: https://docs.micro ...
- 远程桌面工具mRemoteNG与Tsmmc
一.Tsmmc.msc远程管理工具.1.下载链接:https://pan.baidu.com/s/1tV_xP-ITWyKKzAxLSlGxlw 密码:0jrt 将目录下的mstsmhst.dll.m ...
- C# 基础知识系列- 17 小工具优化
0. 前言 不知道有没有动手能力强的小伙伴照着上一篇的内容写过程序呢?如果有的话,应该会在使用的时候发现以下几个问题: 每次启动都需要经过漫长的时间去遍历磁盘里的文件目录 因为数据是用的字典保存的,所 ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术之 -- Transaction Replication(事务复制)
复制类型: 1)事务型复制:通过复制事务日志到订阅点重做的方式,属于增量型复制: 2)合并型复制:通过触发器和元数据表追踪表数据改变,同样属于增量型复制: 3)快照型复制:通过创建数据库快照,并把快照 ...
- SQLSERVER中如何快速比较两张表的不一样
SQLSERVER中如何快速比较两张表的不一样 不知不觉要写2014年的最后一篇博文了~ 一般来说,如何检测两张表的内容是否一致,体现在复制的时候发布端和订阅端的两端的数据上面 我这里罗列了一些如何从 ...
- 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】
<Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 ...
- vim vi 及其相关插件的使用
GIMP->linux下16位图查看工具 实用手册:130+ 提高开发效率的 vim 常用命令 http://www.cnblogs.com/lhb25/p/130-essential-vim- ...
随机推荐
- 在Mac系统下用STS搭建一个Spring MVC项目
[本文出自天外归云的博客园] 从STS的下载到空项目的搭建 1. 下载STS,下载解压缩后点击sts-bundle文件夹中的STS文件启动ide: 2. 创建Spring MVC项目:File-> ...
- Pandas Dataframe增、删、改、查、去重、抽样基本操作
总括 pandas的索引函数主要有三种: loc 标签索引,行和列的名称 iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 ix 是 iloc 和 loc的合体 at是loc的快 ...
- CentIOS PHP 扩展库
1.GD库 yum -y install php-gd
- 慢慢来,比较快。四年Android,共勉。
四年阿,我特么以为我才17岁,不想已经27了,操蛋阿.加班熬夜,我的黑眼圈,黑头泛滥.如果木有自拍神器,我是决计不会爆照的!! 第一年,学了七天android找上了第一份工作,后来接了个外包,是做智能 ...
- Android NFC近场通信2——NFC标签调度
上面一篇文章简单介绍了NFC的背景和技术应用,今天主要是讲解一下NFC如何发起通信和标签通信(主要是翻译android官网的资料,中间加入个人心得). NFC总是在一个发起者和一个被动目标之间发生.发 ...
- wcf中的Message类
客户端->服务端—>客户端 客户端代码: using (new OperationContextScope(client.InnerChannel)) { ...
- volatile关键字学习
volatile关键字在实际工作中我用的比较少,可能因为我并不是造轮子的.但是用的少不是你不掌握的借口,还是要创造场景去使用这个关键字,本文将会提供丰富的demo. volatile 发音:英[ˈvɒ ...
- 15.04.14-登录之后刷新AntiForgeryToken
用MVC做网站的时候,碰到这样一种情况: 用户可以匿名访问某页面A,页面可以填写,然后保存数据.访问可以匿名,但是提交的时候会提示登录,然后用户登录之后才能保存. 这里面的问题 1. 用户匿名访问页面 ...
- mongoDB之监控工具mongostat
mongostat是mongdb自带的状态检测工具,在命令行下使用.它会间隔固定时间获取mongodb的当前运行状态,并输出.如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mon ...
- PHP zhuaq
change_html_img_src.php <?php $url=$_GET['url']; $id=$_GET['id']; $type=$_GET['type']; $redis_key ...