Cómo comparar y sincronizar bases de datos mediante cronograma

ApexSQL Diff y ApexSQL Data Diff proporcionan una interfaz gráfica de usuario fácil de usar para la comparación y sincronización de esquemas de base de datos y objetos de base de datos. Ambos incluyen la interfaz de línea de comandos que proporciona exactamente las mismas opciones, y que puede utilizar para programar comparaciones y sincronizaciones sin supervisión

Pero, ¿qué se puede hacer cuando las características que la interfaz gráfica de usuario y la interfaz de línea de comandos proporcionan simplemente no son suficientes? En tales casos, se necesita una solución más flexible y la buena noticia es que hay una API programable

Los escenarios en los que se recomiendan estas soluciones personalizadas son:

  • Automatizar la comparación y sincronización de bases de datos cuando se deben comparar tanto la estructura como los datos. Sin la API, tendría que ejecutar ApexSQL Diff primero para comparar y sincronizar esquemas y luego ejecutar ApexSQL Data Diff para comparar y sincronizar datos. No es la automatización que buscas
  • Una base de datos con un gran número de registros en sus tablas – Por ejemplo decenas de millones de registros en un par de tablas. Comparar y sincronizar un número de registros tan grande lleva mucho tiempo. La solución sería utilizar la API para personalizar la comparación a subconjuntos de registros y compararlos uno por uno
  • Comparación y sincronización de bases de datos mediante criterios de comparación complejos
  • Sincronización de bases de datos con cambios de registros complejos
  • Integración de las funcionalidades de ApexSQL Diff y ApexSQL Data Diff en sus soluciones
  • Tomar acciones complejas antes o después de la sincronización, que no se puede hacer con los scripts de pre y post procesamiento que se pueden agregar a través de la interfaz gráfica del usuario
  • Exportación de resultados de comparación en más de un tipo de informe para el mismo proceso de comparación

ApexSQL Diff API es una API de comparación y sincronización de bases de datos de SQL Server, que permite a las aplicaciones .NET detectar diferencias entre objetos de base de datos, los datos y resolverlos sin errores. Proporciona soluciones .NET personalizadas con la capacidad de generar informes completos sobre las diferencias encontradas y puede automatizar el proceso de sincronización entre bases de datos en línea y versiones anteriores, copias de seguridad, instantáneas y carpetas de secuencias de comandos

La API permite especificar orígenes de datos, propiedades del script de sincronización, informes generados, cuestiones como si se crea una copia de seguridad de la base de datos antes de la sincronización o no, etc. ApexSQL Diff API tiene un ejemplo funcional C# junto con la instalación de la API, contenido dentro de la subcarpeta Demo en la carpeta de instalación, que puede abrir y modificar en Visual Studio

Ejemplo 1:

Cree dos tipos diferentes de informes y un script de sincronización y compare una base de datos y una copia de seguridad de la base de datos

public void Run(){
   // Create a data project with databases as datasources
 DataProject data = 
                    new DataProject(new ConnectionProperties(SERVER1,DATABASE1),
                    new ConnectionProperties(SERVER2, DATABASE2));
 data.SetProgressCallback(cps);

 // Create a CSV report
 MakeDataCsvReport(data);

 // Create an HTML report
 MakeDataHtmlReport(data);

 // Create a synchronization script
 bool executeDataScript = false;
 MakeDataSyncScript(data, SYNC_SCRIPT_PATH, executeDataScript);
 data.SaveToDisk(PROJECT_PATH);

 // Compare database vs backup
 DataProject backup =
                 new DataProject(new ConnectionProperties(SERVER1,DATABASE1),
                 new string[] { BACKUP_PATH });
   backup.SetProgressCallback(cps);
   backup.Compare();

   Console.WriteLine("Press [Enter]");
   Console.ReadLine();}

Ejemplo 2:

Comparar sólo los datos dentro de las tablas. Las tablas, cuyos nombres comienzan con “ventas” y “título”, serán excluidas de la comparación

private void SetDataObjectTypesToCompare()
   {
     data.ObjectTypeFilter = SqlObjectType.Table;//load tables only
   }
     private void ApplyDataExclude()
   {
     data.MappedTables.ExcludeFromComparison(new string[] { 
          "^sales", "^title" });
   }

Ejemplo 3:

Compare sólo las tablas denominadas ProductionMaterials y ProductionStats – excluya primero todos los objetos de la comparación e incluya sólo las tablas específicas

data.ObjectTypeFilter = 
    SqlObjectType.Table;data.MappedTables.ExcludeAllFromComparison();
   //Add "^" before the first character and "$" after the last in table names
    string[] tablesToComapre = new string[] 
       { "^ProductionMaterials$", "^ProductionStats$" };
    data.MappedTables.IncludeInComparison(tablesToComapre);
    data.SynchronizationOptions.SynchronizationDirection 
= SynchronizationDirection.SourceToDestination;
   data.Compare();
   try
       {
       //data.ComparedObjects.IncludeAllInSynchronization();
       foreach(ComparedDataObject<Table> table in data.ComparedTables)
       {
           if(string.Equals(table.SourceName, " ProductionMaterials"))
           {
              //do anything with this table      
              table.IncludeInSynchronization = true;
              Console.WriteLine(
    string.Format("[{0}].[{1}] should be synced: {2}", 
    table.SourceOwner, table.SourceName, table.IncludeInSynchronization));
           }else if(string.Equals(table.SourceName, " ProductionStats"))
           {
              //do anything with this table
              table.IncludeInSynchronization = true;
              Console.WriteLine(
    string.Format("[{0}].[{1}] should be synced: {2}", 
    table.SourceOwner, table.SourceName, table.IncludeInSynchronization));
           }
       }

Estos fueron sólo algunos ejemplos simples que muestran sólo un pequeño número de posibles personalizaciones al comparar y sincronizar bases de datos

Con ApexSQL Diff API no hay necesidad de escribir soluciones personalizadas de comparación y sincronización desde cero. Utilice el código ya preparado para agregar complejas funciones ApexSQL Diff y ApexSQL Data Diff a sus soluciones.

Desafortunadamente, ApexSQL Diff API ha sido descontinuado. Más información sobre esto puede encontrarse en el artículo de este enlace.

diciembre 24, 2016