Ejercicios de excel

Para aprender 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.

Añadir nuevo comentario