Una tabla accidentalmente borrada puede ser recuperada de muchas maneras. La elección de la técnica depende de los recursos disponibles para la recuperación. La primera elección es usualmente una copia de seguridad de la base de datos. Pero incluso si usted tiene una, la tabla borrada puede ser aún recuperada (en algunos casos incluso más rápidamente que con una copia de seguridad).
Veamos cómo esto puede ser hecho.
Use SQL Server Management Studio
Si tiene una copia de seguridad completa de la base de datos, o una cadena de copias de seguridad diferenciales que contienen la tabla borrada:
- Restaure la base de datos en un servidor de prueba
-
En SQL Server Management Studio, haga clic derecho en la base de datos, seleccione Tasks y luego Generate Scripts
-
En la lista de objetos, seleccione la tabla borrada
-
En el diálogo Set Scripting Options especifique la ruta del archivo y el nombre
- Haga clic en Advanced y seleccione:
- Generate script for Dependent objects – para codificar los objetos que dependen de la tabla borrada. Note que usted no puede borrar una tabla sin remover la restricción de referencia o la tabla primero.
- Tipos de datos para codificar – seleccione Schema y los datos si desea recuperar los registros perdidos también
- Una vez que el script ha sido generado, usted puede abrirlo, revisarlo y modificarlo. El script crea la tabla borrada primero, y luego inserta los registros borrados:
CREATE TABLE [dbo].[Orders]( [Id] [int] NOT NULL, [OrderNo] [int] NOT NULL, [CustomerId] [int] NULL, [OrderDate] [date] NULL ) ON [PRIMARY] GO INSERT [dbo].[Orders] ([Id], [OrderNo], [CustomerId], [OrderDate])
VALUES (1, 1000, 35, CAST(0x2A370B00 AS Date)) ALTER TABLE [dbo].[Orders] ADD DEFAULT (getdate()) FOR [OrderDate] GO - Ejecute el script contra la base de datos original
Este método es simple y sencillo, siendo el único contratiempo que no es aplicable si no hay una copia de seguridad de la base de datos. También, si la base de datos es grande, la restauración de la copia de seguridad puede consumir mucho tiempo.
Use ApexSQL Diff
Hay otro método donde una copia de seguridad de la base de datos es necesaria, pero no tiene que ser restaurada para recuperar tablas perdidas debido a una operación DROP Table.
ApexSQL Diff es una herramienta de sincronización y comparación para bases de datos SQL Server. Detecta diferencias entre objetos de bases de datos, genera reportes detallados y sincroniza bases de datos en vivo y versionadas, copias de seguridad de bases de datos, snapshots y carpetas de scripts.
- Inicie ApexSQL Diff
- En el diálogo Project Management, haga clic en New para crear un nuevo proyecto
- En el panel Source, seleccione Backup como Data source type
- Haga clic en Add files, añada una copia de seguridad complete de la base de datos, o una copia de seguridad complete de la base de datos y una cadena de copias de seguridad diferencial de la base de datos, y selecciónelos.
- En el panel Destination, seleccione Database como Data source type
-
Seleccione la base de datos en vivo y el tipo de autenticación
- Haga clic en Show Advance tabs
-
En Object filter, seleccione Use filter para las tablas
Para que todos los objetos que dependen de la tabla borrada estén correctamente codificados – desencadenadores, tablas, etc., deje todos los tipos de objetos seleccionados.
-
En el panel Tables filter, seleccione sólo la tabla borrada
-
Haga clic en Compare
ApexSQL Diff mostrará los resultados de la comparación en la cuadrícula principal. La tabla borrada y los objetos que dependen de ella, si hay alguno, serán mostrados en la cuadrícula.
- Seleccione la tabla en la cuadrícula principal
- Haga clic en Synchronize en el menú
- Para codificar los objetos de los que depende la tabla borrada, selecciónelos desde la lista de objetos dependientes
- Siga el Synchronization wizard
-
En el paso Output options, seleccione Create a synchronization en Output action
- Haga clic en Done
-
El script generado será mostrado en el editor interno de ApexSQL Diff. Revíselo, modifíquelo si es necesario, y ejecútelo
La tabla y los objetos dependientes seleccionados serán recreados.
Como ApexSQL Diff puede leer copias de seguridad de bases de datos SQL Server, la recuperación de la tabla es más rápida cuando las copias de seguridad no están siendo restauradas primero. Los objetos que dependen de la tabla borrada son recuperados sin problemas. La cuadrícula principal muestra el script y las diferencias para cada objeto, lo cual provee granularidad y ayuda en decidir qué objetos seleccionar para la sincronización.
SI usted no tiene una copia de seguridad de la base de datos SQL, este método no es aplicable. También, sólo la estructura de la tabla puede ser recuperada.
Use ApexSQL Log
Incluso si no hay una copia de seguridad de la base de datos SQL que contenga la tabla borrada, la recuperación de tablas perdidas debido a una operación DROP Table puede ser hecha.
ApexSQL Log es un visor de registros de transacciones de SQL Server que audita, revierte o reproduce cambios de datos y objetos. Restaura objetos y datos eliminados o modificados, capturando información acerca del usuario, la aplicación y el anfitrión usados para hacer cada cambio.
- Inicie ApexSQL Log
- Conéctese a la base de datos en vivo en la cual la tabla ha sido borrada
- En el siguiente paso Añada copias de seguridad de registros de transacciones creados después de que la tabla fue borrada. Por favor note que los registros de transacciones tienen que formar una cadena completa
- Haga clic en Next
-
En la pestaña Operations, des-seleccione todas las operaciones de datos (DML) y esquema (DDL). Seleccione sólo DROP Table en la lista de Schema operations
- Haga clic en Next y seleccione Open results in grid option
- Todas las operaciones drop table que existen en el registro de transacciones en línea y las copias de seguridad de registros añadidas serán mostradas en la cuadrícula principal
-
Seleccione la tabla que desea recuperar, seleccione la opción Create undo script del menú
-
Una vez que el script deshacer ha sido creado, revíselo y ejecútelo
Las ventajas de este método son que no es necesaria una copia de seguridad de la base de datos. Como una sentencia DROP TABLE no crea un registro para cada fila de la tabla en el registro de transacciones en línea, este método puede recuperar sólo la estructura de la tabla.
Note que si la base de datos está en el modelo de recuperación simple, las transacciones podrían haber sido sobrescritas. En este caso, mientras más pronto ejecute ApexSQL Log después de que la tabla fue borrada, mayores serán las posibilidades de una recuperación exitosa.
Use ApexSQL Recover
Como ApexSQL Recover lee tanto archivos de datos (MDF) como de registros de transacciones (LDF), puede recuperar una tabla borrada incluso cuando la transacción ya no existe en el archivo LDF.
ApexSQL Recover es una herramienta de recuperación de SQL Server que recupera datos eliminados, truncados, corruptos o dañados. Recupera objetos y datos perdidos debido a operaciones drop y restaura BLOBS tanto eliminados como en línea como archivos.
- inicie ApexSQL Recover
-
Seleccione la opción de recuperación de datos From DROP TABLE operation
- Conéctese a la base de datos en vivo
- Haga clic en Next
-
Si hay copias de seguridad de registros de transacciones creadas después de que la tabla fue borrada, o un registro de transacciones suelto que contiene la transacción responsable para el borrado, haga clic en Add transaction logs
-
En el siguiente paso, Añada las copias de seguridad de registros de transacciones y los registros de transacciones sueltos
- Seleccione el periodo de tiempo cuando la tabla fue borrada. Si no está seguro cuándo pasó, deje la opción Date and time are unknown seleccionada
- Si es necesario, modifique la ruta del archivo y el nombre para el script de recuperación, y haga clic en Recover
-
Una vez que el script de recuperación ha sido generado, revíselo, encuentre las tablas que desea recuperar y ejecute
Gracias a que puede leer archivos tanto MDF como LDF, ApexSQL Recover tiene más posibilidades de una recuperación exitosa. De todas maneras, si la información acerca de la tabla borrada es sobrescrita en los archivos MDF y LDF, ApexSQL Recover no puede ayudar.
Tener copias de seguridad de la base de datos es un buen punto de partida, pero puede no ser ser el más rápido. Con copias de seguridad, hay diferentes métodos – los que requieren que una copia de seguridad se restaure primero, y por tanto requieren más tiempo, y los otros que pueden leer copias de seguridad.
Si usted no tiene una copia de seguridad de la base de datos, usted puede recuperar una tabla borrada de los archivos de registros de transacciones y de la base de datos SQL. Cuando se trata de recuperar desde una base de datos en el modelo de recuperación simple, puede que falle dado que la transacción drop table puede haber sido sobrescrita. Incluso así, la recuperación es posible desde el archivo MDF
Traductor: Daniel Calbimonte
junio 4, 2015