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.
Añadir nuevo comentario