Incluso tomando todas las precauciones, percances con su base de datos aún son una posibilidad. Aunque usted esté preparado para un desastre – su base de datos está en un modelo de recuperación completo y usted crea copias de seguridad del registro de transacciones y la base de datos regularmente, aún hay algunas situaciones cuando un problema no puede ser resuelto usando una solución ya disponible por defecto.
Uno de estos problemas es restaurar un solo objeto. No es inusual eliminar un objeto de base de datos SQL (por ejemplo, un procedimiento almacenado) que aún es necesitado, o modificarlo cuando la versión antigua pueda ser requerida después.
Cómo restaurar un procedimiento almacenado sin demasiados problemas
Los sistemas de control de versiones proveen la funcionalidad que usted necesita. Pero esto no es aplicable si usted no tiene el objeto ya versionado y todo lo que tiene es una copia de seguridad de la base de datos.
Restaurando la copia de seguridad de la base de datos completa
Usted tiene una copia de seguridad de la base de datos completa con el objeto que necesita, pero no puede restaurarla sobre la base de datos existente, dado que todos los otros cambios hechos después de que la copia de seguridad de la base de datos completa fuera creada serán sobrescritos.
La solución es:
- Restaurar la copia de seguridad de la base de datos completa en un servidor de prueba
- Para crear un script DDL para el objeto que necesita, haga clic derecho en el procedimiento almacenado que quiere restaurar en Object Explorer de SQL Server Management Studio.
- Seleccione Script Stored procedure as | Create To | New Query Editor Window
- Cuando el script sea generado, ejecútelo contra la base de datos original.
La desventaja de este método es que, para bases de datos muy grandes, restaurar una base de datos toma mucho tiempo y espacio, así que este método es muy ineficiente.
Recuperar desde el cache
Si el procedimiento almacenado ha sido ejecutado recientemente, hay una posibilidad de que aún esté en el cache.
- Ejecute el siguiente SQL para leer el cache
SELECT Cached.refcounts, Cached.usecounts, Cached.objtype, SQLText.dbid, SQLText.objectid, SQLText.text, Query.query_plan FROM sys.dm_exec_cached_plans Cached CROSS APPLY sys.dm_exec_sql_text(Cached.plan_handle)SQLText CROSS APPLY sys.dm_exec_query_plan(Cached.plan_handle)Query
- Verifique los resultados
- Si encuentra el procedimiento almacenado que necesita, copies u columna de texto
La ventaja de este método es que usted ni siquiera necesita una copia de seguridad de la base de datos completa. La desventaja es que si el procedimiento almacenado no ha sido ejecutado recientemente, usted no podrá recuperar el procedimiento almacenado.
ApexSQL Diff es una herramienta de comparación y sincronización de base de datos que detecta diferencias entre objetos de bases de datos y los resuelve sin errores. Tiene un filtro granular que permite comprar sólo objetos específicos. Mientras lee las copias de seguridad de bases de datos, usted puede compararlas sin restaurarlas primero.
- Inicie ApexSQL Diff
- Haga clic en New en el diálogo Project management
- En el panel Source:
- Seleccione Backup desde el menú desplegable Type
- Seleccione el conjunto de copias de seguridad desde el archivo de copia de seguridad
- En el panel Destination:
- Seleccione Database desde el menú desplegable Type
- Especifique la instancia SQL con la base de datos desde el menú desplegable Server
- Especifique el método de autenticación para esa instancia SQL (y un conjunto válido de credenciales si usted elige autenticación de SQL Server)
- Especifique el nombre de la base de datos en el menú desplegable Database
- Haga clic en Show advanced tabs
- Haga clic en Object filter
- Des-seleccione todos los tipos de objetos, excepto Stored Procedures
- Seleccione Use filter para procedimientos almacenados
- En el árbol filtro, haga clic en Procedures
- Des-seleccione todos los procedimientos almacenados excepto el que quiere recuperar
- Haga clic en Compare
- Seleccione el procedimiento almacenado que desea recuperar en la cuadrícula principal
- En la pestaña Home, en el grupo Actions, haga clic en Synchronize
- En el paso Synchronization direction del Synchronization wizard, haga clic en Next
- En el paso Dependencies del Synchronization wizard, haga clic en Next
- Revise el resumen de la sincronización y los avisos, si hubiera alguno, y haga clic en Next
- En el paso Output options del Synchronization wizard, seleccione Create a synchronization script
- Haga clic en Done
- Verifique el script y presione F5 para ejecutarlo
Una vez que los procedimientos almacenados sean recreados, usted verá el siguiente mensaje:
Dirección de sincronización
Si usted perdió o modificó un procedimiento almacenado, no hay necesidad de restaurar la base de datos completa desde una copia de seguridad o buscar en el cache. Use ApexSQL Diff para crear un script DDL directamente desde la copia de seguridad de la base de datos sólo para el objeto que usted necesita restaurar.
Traductor: Daniel Calbimonte
junio 12, 2015