
La herramienta tablediff de SQL Server se utiliza para comparar los datos de dos tablas entre un servidor de origen y otro servidor de destino. Esta utilidad se puede usar desde el símbolo del sistema o en un archivo por lotes para realizar las siguientes tareas:
- Realizar comparación de fila por fila entre dos tablas origen y destino.
- Realizar comparación rápida solo recuentos de filas y esquema.
- Realizar comparaciones a nivel de columna.
- Generar un script Transact-SQL para sincronizar las diferencias entre las tablas de origen y destino.
- Registrar los resultados en un archivo de salida o en una tabla en la base de datos de destino.
Requerimientos:
Para utilizar la herramienta Tablediff de SQL Server, se requiere lo siguiente:
- Conectividad a nivel de base de datos entre los servidores origen y destino.
- Usuario_sql (datareader) en servidor origen.
- Usuario_sql(datawriter) en servidor destino
- Las tablas deben tener al menos una clave primaria, identidad o columna ROWGUID.
Pasos para comparar y sincronizar dos tablas con Tablediff de SQL Server
- Abrir Windows PowerShell ISE.
- Ejecutar el script para la comparación entre las dos tablas de origen y destino:
- Abrir SSMS para automatizar escript con el Agente de SQL Server.
- Crear un Job de SQL server para automatizar el proceso
#Set-ExecutionPolicy Unrestricted
#Variables:
$rutatablediff = "C:\Program Files\Microsoft SQL Server\150\COM\tablediff.exe"
$servidororigen = "ServidorSQL1\MSSQL2012"
$bdorigen = "Colegio"
$tablaorigen = "Curso"
$userorigen = "usuario_sql1"
$passorigen = "123456"
$servidordestino = "ServidorSQL2\MSSQL2019"
$bddestino = "Colegio"
$tabladestino = "Curso"
#$userdestino = "usuario_sql2"
#$passdestino = "123456"
$archivoregistro ="C:\Replicacion\resultados.txt"
$carpeta = "C:\Replicacion\"
$fechahora = Get-Date -Format "dd-MM-yyyy-HH-mm-ss"
$archivosql= $carpeta+"script_"+ $fechahora+".sql"
#--Realiza la comparación de la tabla origen y destino, si hay cambios genera un archivo .sql
&$rutatablediff -sourceserver $servidororigen -sourceuser $userorigen -sourcepassword $passorigen -sourcedatabase $bdorigen -sourcetable $tablaorigen -destinationserver $servidordestino -destinationdatabase $bddestino -destinationtable $tabladestino -o $archivoregistro -f $archivosql
#--Si hubo cambios en la BD origen ejecuta el archivo .sql creado en el paso anterior.
if (Test-Path $archivosql -PathType leaf)
{
Invoke-Sqlcmd -InputFile $archivosql -ServerInstance $servidordestino -Database $bddestino
}
else
{"No hay cambios"}
Ver configuración en vídeo
Ver en Youtube.