Blog de Jesús Sequeiros Arone

Manuales y ejercicios de SQL Server, Excel, Word, Acces y más...

Comparar y sincronizar dos tablas con Tablediff de SQL Server

Sáb, 30/05/2020 - 11:52 -- jsequeiros

Comparar y sincronizar dos tablas con Tablediff de SQL Server

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

  1. Abrir Windows PowerShell ISE.
  2. Ejecutar el script para la comparación entre las dos tablas de origen y destino:
  3. #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"}
    
  4. Abrir SSMS para automatizar escript con el Agente de SQL Server.
  5. Crear un Job de SQL server para automatizar el proceso

Ver configuración en vídeo

Ver en Youtube.

Categorias: 

Añadir nuevo comentario