Bases de datos del servidor SQL bloqueadas en estado de restauración

79

Tengo un servidor Sharepoint. ¡Tuvimos un problema con nuestra herramienta de respaldo y ahora algunas de mis bases de datos están atascadas en el estado de restauración!

Imagen que muestra la restauración de bases de datos

¿Es posible detener el proceso de restauración? y también, ¿cómo puedo asegurarme de que la integridad de la base de datos no se haya visto comprometida?

Pooya Yazdani
fuente

Respuestas:

129

Es probable que esto sea causado por la secuencia de comandos de restauración que agrega el WITH NORECOVERYparámetro, para que la base de datos esté lista para que se aplique un registro de transacciones después de la restauración.

La base de datos ahora está esperando el último archivo de registro de transacciones.

Tu también puedes:

  1. Aplique el último registro de transacciones , utilizando RESTORE LOG database_name FROM backup_device WITH RECOVERY;... o
  2. Restaurar la base de datos nuevamente, pero esta vez usando ... WITH RECOVERY;... o
  3. Forzar la base de datos fuera del modo de restauración ejecutando: RESTORE DATABASE YourDb WITH RECOVERY;

Antes de hacer esto, asegúrese de comprender las implicaciones de estas opciones. Puede causar pérdida de datos si no tiene cuidado.

Vea esto para más detalles:

Thomas Kejser
fuente
Cuando no funcionen, visite dba.stackexchange.com/questions/11175/… - nuevamente, MUCHAS ADVERTENCIAS DE DOOM si no sabe lo que está haciendo y comprende el riesgo total de pérdida de datos. Pero si está en un enlace en un servidor que no es de producción, tiene buenas copias de seguridad para realizar una restauración nueva, y puede permitirse reiniciar SQL en dicho servidor, funciona.
NateJ
66
"Forzar la base de datos fuera del modo de restauración ejecutando: RESTORE DATABASE YourDb WITH RECOVERY". 20 minutos de rascarse la cabeza y reiniciar los servicios, luego arreglado con un solo revestimiento. ¡Gracias!
Echilon
2
Estaba atrapado en la misma situación que mi caja de desarrollo. ¡La opción 3 funcionó de maravilla!
Moiz Tankiwala
Traté de restaurar una base de datos de .bak en una nueva base de datos, pero olvidé cambiar los nombres de archivo en el disco. La restauración falló, aunque no porque los archivos estuvieran en uso por una base de datos existente, sino por algún otro error. Esto estropeó el DB existente (atascado en el estado de restauración). # 3 vuelve a ponerlo en línea en un segundo y verificando los datos todo se ve bien. ¡Gracias!
CoDEmanX
44

Script simple de T-SQL para resolver este problema:

escriba este script en la ventana Nueva consulta y ejecute:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;
Sina
fuente
RESTAURAR BASE DE DATOS [nombre_base_datos] CON RECUPERACIÓN ... Funcionó perfecto para mí. ¡Gracias!
10
Tenga mucho cuidado de comprender las implicaciones de eso. Si el DB está esperando una restauración de registro que podría resultar en una pérdida de datos considerable.
David Spillett
2
No funciona debido a un error, "La base de datos no se puede recuperar porque el registro no se restauró".
Ian Boyd
0

Acabo de tener esta situación, y la cura fue bastante sorprendente:

ALTER DATABASE DBName SET ONLINE;

Aparentemente, la restauración de NetBackup que se rompió lo dejó en un estado extraño. Ninguna otra solución funcionó (aunque aún no había intentado reiniciar el servicio SQL Server)

Sin embargo, tendría cuidado con la base de datos, ya que teóricamente, una vez que se inicia una restauración y luego falla, podría haber dañado los datos. De todos modos, voy a restaurar la base de datos de nuevo, así que no me importa.

ErikE
fuente
Esta es la respuesta incorrecta para esta pregunta, si intenta establecer una base de datos que está en 'Restauración' en línea, obtendrá el error "ALTER DATABASE no está permitido mientras una base de datos esté en el estado Restaurando".
James Jenkins
Tal vez no esté familiarizado con cómo en StackOverflow, a veces respondemos preguntas que son ligeramente diferentes de las publicadas. Esto proporciona valor porque las personas suelen hacer preguntas similares a las suyas después de buscar en línea. Con respecto a su afirmación fáctica sobre ALTER DATABASEno ser permitido, les aseguro que en mi caso, la base de datos era, de hecho, que muestra como en la restauración de estado, y el uso SET ONLINEde hecho trabajé . Así que date cuenta de que me estás llamando equivocado o mentiroso. ¿Es eso lo que realmente necesitas hacer cuando hay una alternativa disponible?
ErikE
@JamesJenkins ¿Y cuál es esa alternativa? La alternativa es la hipótesis de que una base de datos podría mostrarse en la restauración del estado pero en realidad no se está restaurando. O podría estar en el paso final de la restauración, con la restauración realmente completada para que realmente se pueda establecer en ONLINEestado. En resumen, creo que su comentario y voto negativo están fuera de línea para este sitio y su información es objetivamente incorrecta porque no está debidamente calificada con los datos que he presentado.
ErikE
0

Como sabemos, la opción de restauración de la base de datos predeterminada es con Recuperación, lo que garantiza que la base de datos esté disponible y en línea para su uso después de completar la restauración de la base de datos.

Ejemplo:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

Veamos los puntos importantes sobre Restaurar sin recuperación

  • La base de datos no es utilizable
  • Permanece en modo de restauración
  • La siguiente secuencia de restauración se puede hacer
  • No revierte ninguna transacción no comprometida

Restaurar sin recuperación

Esta opción se usa especialmente cuando se deben restaurar varias copias de seguridad. Significa que cuando ejecuta el comando de restauración con la opción norecovery, la base de datos no se libera a los usuarios hasta que se restaura la última copia de seguridad en secuencia. Con la última copia de seguridad, se usa la opción Recuperación y la base de datos se conecta.

Ejemplo:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

Y entonces:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO
Priyanka
fuente
1
Es posible que tenga un error tipográfico en su respuesta. La sección marcada ... sobre Restaurar con recuperación enumera todas las opciones que se aplican a la RESTORE ...WITH NORECOVERYopción. ¿Podrías volver a verificar eso?
hot2use