Si la restauración de una base de datos original a un estado previo no es una opción, en el caso de datos accidentalmente actualizados, eliminados, borrados o dañados, aún es posible restaurar estas tablas si la copia de seguridad de la base de datos fue creada previamente al accidente.
Esto puede ser conseguido restaurando la última copia de seguridad previa al accidente en una base de datos diferente, y luego copiando las tablas de vuelta a la base de datos original. Dado que los datos recuperados no son consistentes con el estado actual de la base de datos, la integridad referencial puede estar también rota. También, las restricciones y errores de llaves pueden ocurrir cuando los datos son copiados de vuelta a la base de datos original.
Para prevenir esto, los pasos apropiados para encargarse de problemas de integridad referencial deben tomarse y todos los índices, índices de texto completo, desencadenadores y restricciones deben ser recreadas si la tabla original se perdió.
Para conseguir esto, los siguientes pasos necesitan ser ejecutados:
- Restaure nativamente la última copia de seguridad SQL previa al accidente junto con todos los archivos a una nueva base de datos en el mismo SQL Server.
- Copie los datos de la nueva base de datos a la original. Dependiendo de la naturaleza del accidente (una tabla fue borrada o sólo filas han sido eliminadas) esto puede ser conseguido de las siguientes maneras:
- Las filas fueron eliminadas y la tabla aún existe. Use el siguiente código para insertar sólo las filas perdidas a la tabla en la base de datos original
USE original_database GO SET IDENTITY_INSERT table_1 ON INSERT INTO table_1 (column_name) SELECT * FROM restored_database.table_1 SET IDENTITY_INSERT table_1 OFF
- La tabla fue borrada y necesita ser recreada por completo. La sentencia SELECT INTO creará (copiará) tanto la estructura de la tabla como los datos a la base de datos original:
USE original_database GO SELECT * INTO table_1 FROM restored_database.table_1 GO
- Las filas fueron eliminadas y la tabla aún existe. Use el siguiente código para insertar sólo las filas perdidas a la tabla en la base de datos original
- 3. Si hay índices, índices de texto completo, desencadenadores o restricciones en la base de datos original, ellos necesitan ser recreados y cualquier problema de integridad referencial necesita ser resuelto manualmente.
- 4. Para verificar la integridad de los datos ejecute la siguiente sentencia.
DBCC CHECKTABLE ("table_1")
El principal problema con esta solución es el hecho de que la copia de seguridad de la base de datos tiene que ser completamente restaurada para extraer sólo tablas específicas. Este proceso puede tomar mucho tiempo o demandar una cantidad substancial de espacio libre en el Servidor SQL, lo cual no siempre está disponible.
Hay una alternativa a la restauración completa de la copia de seguridad usando ApexSQL Recover yr ApexSQL Restore.
Restaurar tablas específicas usando ApexSQL Recover
ApexSQL Recover es una herramienta de recuperación SQL Server que tiene una característica conveniente para extraer datos desde una copia de seguridad de una base de datos que permite una restauración rápida de sólo tablas/filas específicas.
Para restaurar sólo tablas/filas específicas, los siguientes pasos necesitan ser ejecutados:
-
Inicie ApexSQL Recover y seleccione la opción para extraer From database backup
-
Haga clic en el botón Add y seleccione una copia de seguridad de base de datos y todas las copias de seguridad de registros de transacciones previas al momento en el cual los cambios no deseados han ocurrido.
-
En el siguiente paso, seleccione sólo las tablas que necesitan ser recuperadas y deseleccione las otras
-
En el paso de acción de recuperación del asistente, elija entre Save recovery script to file y Recover to new database. La primera opción creará un script en la localización del archivo provista que contiene los datos que necesitan ser ejecutados manualmente en una base de datos SQL Server, y la última opción directamente creará una base de datos con los datos apropiados. Dependen del usuario decidir qué elección queda mejor.
-
Sin importar la elección en el paso previo, un último paso queda y es el mismo para ambas opciones – seleccionar la opción de extracción. Dependiendo del tipo de restauración, elija entre extraer las estructuras de las tablas, extraer datos o ambos y haga clic en el botón Extract para completar el proceso.
Después de que el proceso se complete, los datos/estructuras extraídos pueden ser copiados a la base de datos original, como se describió en la primera parte del artículo.
Restaurar tablas específicas usando ApexSQL Restore
ApexSQL Restore es otra herramienta de restauración de datos SQL Server que puede mejorar grandemente este proceso. Restaurando una base de datos virtualmente con ApexSQL Restore, un usuario no sólo ahorrará tiempo, sino que también una gran cantidad de espacio en el Servidor SQL.
En lugar de restaurar una base de datos nativamente, se recomienda añadir una base de datos virtual a SQL Server que será completamente funcional, y que puede ser usada para la extracción de datos.
Para virtualizar una base de datos los siguientes pasos necesitan ser ejecutados:
-
Inicie ApexSQL Restore y haga clic en Add virtual database para iniciar el asistente
-
En el diálogo Restore a backup que aparecerá, los siguientes detalles deben ser provistos:
- El nombre de la instancia SQL Server a la que se anexará la copia de seguridad y credenciales válidas.
- El nombre de una base de datos en la cual una copia de seguridad será restaurada virtualmente.
-
En el siguiente paso del asistente, especifique la copia de seguridad que será anexada. Para hacer eso, haga clic en el botón Add files, navegue a la copia de seguridad de la base de datos y a todas las copias de seguridad de registros de transacciones previas al momento en el cual los cambios no deseados han ocurrido y haga clic en Open
-
Si el tiempo exacto de los cambios no deseado se conoce, cambie la configuración Restore to a Point in time haciendo clic en el botón de selección Specific point in time, y especifique el tiempo en la línea de tiempo
- Haga clic en Finish para anexar la copia de seguridad
Después de que la copia de seguridad es virtualmente restaurada, puede ser usada para copiar la estructura y/o los datos a la tabla dañada.
Restaurar una copia de seguridad para extraer sólo una o un par de tablas puede ser un proceso que consume tiempo y espacio, lo cual puede interferir con el proceso de tener la base de datos de vuelta en un estado saludable. ApexSQL Recover yApexSQL Restore puede mejorar grandemente el proceso de ejecución y cortar el tiempo/espacio necesitado para este trabajo significativamente.
Traductor: Daniel Calbimonte
noviembre 14, 2015