| title | tablediff Utility | |||||||
|---|---|---|---|---|---|---|---|---|
| ms.custom | seo-lt-2019 | |||||||
| ms.date | 03/14/2017 | |||||||
| ms.prod | sql | |||||||
| ms.prod_service | sql-tools | |||||||
| ms.reviewer | ||||||||
| ms.technology | tools-other | |||||||
| ms.topic | conceptual | |||||||
| helpviewer_keywords |
|
|||||||
| ms.assetid | 3c3cb865-7a4d-4d66-98f2-5935e28929fc | |||||||
| author | markingmyname | |||||||
| ms.author | maghan | |||||||
| monikerRange | >=aps-pdw-2016||=azuresqldb-current||=azure-sqldw-latest||>=sql-server-2016||=sqlallproducts-allversions||>=sql-server-linux-2017 |
[!INCLUDEappliesto-ss-asdb-asdw-pdw-md] The tablediff utility is used to compare the data in two tables for non-convergence, and is particularly useful for troubleshooting non-convergence in a replication topology. This utility can be used from the command prompt or in a batch file to perform the following tasks:
-
A row by row comparison between a source table in an instance of [!INCLUDEmsCoName] [!INCLUDEssNoVersion] acting as a replication Publisher and the destination table at one or more instances of [!INCLUDEssNoVersion] acting as replication Subscribers.
-
Perform a fast comparison by only comparing row counts and schema.
-
Perform column-level comparisons.
-
Generate a [!INCLUDEtsql] script to fix discrepancies at the destination server to bring the source and destination tables into convergence.
-
Log results to an output file or into a table in the destination database.
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 ]
}
[ -? ]
Returns the list of supported parameters.
-sourceserver source_server_name[\instance_name]
Is the name of the source server. Specify source_server_name for the default instance of [!INCLUDEssNoVersion]. Specify source_server_name\instance_name for a named instance of [!INCLUDEssNoVersion].
-sourcedatabase source_database
Is the name of the source database.
-sourcetable source_table_name
Is the name of the source table being checked.
-sourceschema source_schema_name
The schema owner of the source table. By default, the table owner is assumed to be dbo.
-sourcepassword source_password
Is the password for the login used to connect to the source server using [!INCLUDEssNoVersion] Authentication.
Important
When possible, supply security credentials at runtime. If you must store credentials in a script file, you should secure the file to prevent unauthorized access.
-sourceuser source_login
Is the login used to connect to the source server using [!INCLUDEssNoVersion] Authentication. If source_login is not supplied, then Windows Authentication is used when connecting to the source server. [!INCLUDEssNoteWinAuthentication]
-sourcelocked
The source table is locked during the comparison using the TABLOCK and HOLDLOCK table hints.
-destinationserver destination_server_name[\instance_name]
Is the name of the destination server. Specify destination_server_name for the default instance of [!INCLUDEssNoVersion]. Specify destination_server_name\instance_name for a named instance of [!INCLUDEssNoVersion].
-destinationdatabase subscription_database
Is the name of the destination database.
-destinationtable destination_table
Is the name of the destination table.
-destinationschema destination_schema_name
The schema owner of the destination table. By default, the table owner is assumed to be dbo.
-destinationpassword destination_password
Is the password for the login used to connect to the destination server using [!INCLUDEssNoVersion] Authentication.
Important
When possible, supply security credentials at runtime. If you must store credentials in a script file, you should secure the file to prevent unauthorized access.
-destinationuser destination_login
Is the login used to connect to the destination server using [!INCLUDEssNoVersion] Authentication. If destination_login is not supplied, then Windows Authentication is used when connecting to the server. [!INCLUDEssNoteWinAuthentication]
-destinationlocked
The destination table is locked during the comparison using the TABLOCK and HOLDLOCK table hints.
-b large_object_bytes
Is the number of bytes to compare for large object data type columns, which includes: text, ntext, image, varchar(max), nvarchar(max) and varbinary(max). large_object_bytes defaults to the size of the column. Any data above large_object_bytes will not be compared.
-bf number_of_statements
Is the number of [!INCLUDEtsql] statements to write to the current [!INCLUDEtsql] script file when the -f option is used. When the number of [!INCLUDEtsql] statements exceeds number_of_statements, a new [!INCLUDEtsql] script file is created.
-c
Compare column-level differences.
-dt
Drop the result table specified by table_name, if the table already exists.
-et table_name
Specifies the name of the result table to create. If this table already exists, -DT must be used or the operation will fail.
-f [ file_name ]
Generates a [!INCLUDEtsql] script to bring the table at the destination server into convergence with the table at the source server. You can optionally specify a name and path for the generated [!INCLUDEtsql] script file. If file_name is not specified, the [!INCLUDEtsql] script file is generated in the directory where the utility runs.
-o output_file_name
Is the full name and path of the output file.
-q
Perform a fast comparison by only comparing row counts and schema.
-rc number_of_retries
Number of times that the utility retries a failed operation.
-ri retry_interval
Interval, in seconds, to wait between retries.
-strict
Source and destination schema are strictly compared.
-t connection_timeouts
Sets the connection timeout period, in seconds, for connections to the source server and destination server.
| Value | Description |
|---|---|
| 0 | Success |
| 1 | Critical error |
| 2 | Table differences |
The tablediff utility cannot be used with non- [!INCLUDEssNoVersion] servers.
Tables with sql_variant data type columns are not supported.
By default, the tablediff utility supports the following data type mappings between source and destination columns.
| Source data type | Destination data type |
|---|---|
| tinyint | smallint, int, or bigint |
| smallint | int or bigint |
| int | bigint |
| timestamp | varbinary |
| varchar(max) | text |
| nvarchar(max) | ntext |
| varbinary(max) | image |
| text | varchar(max) |
| ntext | nvarchar(max) |
| image | varbinary(max) |
Use the -strict option to disallow these mappings and perform a strict validation.
The source table in the comparison must contain at least one primary key, identity, or ROWGUID column. When you use the -strict option, the destination table must also have a primary key, identity, or ROWGUID column.
The [!INCLUDEtsql] script generated to bring the destination table into convergence does not include the following data types:
-
varchar(max)
-
nvarchar(max)
-
varbinary(max)
-
timestamp
-
xml
-
text
-
ntext
-
image
To compare tables, you need SELECT ALL permissions on the table objects being compared.
To use the -et option, you must be a member of the db_owner fixed database role, or at least have CREATE TABLE permission in the subscription database and ALTER permission on the destination owner schema at the destination server.
To use the -dt option, you must be a member of the db_owner fixed database role, or at least have ALTER permission on the destination owner schema at the destination server.
To use the -o or -f options, you must have write permissions to the specified file directory location.
Compare Replicated Tables for Differences (Replication Programming)