Cómo recuperarse de un desastre de corrupción del archivo de datos de la base de datos SQL Server

Recuperación de una base de datos SQL Server con copias de seguridad del registro de transacciones

El peor escenario que un DBA puede encontrar es una corrupción del archivo de datos de la base de datos SQL Server (debido a una ocurrencia física o de otro tipo, los archivos de datos pueden ser dañados y se pueden volver inaccesibles).

La mayoría de DBAs tienen planes de recuperación para este escenario – crear copias de seguridad regularmente y usarlas más tarde para restaurar la base de datos al punto en el tiempo más cercano disponible, previo al desastre. De todas maneras, esto no siempre es el caso. Incluso con respaldos regulares, siempre habrá una porción faltante de datos entre la última copia de seguridad y el tiempo del desastre. Con ApexSQL Log, es posible recuperar todos los datos al punto de falla, si el archivo del registro de transacciones (.ldf) no está dañado.

Los requerimientos para una recuperación exitosa de SQL en este escenario son:

  • La base de datos estaba en el modelo de recuperación completo y el registro de transacciones no ha sido truncado después de la última copia de seguridad.
  • La copia de seguridad completa del registro y la cadena ininterrumpida del registro de transacciones están disponibles:
    • Asegúrese de que el archivo del registro de transacciones en línea no ha sido truncado desde el último respaldo o
    • Tenga disponibles todas las copias de seguridad del registro de transacciones hasta el punto de truncado (el truncado es hecho automáticamente cuando se crean copias de seguridad del registro de transacciones).

Para recuperar los datos, usted tiene que hacer lo siguiente:

  1. Asegúrese de que tiene grabado el archivo del registro de transacciones en línea (.ldf).
  2. Restaure la base de datos usando la copia de seguridad completa y todas las copias de seguridad del registro de transacciones consecutivas:
    1. Abra SQL Server Management Studio y seleccione la opción Restore. Seleccione Device como la fuente, haga clic en el botón elíptico y añada la última copia de seguridad y todas las copias de seguridad del registro de transacciones disponibles:

      SSMS recovery - Restore option

    2. Deje todas las opciones en sus valores por defecto y haga clic en OK. Espere para que el resto del proceso finalice.
  3. Inicie ApexSQL Log, conéctese a la base de datos recuperada y haga clic en Next

    Database connection - ApexSQL Log

  4. En la pantalla Select SQL logs to analyze, haga clic en el botón Add y localice el archivo del registro de transacciones en línea original (.ldf). Deseleccione el archivo del registro de transacciones el línea y seleccione el registro de transacciones desvinculado recién añadido. Es también posible añadir copias de seguridad completas y de registros de transacciones aquí, pero en este particular escenario eso no es necesario.
  5. Haga clic en Next

    Selecting SQL logs to analyze - ApexSQL Log

  6. Después de hacer clic en Next, hay dos opciones. Usted puede seleccionar Open results in grid view si necesita revisar los cambios antes de restaurarlos a la base de datos, o usted puede seleccionar Undo/Redo para crear el script que restaurará los registros directamente, sin revisarlos primero.

  7. En la pantalla Filter setup, seleccione Whole transaction log

    Filter setup screen

  8. Seleccione el filtro de operaciones y seleccione todas las operaciones de esquema (DDL). Este paso puede ser saltado si usted está seguro que no ha habido actualizaciones a los esquemas de tablas desde después de que la última copia de seguridad fuera creada.

    Selecting all schema operations (DDL)

Usando la vista de cuadrícula para revisar más a fondo y refinar los datos restaurados

Después de seleccionar Open results in grid view, los datos serán reconstruidos y mostrados en la cuadrícula. Si usted está satisfecho con los datos y desea restaurar todo, simplemente haga clic en Create redo script en el menú ApexSQL Log.

Recover SQL database - Create redo script

Use el script de rehacer recién creado para restaurar su base de datos al estado previo al desastre.

Exportando los datos directamente a un archivo

Después de seleccionar Export results to file, la pantalla Export to file será mostrada. Seleccione Generate reconstruct (REDO) script, especifique la localización del archivo de salida y haga clic en Finish.

Exporting the data directly to a file

Después de que la reconstrucción de los datos es finalizada, el archivo del script rehacer estará listo para la restauración de la base de datos.

Recover from SQL database - Redo script is ready

Usando el script REHACER para restaurar la base de datos

Después del que el script REHACER es generado usando cualquiera de las opciones descritas, usted necesita ejecutarlo contra la base de datos recientemente restaurada. Usted puede usar SQL Server Management Studio, la utilidad ApexSQL RunScript o cualquier otro ambiente de desarrollo integrado. SQL Server Management Studio tiene una limitación en el tamaño del script y no puede ser usado para ejecutar scripts grandes.

Para usar la utilidad ApexSQL RunScript, bájela de aquí: ApexSqlRunScript

Abra la Consola de Comandos donde la utilidad ApexSQL RunScript fue descargada y ejecútela usando la siguiente sintaxis:

ApexSqlRunScript.exe <server_instance_name> <database_name> <script_filename>

e.g.

ApexSqlRunScript.exe (local)\SQL2012 RecoveredDatabase c:\Temp\RedoScript.sql

Después de que el script es ejecutado, la información de resumen será mostrada y su base de datos será restaurada al punto en el tiempo justo antes de que ocurriera el desastre.

Recursos útiles
MSDN – Restore and Recovery Overview (SQL Server)
MSDN – File Restores (Full Recovery Model)

Traductor: Daniel Calbimonte

diciembre 24, 2016