Recuperar datos SQL eliminado de registros de transacciones

En el artículo Recuperar datos SQL eliminados desde una copia de seguridad o desde archivos de base de datos, mostramos dos escenarios de recuperación, uno desde una copia de seguridad completa de base de datos y el otro de un archivo de base de datos en línea – el archivo MDF. Aparte de eso, hay una fuente más que puede usar cuando se trata de recuperación de datos SQL – un registro de transacciones.

Cada esquema y cambio de datos en una base de datos SQL Server es añadido a un registro de transacciones como una entrada de registro. Si las transacciones borradas que desea revertir están en un registro de transacciones en línea, un registro de transacciones suelto o una copia de seguridad de un registro de transacciones, usted puede leerlos y deshacer las eliminaciones.

Si su base de datos están en el:

  • Modelo de recuperación Full, las transacciones de borrado aún están en un registro de transacciones en línea o en una copia de seguridad de registro de transacciones, dado que han sido creadas después del borrado de entradas
  • Modelo de recuperación Bulk_logged, las transacciones de borrado son completamente registradas en un registro de transacciones en línea exceptuando los datos BLOB borrados. Como los borrados BLOB no son registrados en el registro de transacciones en línea y las inserciones BLOB no fueron registradas debido al modelo re recuperación Bulk_logger, su recuperación no será posible. Para otros tipos de datos las transacciones de borrado están en un registro de transacciones o en una copia de seguridad después del borrado.
  • Modelo de recuperación Simple, y han habido muchas transacciones ejecutadas contra la base de datos después del borrado de las entradas, las transacciones de borrado posiblemente ya no estén en el registro de transacciones. En este caso, mientras más pronto use un lector de registro de transacciones SQL Server contra la base de datos, más posibilidades tendrá de una recuperación exitosa.

Usando ApexSQL Log

Para leer un registro de transacciones en línea, un registro de transacciones suelto y copias de seguridad de registros, tanto nativos y comprimidos nativamente, use ApexSQL Log. Es un lector de registros de transacciones SQL Server que puede auditar, revertir y reproducir datos y cambios de objetos incluyendo aquellos que hayan ocurrido antes de que ApexSQL Log fuera instalado. También captura información del usuario, aplicación y host usados para hacer cada cambio.

  1. Inicie ApexSQL Log
  2. Conéctese a la base de datos donde las entradas han sido borradas

    Connecting to the database in ApexSQL Log

  3. Si algunas copias de seguridad de registros son creados después de que las entradas hayan sido eliminadas, añádalas todas en el siguiente paso. Note que las copias de seguridad de registros deben formar una cadena completa si las entradas que está tratando de recuperar contienen datos BLOB (vea abajo para más detalles acerca de esto)
  4. En caso de que usted haya desacoplado el registro de transacciones que contiene las entradas eliminadas (por ejemplo, si puso la base de datos fuera de línea y copió el archivo LDF inmediatamente después del borrado), también puede usarlo:

    Select log data source file

  5. Use la sección Time range en el paso Filter setup options para reducir las transacciones a aquellas que ocurrieron en un tiempo específico

    Filtering transactions by time range

  6. Use el filtro Operations para reducir los resultados sólo para las entradas eliminadas. Para hacer eso, deseleccione todas las operaciones de esquema (DDL), así como Insert row y Update row en la lista Data operations (DML)

    Choosing deleted SQL records only

  7. Si es posible, especifique las tablas de donde las entradas fueron borradas. Si no, deje seleccionadas todas las tablas de usuario

    Specifying the records from which the records have been deleted

  8. Haga clic en Open
  9. Todas las transacciones DELETE son mostradas en la cuadricula principal. Todo lo que tiene que hacer es seleccionarlas todas o solamente las que necesita, y hacer clic en Create Undo Script en el menú para crear un script deshacer para ellas

    Create Undo Script in ApexSQL Log

  10. Para crear un script deshacer para todas las entradas mostradas en la cuadrícula, haga clic en Create undo script en el menú. Para crear un script deshacer para solamente algunas entradas, selecciónelas en la cuadrícula, y en el menú contextual de la cuadrícula seleccione Create undo script

    El script que inserta las entradas borradas será creado

    Generated Undo Script

  11. Para ejecutar el script haga clic en Run button en el menú

Usando ApexSQL Log para crear un script deshacer inmediatamente

El método descrito con los resultados mostrados en la cuadrícula es aceptable sólo para un pequeño número de entradas. Cuando se trata de millones de entradas eliminadas, recomendamos crear un script deshacer inmediatamente en lugar de mostrar los resultados en la cuadrícula primero. Los pasos del 1 al 7 son los mismos de arriba

  1. En lugar de hace clic en Open results in grid, haga clic en Export results to a file

    Export results to a file

  2. Seleccione Generate rollback (undo) script y especifique la ruta del archivo y el nombre

    Generate Rollback (UNDO) Script

  3. Haga clic en OK

    El script deshacer que inserta todas las entradas borradas de vuelta en sus tablas será creado

    Exporting finished

Usando ApexSQL Recover

Esta es otra herramienta ApexSQL que puede leer registros de transacciones de SQL Server – un registro de transacciones en línea, registros de transacciones sueltos copias de seguridad de registros tanto nativos como nativamente comprimidos. ApexSQL Recover es una herramienta de recuperación para bases de datos SQL Server que recupera datos borrados, truncados, corruptos o dañados. Recupera objetos y datos perdidos debido a operaciones drop y restaura BLOBs tanto en línea como borrados como archivos. El proceso de recuperación es bastante similar al descrito aquí: Recuperar datos SQL borrados desde una copia de seguridad o archivos de base de datos en línea.

  1. Inicie ApexSQL Recover
  2. Seleccione Recover lost data due to a DELETE operation
  3. Especifique la instancia de SQL Server, credenciales y la base de datos donde las entradas fueron eliminadas
  4. Seleccione Several sources are available for the recovery
  5. El registro de transacciones, todas las copias de seguridad de registros y copias de seguridad de la base de datos creados para la base de datos seleccionada son listados automáticamente. Para añadir copias de seguridad de registros adicionales, o un registro de transacciones suelto que contiene las entradas eliminadas, use el botón Add. Note que las copias de seguridad de registros deben formar una cadena completa
  6. Especifique el tiempo cuando las declaraciones delete fueron ejecutadas. Si usted no conoce cuándo pasó esto, seleccione Date and time are unknown
  7. Use el filtro de tablas para reducir la recuperación solamente a tablas específicas, si aplica
  8. Haga clic en Recover
  9. Una banda que inserta los datos eliminados es creada. Verifíquela y ejecute

La buena noticia para la recuperación de entradas borradas es que hay una posibilidad de una recuperación exitosa incluso sin una copia de seguridad de la base de datos o una cadena de copia de seguridad de registro. Note que una recuperación exitosa de datos borrados con BLOBs no es posible sin una cadena completa de los registros de transacciones. Como la transacción BLOB de borrado no registra el valor borrado, es necesario ir por toda la secuencia de copias de seguridad de registros hasta el principio de la cadena. Si la cadena está rota, la reconstrucción podría ser incorrecta. Por ejemplo, si la información acerca de la actualización de datos BLOB falta, el BLOB originalmente insertado será recuperado en lugar del que se borró.

Incluso con una base de datos en un modelo de recuperación Simple, hay una posibilidad de recuperación. En el modelo de recuperación Simple, las nuevas transacciones registradas en un registro de transacciones en línea sobrescriben a las antiguas. Si el registro de transacciones es por ejemplo de 100 GB, y usted tienen 1 GB de datos registrados cada día, el registro será completamente sobrescrito en 100 días. Eso significa que usted quizá recupere los datos eliminado hasta hace 100 días.

Por supuesto, esto no implica de ninguna manera que usted debería apoyarse en esto y olvidarse acerca de su estrategia de recuperación para SQL Server en caso de desastres.

ApexSQL tiene dos herramientas que ayudan con los registros de transacciones. ApexSQL Log provee más opciones de filtros y granularidad de las entradas recuperadas – aparte de filtrar por tiempo y nombre de tabla, lo cual es una característica común a ambas herramientas, provee filtrado para tablas de sistema, entradas basadas en un cierto valor común, descripción de transacciones por un usuario que aplicó las eliminaciones, y en el caso de que el monitor de ApexSQL Log Connection estuviera corriendo en el tiempo en que ocurrieron las transacciones – por aplicación y nombre del host.

ApexSQL Recover tiene menos opciones de filtrado, pero provee más opciones de salida para la recuperación. Aparte de crear un script T-SQL que inserta entradas, también puede crear una nueva base de datos y recuperar entradas eliminadas directamente ahí.

Traductor: Daniel Calbimonte

Diciembre 9, 2014