tablediff 实用工具

tablediff 实用工具用于比较两个非收敛的表中的数据,它对于排除复制拓扑中的非收敛故障非常有用。可以从命令提示符或在批处理文件中使用该实用工具执行以下任务:

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

语法

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 ] 
}

参数

  • [ -? ]
    返回支持参数的列表。
  • -sourceserversource_server_name[**\instance_name]
    源服务器的名称。指定 SQL Server 默认实例的 source_server_name。指定 SQL Server 命名实例的 source_server_name
    \**instance_name
  • -sourcedatabasesource_database
    源数据库的名称。
  • -sourcetablesource_table_name
    正在检查的源表的名称。
  • -sourceschemasource_schema_name
    源表的架构所有者。默认情况下,表所有者假定为 dbo
  • -sourcepasswordsource_password
    使用 SQL Server 身份验证连接到源服务器时所使用的登录帐户的密码。

    ms162843.security(zh-cn,SQL.90).gif安全说明:
    可能的话,请在运行时提供安全凭据。如果必须在脚本文件中存储凭据,则应保护文件以防止未经授权的访问。
  • -sourceusersource_login
    使用 SQL Server 身份验证连接到源服务器时所使用的登录帐户。如果未提供 source_login,则连接到源服务器时使用 Windows 身份验证。
  • -sourcelocked
    在使用 TABLOCK 和 HOLDLOCK 表提示的比较过程中锁定源表。
  • -destinationserverdestination_server_name[**\instance_name]
    目标服务器的名称。指定 SQL Server 默认实例的 destination_server_name。指定 SQL Server 命名实例的 destination_server_name
    \**instance_name
  • -destinationdatabasesubscription_database
    目标数据库的名称。
  • -destinationtabledestination_table
    目标表的名称。
  • -destinationschemadestination_schema_name
    目标表的架构所有者。默认情况下,表所有者假定为 dbo
  • -destinationpassworddestination_password
    使用 SQL Server 身份验证连接到目标服务器时所使用的登录帐户的密码。

    ms162843.security(zh-cn,SQL.90).gif安全说明:
    可能的话,请在运行时提供安全凭据。如果必须在脚本文件中存储凭据,则应保护文件以防止未经授权的访问。
  • -destinationuserdestination_login
    使用 SQL Server 身份验证连接到目标服务器时所使用的登录帐户。如果未提供 destination_login,则连接到该服务器时使用 Windows 身份验证。
  • -destinationlocked
    在使用 TABLOCK 和 HOLDLOCK 表提示的比较过程中锁定目标表。
  • -blarge_object_bytes
    要比较的大型对象数据类型列的字节数,包括:textntextimagevarchar(max)nvarchar(max)varbinary(max)large_object_bytes 的默认值为最大值 8000 个字节。任何大于 large_object_bytes 的数据将不进行比较。
  • -bfnumber_of_statements
    使用 -f 选项时要写入到当前 Transact-SQL 脚本文件中的 Transact-SQL 语句数。当 Transact-SQL 语句数超过 number_of_statements 时,将创建一个新的 Transact-SQL 脚本文件。
  • -c
    比较列级差异。
  • -dt
    删除 table_name 指定的结果表(如果该表已经存在)。
  • -ettable_name
    指定要创建的结果表的名称。如果该表已经存在,则必须使用 -DT,否则操作将失败。
  • -f [ file_name ]
    生成 Transact-SQL 脚本,以使目标服务器中的表与源服务器中的表实现收敛。(可选)可以指定生成的 Transact-SQL 脚本文件的名称和路径。如果未指定 file_name,则会在运行实用工具的目录中生成 Transact-SQL 脚本文件。
  • -ooutput_file_name
    输出文件的完整名称和路径。
  • -q
    通过只比较行数和架构可以执行快速比较。
  • -rcnumber_of_retries
    实用工具重试失败操作的次数。
  • -riretry_interval
    两次重试之间的等待间隔(秒)。
  • -strict
    对源架构和目标架构进行严格比较。
  • -tconnection_timeouts
    设置与源服务器和目标服务器连接时的连接超时时间(秒)。

返回值

说明

0

成功

1

严重错误

2

表差异

备注

tablediff 实用工具不能用于非 SQL Server 服务器。

不支持包含 sql_variant 数据类型列的表。

默认情况下,tablediff 实用工具支持源列和目标列之间的以下数据类型映射。

源数据类型 目标数据类型

tinyint

smallintint 或者 bigint

smallint

int 或者 bigint

int

bigint

timestamp

varbinary

varchar(max)

text

nvarchar(max)

ntext

varbinary(max)

image

text

varchar(max)

ntext

nvarchar(max)

image

varbinary(max)

使用 -strict 选项禁止这些映射,并执行严格验证。

进行比较的源表必须至少包含一个主键、标识或 ROWGUID 列。使用 -strict 选项时,目标表也必须具有一个主键、标识或 ROWGUID 列。

所生成的使目标表实现收敛的 Transact-SQL 脚本不包括下列数据类型:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • timestamp
  • xml
  • text
  • ntext
  • image

权限

若要比较表,您必须有要比较的表对象的 SELECT ALL 权限。

若要使用 -et 选项,您必须是 db_owner 固定数据库角色的成员,或者在订阅数据库中至少有 CREATE TABLE 权限,并且对目标服务器中的目标所有者架构拥有 ALTER 权限。

若要使用 -dt 选项,您必须是 db_owner 固定数据库角色的成员,或者至少对目标服务器中的目标所有者架构拥有 ALTER 权限。

若要使用 -o-f 选项,必须对指定的文件目录位置拥有写入权限。

请参阅

其他资源

How to: Compare Replicated Tables for Differences (Replication Programming)

帮助和信息

获取 SQL Server 2005 帮助