SQL Server调优:“tablediff ”命令行工具

日期: 2011-01-03 作者:Ray RankinsPaul T. BertucciChris GallelliAlex T. Silverstein翻译:冯昀晖 来源:TechTarget中国 英文

本系列文章关注SQL Server数据库调优命令行工具,比如:“dta”命令行工具。我们会关注它的用法以及它对应的图形化工具,我们会基于给定负载进行分析并提供一些建议。另外我们还将了解到“tablediff”命令行工具,它支持你比较两个表的内容。   “tablediff ”命令行工具   “tablediff ”工具支持你比较两个表的内容。

它原先开发出来是为了复制场景,来帮助诊断差异的,但是它对其它情况也非常有用。当两个表的数据可能相同或者相似时,该工具可以帮助判断它们是否相同,而且如果它们是不同的,它可以识别表中的哪些数据是不同的。   “tablediff”的语法如下:   tabled……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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”工具可以用在许多种不同类型的比较上。你如何使用这一工具取决于几个因素,包括你要比较的数据数量和类型。

相关推荐