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:
-
Tome la copia de seguridad de la base de datos más antigua y restáurela en SQL Server
-
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.
- 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.
-
Codifique los registros. Haga clic derecho en la base de datos en Object Explorer y seleccione Tasks > Export Data
-
Especifique la base de datos restaurada como fuente de datos y la original como destino
-
Haga clic en Next y usted obtendrá el siguiente diálogo
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:-
Especifique la sentencia Select que retorna los registros eliminados
-
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
- 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
-
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.
-
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.
-
Seleccione las tablas desde donde los registros han sido eliminados
-
Verifique del mapeo para cada tabla
-
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
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.
- Inicie ApexSQL Data Diff
- Seleccione la copia de seguridad de la base de datos que contiene los registros eliminados como una fuente
-
Seleccione la base de datos en línea como destino
- Haga clic en Compare
- Las tablas con diferentes registros son mostradas en la cuadrícula principal ApexSQL Data Diff
-
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
-
Haga clic en Sychronize en el menú y avance a través de los pasos en el Synchronization wizard
-
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
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:
- Inicie ApexSQL Recover
-
Seleccione la opción Recover lost data due to a DELETE operation
-
Seleccione la base de datos desde la que los registros han sido eliminados
-
Seleccione la opción Add transaction logs
-
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.
-
Si es posible, especifique el tiempo cuando los registros fueron eliminados
-
Seleccione todas las tablas o sólo aquellas específicas
-
Cambie la ruta para el script de recuperación si usted desea y haga clic en Recover
-
El script de recuperación creado insertará los datos eliminados de vuelta a su base de datos. Verifíquelo y ejecute
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.
- Inicie ApexSQL Recover
- Seleccione la opción Recover lost data due to a DELETE operation
- Seleccione la base de datos desde la cual los registros han sido eliminados
-
Seleccione la opción No additional transaction logs are available
- Seleccione todas las tablas o sólo aquellas específicas
- Cambie la ruta para el script de recuperación si lo desea y haga clic en Recover
- 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