Las bases de datos de SQL Server ocasionalmente entran en modo “En recuperación”, lo que a menudo puede tomar por sorpresa a los administradores de bases de datos. Este estado ocurre durante un reinicio, restauración de base de datos o apagado inesperado, ya que SQL Server reproduce o anula transacciones incompletas para mantener la integridad de los datos. Si bien este proceso es típicamente automático, a veces puede tomar más tiempo de lo esperado – o incluso parecer atascado – dejando a los administradores inseguros de cómo proceder.
Si ha encontrado este problema, no se preocupe. Este artículo le ayudará a comprender lo que está sucediendo detrás de escena y le enseñará cómo responder. Aquí hay una vista rápida de lo que aprenderá:
- Qué significa el modo “En recuperación” – Por qué su base de datos entra en este estado y qué está haciendo SQL Server en el fondo.
- Las 3 fases de recuperación – Un desglose claro de las fases de Análisis, Redo y Undo que SQL Server sigue durante la recuperación.
- Causas comunes de retrasos – Desde registros de transacciones grandes hasta excesivos archivos de registro virtual (VLF), vea lo que podría estar retrasando el proceso.
- Cómo volver a estar en línea – Aprenda los pasos prácticos para restaurar su base de datos a un estado consistente, desde esperar hasta usar herramientas de reparación de SQL.
- Cuándo buscar ayuda avanzada – Qué hacer si el proceso de recuperación parece estar atascado y no se está haciendo progreso.
Al final de esta guía, tendrá una comprensión sólida del proceso de recuperación de SQL Server y las herramientas que puede utilizar para volver a poner su base de datos en línea lo más rápido posible.
Comprendiendo el modo “En recuperación” en SQL Server.
Cuando SQL Server se reinicia o se restaura una base de datos desde una copia de seguridad, entra en modo ‘En Recuperación’ para mantener la integridad de los datos. Durante esta fase, SQL Server reproduce o deshace transacciones incompletas para prevenir la corrupción de datos y asegurar la consistencia transaccional.
Después de reiniciar SQL Server, la base de datos pasa a modo “En Recuperación”. También puede ver la base de datos de SQL Server en estado de recuperación al iniciar o al restaurarla desde una copia de seguridad.
Figura 1- Base de Datos SQL en Modo “En Recuperación”
El estado “recuperando” de la base de datos significa que la base de datos está realizando un proceso de recuperación y se conectará automáticamente una vez que el proceso esté completo. Sin embargo, puede experimentar que la recuperación es lenta y que la base de datos está atascada en un estado de recuperación. Su base de datos podría seguir en estado de recuperación, ya que las bases de datos SQL pasan por tres fases de recuperación, que pueden tardar dependiendo del tamaño de sus archivos de base de datos.
Las 3 Fases de la Recuperación de Bases de Datos SQL
Por lo general, cuando la base de datos no se apaga correctamente al reiniciar SQL Server, pasa por una recuperación de falla, asegurando que la base de datos permanezca consistente. Hay tres fases de recuperación por las que necesita pasar una base de datos SQL:
Fase 1: Análisis
Esta fase comienza desde el “último punto de control hasta el final del registro de transacciones”. Crea una tabla ‘Dirty Page Table’ (DPT) que ayuda a determinar todas las páginas sucias en el momento del fallo. Además, crea una tabla ‘Active Transaction Table’ (ATT) para identificar transacciones no confirmadas cuando se detuvo el SQL Server.
Fase 2: Redo
En esta fase, SQL Server avanza todas las modificaciones que se realizaron después del punto de control y antes del fallo. Esencialmente, en la fase de rehacer, todas las transacciones que se confirmaron pero que aún no se escribieron en el archivo de datos SQL (.mdf/.ldf) a través del punto de control deben avanzar.
Fase 3: Undo
Si hubo transacciones no confirmadas en el momento de la recuperación de la base de datos, deben retrocederse en la fase de deshacer para llevar la base de datos a un estado consistente.
¿Qué hacer si su base de datos está bloqueada en el modo de recuperación?
Verifique el registro de errores de SQL Server para ver el primer mensaje en la base de datos que puede parecer similar a:
Starting up database ‘NombreDeLaBaseDeDatos’
Esto significa que los archivos de la base de datos están abiertos y que se ha iniciado el proceso de recuperación. Más tarde, debería ver que SQL Server realiza 3 fases de recuperación. Si está buscando orientación sobre cómo hacer una copia de seguridad y restaurar su base de datos, consulte esta guía sobre cómo hacer una copia de seguridad y restaurar bases de datos de Azure SQL.
La fase 1 de recuperación de la base de datos se muestra a continuación:
Recovery of database ‘DatabaseName’ (9) is 0% complete (approximately 95 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Recovery of database ‘DatabaseName’ (9) is 3% complete (approximately 90 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Después de completar la fase 1, SQL Server pasará por las fases 2 y 3 de recuperación:
Recovery of database ‘DatabaseName’ (9) is 5% complete (approximately 85 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required…
Recovery of database ‘DatabaseName’ (9) is 95% complete (approximately 40 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.
Phase 3 of 3. This is an informational message only. No user action is required.
Una vez que se completen las fases 2 y 3, verá algo similar a:
3807 transactions rolled forward in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
0 transactions rolled back in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery is writing a checkpoint in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery completed for database DatabaseName (database ID 9) in 30 second(s) (analysis 1289 ms, redo 29343 ms, undo 72 ms.) This is an informational message only. No user action is required.
En el registro de errores, preste atención al mensaje ‘no se requiere ninguna acción del usuario’. Esto indica que la base de datos está en estado de recuperación. Sin embargo, la recuperación puede llevar más tiempo del esperado, y la base de datos quedará atrapada en modo de recuperación.
Razones detrás del modo “En recuperación” de la base de datos SQL
A continuación se presentan las razones que pueden provocar que una base de datos SQL quede atrapada en modo de recuperación:
- Una transacción de larga duración está deshaciendo
- El tamaño del archivo de registro de transacciones es enorme
- Hay demasiados archivos de registro virtual (VLF) dentro del registro de transacciones de BD
- Hubo un error en el servidor SQL, que ahora está solucionado.
¿Qué puedes hacer para devolver la base de datos a un estado consistente?
Truco 1: Espere a que se complete la recuperación de la base de datos
La solución más obvia para volver a poner en línea la base de datos es tener paciencia y esperar a que se complete el proceso de recuperación; esto podría llevar horas o días. Si la recuperación está tardando demasiado tiempo en una BD en SQL Server 2008 o 2008 R2, la aplicación de soluciones de Microsoft puede ayudar.
Nota: Evite ejecutar el comando RESTORE para poner la base de datos en línea en un estado consistente, ya que SQL Server ya está intentando realizar la misma tarea. Y, ejecutar ‘RESTORE con..Recovery’ significa hacer que la base de datos pase por los mismos pasos nuevamente.
Solución alternativa 2: use una herramienta profesional de reparación de bases de datos SQL
Si la recuperación se completa pero no logra poner la base de datos en un estado consistente, el uso de una herramienta especializada de reparación de SQL puede ayudar a restaurar la base de datos a su estado original.
- Stellar Repair para MS SQL – Una herramienta especializada que ayuda a restaurar las bases de datos de SQL a su estado original después de la corrupción o el fallo.
- ApexSQL Recover – Esta herramienta ayuda a recuperar datos de bases de datos de SQL Server eliminados, truncados o corruptos.
- dbForge SQL Complete – Si bien es principalmente una extensión de IDE, ofrece útiles funciones de manejo de errores y solución de problemas.
- Redgate SQL Data Recovery – Redgate proporciona una variedad de herramientas de SQL Server, incluidas funciones de recuperación de datos.
- Herramienta de recuperación de SQL de SysTools – Conocida por recuperar archivos de bases de datos SQL dañados o corruptos (.MDF y .NDF) y devolverlos a un estado utilizable.
- Kernel para recuperación de bases de datos SQL – Esta herramienta puede recuperar y restaurar bases de datos de SQL Server tanto de la corrupción como de los cierres inesperados.
- Aryson SQL Database Recovery – Otra herramienta que puede reparar y restaurar archivos MDF y NDF en SQL Server.
Conclusión
En este artículo, cubrimos lo que significa cuando una base de datos SQL queda atascada en el modo ‘En recuperación’, las tres fases críticas de recuperación (Análisis, Rehacer y Deshacer), y lo que puedes hacer para poner la base de datos nuevamente en línea. También discutimos posibles causas, desde registros de transacciones grandes hasta demasiados archivos de registro virtual (VLF).
Si tu base de datos SQL todavía está atascada en el modo de recuperación, recuerda que la paciencia es clave. Evita ejecutar un comando RESTORE, ya que esto reinicia el proceso de recuperación. Para problemas graves donde la intervención manual falla, considera usar una herramienta profesional de reparación de bases de datos SQL para restaurar tus datos.
Si encontraste esta guía útil, compártela con tu equipo o deja un comentario con tus experiencias de recuperación de SQL.
Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode