Recupere datos SQL eliminados desde una copia de seguridad o desde archivos de una base de datos en línea

Recuperar registros ELIMINADOS es algo que todo quisiéramos evadir, pero no importa cuán cuidadosos somos, puede suceder. Tener copias regulares de seguridad de bases de datos y registros de transacciones es una práctica necesaria y una gran ventaja en esta situación, pero incluso entonces, recuperar los registros eliminados puede no ser fácil.

El mejor escenario es que los registros son eliminados inmediatamente después de la última copia de seguridad (completa o de registro de transacciones), no suceden otros cambios, usted puede permitirse el tiempo de inactividad de la base de datos y restaurar la copia de seguridad. Como este escenario casi nunca pasa en la vida real, este tipo de acción sobrescribirá todas las transacciones que pasan después de la eliminación de registros, sin mencionar el tiempo de inactividad que experimentará con la base de datos entera.

La primera pregunta que usted debería responder es: ¿Tiene usted alguna copia de seguridad de la base de datos que contiene los registros que desea recuperar?
SI la respuesta es sí, usted puede usar SQL Server Management Studio y usar la opción Export data:

  1. Tome la copia de seguridad de la base de datos más antigua y restáurela en SQL Server

    Restore database backup in SQL Server

  2. SI usted está restaurándola a la misma instancia SQL Server, asegúrese de especificar un nuevo nombre y ruta para los datos y los archivos de registro.

    Adding a new name path for the data and log files

  3. En la base de datos restaurada, encuentre los registros faltantes. Esto es fácil si todos ellos han sido eliminados desde una sola tabla. Pero si los registros fueron eliminados desde múltiples tablas, y también cumplen con requerimientos específicos, esto puede ser bastante desafiante. Este paso no es necesario, pero le ayudará a recuperar los registros si usted sabe lo que está buscando.
  4. Codifique los registros. Haga clic derecho en la base de datos en Object Explorer y seleccione Tasks > Export Data

    Selecting Export Data in Object Explorer

  5. Especifique la base de datos restaurada como fuente de datos y la original como destino

    Specify the restored database as a data source

    Specify the original database as a destination

  6. Haga clic en Next y usted obtendrá el siguiente diálogo

    Choosing table copy or query

    Aunque la opción Write a query to specify the data to transfer se ve más prometedora en una situación cuando los registros de muchas tablas son eliminados usando una consulta específica para filtrarlos, no insertará los registros seleccionados en sus tablas correspondientes. Todos los registros serán insertados en una sola tabla. Esta opción no permite múltiples conjuntos de resultados y sólo el primer conjunto de resultados es insertado.
    SI usted va por esta opción:

    1. Especifique la sentencia Select que retorna los registros eliminados

      Provide a source query

    2. Especifique la tabla destino. Por defecto, una tabla dbo.Query es establecida, de modo que usted tenga que cambiarla para coincidir con la tabla fuente

      Select source tables and views

    3. Haga clic en Edit Mappings. Aquí, usted puede:
      • Especificar si borrar y recrear la tabla destino. Esta opción está deshabilitada si una dependencia será rota
      • Especificar si habilitar inserciones de identidades en la tabla destino. Esto es recomendado para evadir un fallo del script debido a insertar en una columna de sólo lectura
      • Especificar si truncar la tabla destino existente

        Column mappings

    4. Haga clic en OK y complete los pasos del asistente. Después de que los registros son insertados, usted tiene que repetir los pasos de la a. a la d. para todas las tablas con registros eliminados.

      Message: The execution was successful

Otra opción disponible en el asistente de datos de SQL Server Management Studio es copiar datos desde una o más tablas y vistas. Usted puede especificar muchas tablas al mismo tiempo, pero no es posible filtrar los registros.

  1. Seleccione las tablas desde donde los registros han sido eliminados

    Tables and views selection

  2. Verifique del mapeo para cada tabla

    Check the mappings for every table

  3. Avance a través del asistente. Después de que los registros son insertados, si las tablas destino no están vacías, usted puede obtener un reporte de error como este

    Operation stopped error

    Error messages report

Basados en los ejemplos mostrados anteriormente, la desventaja de este método es que para múltiples tablas, no es fácil extraer sólo los registros que desea insertar e insertarlos con éxito en las tablas existentes. Los problemas pueden ser causados por violar llaves primarias y foráneas, insertar datos duplicados, etc. Las tablas con restricciones no pueden ser borradas y recreadas, así que usted no puede trabajar sobre algunos de los problemas de este modo.

Use ApexSQL Data Diff

ApexSQL Data Diff es una herramienta de comparación y sincronización de bases de datos SQL que detecta diferencias de datos. Puede comparar y sincronizar bases de datos en vivo y copias de seguridad de bases de datos nativas o nativamente comprimidas y generar reportes exhaustivos acerca de las diferencias detectadas.

  1. Inicie ApexSQL Data Diff
  2. Seleccione la copia de seguridad de la base de datos que contiene los registros eliminados como una fuente
  3. Seleccione la base de datos en línea como destino

    Choosing online database as a destination in ApexSQL Data Diff

  4. Haga clic en Compare
  5. Las tablas con diferentes registros son mostradas en la cuadrícula principal ApexSQL Data Diff
  6. Seleccione las tablas que desea sincronizar. La selección está disponible a nivel de columnas también, así que si hay algunos registros que no desea sincronizar, sólo des-selecciónelos

    Select the tables for synchronization

  7. Haga clic en Sychronize en el menú y avance a través de los pasos en el Synchronization wizard

    Selecting how to proccess the synchronization script

    Synchronization script impact preview

  8. Cuando el script es creado, ejecútelo. Todos los registros faltantes serán insertados en la base de datos en vivo, sin ningún problema de identidad o violaciones de llave

    Batch data synchronization script

Use ApexSQL Recover

Otra herramienta que puede recuperar registros eliminados desde una copia de seguridad de una base de datos es ApexSQL Recover, una herramienta de recuperación de bases de datos SQL que recupera datos eliminados, truncados o borrados. Aparte de leer las copias de seguridad de bases de datos, lee registros de transacciones en línea, copias de seguridad de registros de transacciones y registros de transacciones sueltos.

Para leer registros sueltos desde una copia de seguridad de la base de datos usando ApexSQL Recover:

  1. Inicie ApexSQL Recover
  2. Seleccione la opción Recover lost data due to a DELETE operation

    Recover lost data due to a DELETE option

  3. Seleccione la base de datos desde la que los registros han sido eliminados

    Choose the database to recover

  4. Seleccione la opción Add transaction logs

    Several sources are available for the recovery option

  5. Aparte de registro de transacciones en línea, ApexSQL Recover automáticamente lista todas las fuentes de datos – copias de seguridad de registros de transacciones y copias de seguridad de bases de datos creadas para esta base de datos. Todo esto será analizado. Si usted quisiera añadir un registro de transacciones o copia de seguridad de base de datos adicionales y un archivo de registro suelto, haga clic en el botón Add.

    Specifying additional data sources for the recovery

  6. Si es posible, especifique el tiempo cuando los registros fueron eliminados

    Specify the time when data was lost

  7. Seleccione todas las tablas o sólo aquellas específicas

    Select the tables to recover

  8. Cambie la ruta para el script de recuperación si usted desea y haga clic en Recover

    Save recovery script to file

  9. El script de recuperación creado insertará los datos eliminados de vuelta a su base de datos. Verifíquelo y ejecute

    Recovery completion message

Incluso si usted no tiene una copia de seguridad de base de datos que contenga los registros eliminados o una cadena completa de copias de seguridad de registros de transacciones, ApexSQL Recover puede ayudar, dado que puede leer transacciones eliminadas desde el archivo de datos en línea de la base de datos – el archivo MDF. Cuando un registro es eliminado de una tabla, no es inmediatamente eliminado del archivo MDF pero sólo es marcado para indicar que el espacio donde el registro fue almacenado está ahora disponible. Después de un tiempo este espacio será reutilizado, pero mientras tanto el registro puede ser aún recuperado. Ese comportamiento de SQL Server es usado por ApexSQL Recover.

  1. Inicie ApexSQL Recover
  2. Seleccione la opción Recover lost data due to a DELETE operation
  3. Seleccione la base de datos desde la cual los registros han sido eliminados
  4. Seleccione la opción No additional transaction logs are available

    Additional available data sources

  5. Seleccione todas las tablas o sólo aquellas específicas
  6. Cambie la ruta para el script de recuperación si lo desea y haga clic en Recover
  7. El script de recuperación creado insertará los datos de vuelta a su base de datos. Verifíquelo y ejecute

La recuperación de datos eliminados tiene el puntaje de éxito más alto cuando usted tiene todas las fuentes de datos necesarias para una recuperación exitosa, como una copia de seguridad completa con los datos eliminados. En esta situación, usted puede elegir entre muchos escenarios, pero no todos ellos son rápidos y a prueba de errores. ApexSQL Data Diff provee una solución segura y amigable para el usuario para recuperaciones más complejas, mientras que ApexSQL Recover automáticamente encuentra y analiza todas las copias de seguridad creadas para la base de datos y puede recuperar datos eliminados desde archivos de registros de transacciones (en línea, copia de seguridad o suelto). SI usted no tiene ninguna de las fuentes de datos mencionadas anteriormente, su única opción es raspar el archivo de datos de la base de datos y ApexSQL Recover puede ayudar con eso también.

Traductor: Daniel Calbimonte

junio 18, 2015