本系列文章关注SQL Server数据库调优命令行工具,比如:“dta”命令行工具。我们会关注它的用法以及它对应的图形化工具,我们会基于给定负载进行分析并提供一些建议。另外我们还将了解到“tablediff”命令行工具,它支持你比较两个表的内容。 “tablediff ”命令行工具 “tablediff ”工具支持你比较两个表的内容。
它原先开发出来是为了复制场景,来帮助诊断差异的,但是它对其它情况也非常有用。当两个表的数据可能相同或者相似时,该工具可以帮助判断它们是否相同,而且如果它们是不同的,它可以识别表中的哪些数据是不同的。 “tablediff”的语法如下: tabled……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
本系列文章关注SQL Server数据库调优命令行工具,比如:“dta”命令行工具。我们会关注它的用法以及它对应的图形化工具,我们会基于给定负载进行分析并提供一些建议。另外我们还将了解到“tablediff”命令行工具,它支持你比较两个表的内容。
“tablediff ”命令行工具
“tablediff ”工具支持你比较两个表的内容。它原先开发出来是为了复制场景,来帮助诊断差异的,但是它对其它情况也非常有用。当两个表的数据可能相同或者相似时,该工具可以帮助判断它们是否相同,而且如果它们是不同的,它可以识别表中的哪些数据是不同的。
“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 ]5 [ -strict ] [ -t connection_timeouts ] } |
“tablediff”语法需要源和目标的连接信息来执行比较。这些信息包括将要比较的服务器,数据库和表信息。连接信息必须提供给SQL Server认证,但是如果Windows认证是可用的,则可以空着。源参数和目标参数可以是两个不同的服务器或者相同的服务器,“tablediff”工具可以运行在一台机器上,既不是源,也不是目标。
为了说明该工具的作用,我们来看一个简单的比较示例,我们使用了“AdventureWorks2008R2”数据库。要创建比较用的数据,最简单的方法是把一个表中的内容查询复制到另一个表中,然后更新一个表的某些行内容。下面的“SELECT”语句对“AdventureWorks2008R2 ”数据库中的“AddressType”表进行了复制,复制的新表是“AddressTypeCopy”:
select * into Person.AddressTypeCopy from Person.AddressType |
此外,下面的语句更新了“AddressTypeCopy ”表中的两行(为测试用),这样你可以用“tablediff ”工具找出它们之间的差异:
UPDATE Person.AddressTypeCopy SET Name = ‘Billing New’ WHERE AddressTypeId = 1 UPDATE Person.AddressTypeCopy SET Name = ‘Shipping New’, ModifiedDate = ‘20090918’ WHERE AddressTypeId = 5 |
“tablediff ”工具可以加上下面的参数执行,这样就可以识别“AddressType ”表和“AddressTypeCopy ”表之间的差异:
tablediff -sourceserver “(local)” -sourcedatabase “AdventureWorks2008R2” -sourceschema “Person”-sourcetable “AddressType” -destinationserver “(local)” -destinationdatabase “AdventureWorks2008R2” -destinationschema “Person” -destinationtable “AddressTypeCopy” -f c:TableDiff_Output.txt |
目标参数和源参数与前面的例子相同,除了表参数,也就是其中的源表“AddressType ”和目标表“AddressTypeCopy”。该工具使用这些参数执行会在命令行提示窗口中得到下面的输出内容:
用户指定的代理参数值:
-sourceserver (local) -sourcedatabase AdventureWorks2008R2 -sourceschema Person -sourcetable AddressType -destinationserver (local) -destinationdatabase AdventureWorks2008R2 -destinationschema Person -destinationtable AddressTypeCopy -f c:TableDiff_Output Table [AdventureWorks2008R2].[Person].[AddressType] on (local) and Table [AdventureWorks2008R2].[Person].[AddressTypeCopy] on (local) have 2 differences. Fix SQL written to c:TableDiff_Output.sql. Err AddressTypeID Col Mismatch 1 Name Mismatch 5 ModifiedDate Name The requested operation took 0.296875 seconds. |
输出内容中首先显示的是所采用参数的摘要,然后显示了比较结果。在这个例子中,它找到了两处差异,因为我们前面更新了“AddressTypeCopy”表。此外,本例中使用“-f”参数使得“tablediff”工具输出了可以用来修正目标表中差异的SQL文件。本例中该输出文件的内容如下:
— Host: (local) — Database: [AdventureWorks2008R2] — Table: [Person].[AddressTypeCopy] SET IDENTITY_INSERT [Person].[AddressTypeCopy] ON UPDATE [Person].[AddressTypeCopy] SET [Name]=’Billing’ WHERE [AddressTypeID] = 1 UPDATE [Person].[AddressTypeCopy] SET [ModifiedDate]=’2002-06-01 00:00:00.000’, [Name]=’Shipping’ WHERE [AddressTypeID] = 5 SET IDENTITY_INSERT [Person].[AddressTypeCopy] OFF |
要记住,我们可以用“tablediff”工具实现几种不同的比较类型。“-q”参数会触发快速比较,只比较记录数量并查找对象的差异。“-strict”参数在比较运行时会强制要求每个表的结构是相同的。如果没有使用该参数,该工具允许一些列有不同的数据类型,只要他们满足数据类型自动映射的需求就行(例如,INT可以与BIGINT相比较)。
“tablediff”工具可以用在许多种不同类型的比较上。你如何使用这一工具取决于几个因素,包括你要比较的数据数量和类型。
翻译
相关推荐
-
如何为你的数据库事务日志减肥?
在大多数SQL Server的工作环境中,尤其是在OLTP环境中,数据库的事务日志性能出现瓶颈时往往会导致事务完成需要更多的时间。
-
优化T-SQL提升SQL Server数据库性能
本文中提供了八种优化T-SQL代码避免SQL Server数据库性能瓶颈的技巧,我们可以据此优化数据库应用。
-
SQL Server开发人员需要避免的八种习惯
应用程序开发人员对SQL Server性能的影响是巨大的,可能是积极影响,也可能负面影响。
-
使用PowerShell功能改善SQL Server管理
SQL Server 2008是第一个支持PowerShell的SQL Server版本,但是它的功能还不完善。在SQL Server 2012中,微软公司已经构建了非常稳定的支持。