tablediff, utilidad
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
La utilidad tablediff se usa para comparar los datos de dos tablas con el fin de determinar la no convergencia y es útil para solucionar problemas de no convergencia en una topología de replicación. Esta utilidad se puede usar desde el símbolo del sistema o en un archivo por lotes para realizar las siguientes tareas:
Una comparación fila a fila entre una tabla de origen de una instancia de SQL Server que actúa como publicador de replicación y la tabla de destino de una o más instancias de SQL Server que actúan como suscriptores de replicación.
Realiza una comparación rápida comparando solo el número de filas y el esquema.
Realizar comparaciones de nivel de columna.
Generar un script Transact-SQL para solucionar discrepancias en el servidor de destino y hacer que las tablas de destino y de origen converjan.
Registrar resultados en un archivo de salida o en una tabla de la base de datos de destino.
Nota
La utilidad tablediff forma parte de las herramientas de Replicación de SQL Server. En SQL Server 2022 (16.x), una vez que se instala la característica de replicación, se puede encontrar tablediff.exe
en la ubicación predeterminada, C:\Program Files\Microsoft SQL Server\160\COM
.
Sintaxis
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 ]
}
Argumentos
[ -? ]
Devuelve la lista de parámetros admitidos.
-sourceserver source_server_name[ \instance_name ]
Especifica el nombre del servidor de origen. Especifique source_server_name para la instancia predeterminada de SQL Server. Especifique source_server_name\instance_name para una instancia con nombre de SQL Server.
-sourcedatabase source_database
Especifica el nombre de la base de datos de origen.
-sourcetable source_table_name
Especifica el nombre de la tabla de origen que se está comprobando.
-sourceschema source_schema_name
Es el propietario del esquema de la tabla de origen. De forma predeterminada, se asume que el propietario de la tabla es dbo.
-sourcepassword source_password
Especifica la contraseña del inicio de sesión que se usa para conectar con el servidor de origen utilizando la autenticación de SQL Server.
Importante
Cuando sea posible, proporcione credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales en un archivo de script, debe proteger el archivo para impedir el acceso no autorizado.
-sourceuser source_login
Especifica el inicio de sesión que se usa para conectar con el servidor de origen utilizando la autenticación de SQL Server. Si no se proporciona source_login, se usa la autenticación de Windows para conectar con el servidor de origen. Siempre que sea posible, utilice la autenticación de Windows.
-sourcelocked
La tabla de origen se bloquea durante la comparación con las sugerencias de tabla TABLOCK y HOLDLOCK.
-destinationserver destination_server_name[\instance_name]
Especifica el nombre del equipo de destino. Especifique destination_server_name para la instancia predeterminada de SQL Server. Especifique destination_server_name\instance_name para una instancia con nombre de SQL Server.
-destinationdatabase subscription_database
Especifica el nombre de la base de datos de destino.
-destinationtable destination_table
Especifica el nombre de la tabla de destino.
-destinationschema destination_schema_name
Es el propietario del esquema de la tabla de destino. De forma predeterminada, se asume que el propietario de la tabla es dbo.
-destinationpassword destination_password
Especifica la contraseña del inicio de sesión que se usa para conectar con el servidor de destino utilizando la autenticación de SQL Server.
Importante
Cuando sea posible, proporcione credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales en un archivo de script, debe proteger el archivo para impedir el acceso no autorizado.
-destinationuser destination_login
Especifica el inicio de sesión que se usa para conectar con el servidor de destino utilizando la autenticación de SQL Server. Si no se proporciona destination_login, se usa la autenticación de Windows para conectar con el servidor. Siempre que sea posible, utilice la autenticación de Windows.
-destinationlocked
La tabla de destino se bloquea durante la comparación con las sugerencias de tabla TABLOCK y HOLDLOCK.
-b large_object_bytes
Especifica el número de bytes que se van a comparar en las columnas de tipo de datos de objetos grandes, lo que incluye text, ntext, image, varchar(max), nvarchar(max) y varbinary(max). large_object_bytes toma como valor predeterminado el tamaño de la columna. No se compara ningún dato mayor que large_object_bytes.
-bf number_of_statements
Es el número de instrucciones Transact-SQL que se van a escribir en el archivo del script Transact-SQL actual cuando se use la opción -f
. Cuando el número de instrucciones Transact-SQL supera el valor de number_of_statements, se crea un nuevo archivo de script Transact-SQL.
-c
Compara diferencias de nivel de columna.
-dt
Quita la tabla de resultados especificada por table_namesi la tabla ya existe.
-et table_name
Especifica el nombre de la tabla de resultados que se desea crear. Si ya existe esta tabla, debe usarse -DT
o la operación no se ejecutará correctamente.
-f [ file_name ]
Genera un script de Transact-SQL para hacer que la tabla del servidor de destino converja con la tabla del servidor de origen. Tiene la opción de especificar un nombre y una ruta de acceso para el archivo de script Transact-SQL generado. Si no se especifica file_name, el archivo del script Transact-SQL se generará en el directorio en el que se ejecute la utilidad.
-o output_file_name
Especifica el nombre completo y la ruta del archivo de salida.
-q
Realiza una comparación rápida comparando solo el número de filas y el esquema.
-rc number_of_retries
Número de reintentos de la utilidad para operaciones con errores.
-ri retry_interval
Intervalo (en segundos) entre los reintentos.
-strict
El esquema de origen y de destino se comparan de forma estricta.
-t connection_timeouts
Establece el período de tiempo de espera de la conexión, en segundos, para las conexiones con el servidor de origen y el servidor de destino.
Valor devuelto
Value | Descripción |
---|---|
0 |
Correcto |
1 |
Error grave |
2 |
Diferencias entre tablas |
Observaciones
La utilidad tablediff no se puede usar con servidores que no sean SQL Server.
No se admiten tablas que contengan columnas con el tipo de datos sql_variant.
De forma predeterminada, la utilidad tablediff admite las siguientes asignaciones de tipos de datos entre las columnas de origen y de destino.
Tipo de datos de origen | Tipo de datos de destino |
---|---|
tinyint | smallint, into bigint |
smallint | int o bigint |
int | bigint |
timestamp | varbinary |
ntext | text |
nvarchar(max) | ntext |
varbinary(max) | image |
text | ntext |
ntext | nvarchar(max) |
image | varbinary(max) |
Utilice la opción -strict
para no permitir estas asignaciones y llevar a cabo una validación estricta.
La tabla de origen de la comparación debe contener como mínimo una columna de clave principal, de identidad o ROWGUID. Cuando se emplea la opción -strict
, la tabla de destino también debe tener una columna de clave principal, de identidad o ROWGUID.
El script Transact-SQL que se genera para hacer que la tabla de destino converja no incluye los siguientes tipos de datos:
- ntext
- nvarchar(max)
- varbinary(max)
- timestamp
- xml
- text
- ntext
- image
Permisos
Para comparar tablas, necesita los permisos SELECT ALL en los objetos de la tabla que se están comparando.
Para utilizar la opción -et
, debe ser miembro del rol fijo de base de datos db_owner o, como mínimo, tener el permiso CREATE TABLE en la base de datos de suscripciones y el permiso ALTER en el esquema del propietario de destino del servidor de destino.
Para utilizar la opción -dt
, debe ser miembro del rol fijo de base de datos db_owner o, como mínimo, tener el permiso ALTER en el esquema del propietario de destino del servidor de destino.
Para utilizar las opciones -o
o -f
, debe tener permisos de escritura en la ubicación del directorio de archivos especificada.