full - SQL Server: Base de datos bloqueada en estado de "Restauración"
restore database sql server 2012 (21)
Copié una base de datos:
BACKUP DATABASE MyDatabase
TO DISK = ''MyDatabase.bak''
WITH INIT --overwrite existing
Y luego trató de restaurarlo:
RESTORE DATABASE MyDatabase
FROM DISK = ''MyDatabase.bak''
WITH REPLACE --force restore over specified database
Y ahora la base de datos está atascada en el estado de restauración.
Algunas personas han teorizado que es porque no había ningún archivo de registro en la copia de seguridad, y era necesario avanzar con:
RESTORE DATABASE MyDatabase
WITH RECOVERY
Excepto que, por supuesto, falla:
Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Y exactamente lo que desea en una situación catastrófica es una restauración que no funcionará.
La copia de seguridad contiene un archivo de datos y de registro:
RESTORE FILELISTONLY
FROM DISK = ''MyDatabase.bak''
Logical Name PhysicalName
============= ===============
MyDatabase C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/DATA/MyDatabase.mdf
MyDatabase_log C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/DATA/MyDatabase_log.LDF
- Deje comprobar y ejecutar el servicio de agente SQL en primer lugar.
Usando el siguiente T-SQL:
SELECCIONE el nombre de archivo DE master.sys.sysaltfiles DONDE dbid = DB_ID (''db_name'');
Usando T-SQL continuamente:
RESTORE DATABASE FROM DISK = ''DB_path'' CON REINICIAR, REEMPLAZAR;
¡Espero que esto ayude!
éste sí funcionó:
Tuve una situación en la que mi base de datos mostró un estado de restauración y no pude ejecutar ninguna consulta y no pude conectarme con nuestro software.
Lo que hice para salir de esta situación es:
Detenga todos los servicios relacionados con SQL de los servicios de Windows.
Abrí la carpeta de DATOS donde se encuentran los archivos Ldf y Mdf en el directorio SQL, normalmente es similar a: "C: / Archivos de programa *********** / MSSQL / DATA
Luego copié los archivos Ldf y Mdf de la base de datos: [nombre de la base de datos] .mdf y [nombre de la base de datos] _log.ldf
Copié ambos archivos a otra carpeta.
Luego, volví a iniciar todos los servicios relacionados con SQL (en el paso 1) desde los servicios de Windows.
Comencé mi estudio de MS SQL Management con inicio de sesión normal.
Haga clic derecho en la base de datos culpable y presione BORRAR (para eliminar la base de datos).
Todos los archivos LDF y MDF relacionados con esta base de datos han pasado de la carpeta de DATOS (mencionada en el paso 2).
Creé una nueva base de datos con el mismo nombre (el mismo nombre del que eliminé en el paso 6: la base de datos del culpable).
Luego [nombre de la base de datos] -> haga clic con el botón derecho -> tareas -> Desconectar.
Luego copié ambos archivos (del paso 3) a la carpeta de DATOS (paso 2).
[nombre de la base de datos] -> clic derecho -> tareas -> Poner en línea.
¿Has intentado ejecutar un VERIFICAR SOLAMENTE? Sólo para asegurarse de que es una copia de seguridad de sonido.
Así es como lo haces:
- Detener el servicio (MSSQLSERVER);
- Cambie o elimine el nombre de la base de datos y los archivos de registro (C: / Archivos de programa / Microsoft SQL Server / MSSQL.1 / MSSQL / Data ...) o donde sea que tenga los archivos;
- Iniciar el servicio (MSSQLSERVER);
- Eliminar la base de datos con problema;
- Restaura la base de datos de nuevo.
¡Buena suerte!
De forma predeterminada, cada RESTORE DATABASE
viene con la configuración RECOVERY
. Las opciones ''NORECOVERY'', básicamente le dicen al servidor SQL que la base de datos está esperando más archivos de restauración (podría ser un archivo DIFF y un archivo LOG y, si es posible, podría incluir un archivo de copia de seguridad de registro de cola). Las opciones de "RECUPERACIÓN" finalizan todas las transacciones y permiten que la base de datos esté lista para realizar transacciones.
Asi que:
- Si su base de datos está configurada con el modelo de recuperación SIMPLE , solo puede realizar una restauración COMPLETA con la opción
NORECOVERY
, cuando tenga una copia de seguridad DIFF . No se permiten copias de seguridad de LOG en la base de datos del modelo de recuperación SIMPLE . - De lo contrario, si su base de datos está configurada con el modelo de recuperación FULL o BULK-LOGGED , puede realizar una restauración COMPLETA seguida de la opción
NORECOVERY
, luego realizar un DIFF seguido deNORECOVERY
y, por último, realizar la opción de restauración LOG conRECOVERY
.
Recuerde, LA ÚLTIMA CONSULTA DE RESTAURACIÓN DEBE TENER RECOVERY
OPCIÓN DE RECOVERY
. Podría ser una forma explícita o no. En términos de T-SQL, la situación:
-
USE [master] GO RESTORE DATABASE Database_name FROM DISK = N''//path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD, RECOVERY -- This option could be omitted. GO
La opción WITH REPLACE se debe utilizar con precaución, ya que puede provocar la pérdida de datos
O, si realiza una copia de seguridad COMPLETA y DIFF, puede usar este
USE [master]
GO
RESTORE DATABASE Database_name
FROM DISK = N''//path_of_backup_file.bak'' WITH FILE = 1,
NOUNLOAD,NORECOVERY
GO
RESTORE DATABASE Database_name
FROM DISK =N''//path_of_**diff**backup_file.bak'' WITH FILE = 1,
NOUNLOAD, RECOVERY
GO
-
USE [master] GO -- Perform a Tail-Log backup, if possible. BACKUP LOG Database_name GO -- Restoring a FULL backup RESTORE DATABASE Database_name FROM DISK = N''//path_of_backup_file.bak'' WITH FILE = 1, NOUNLOAD,NORECOVERY GO -- Restore the last DIFF backup RESTORE DATABASE Database_name FROM DISK = N''//path_of_DIFF_backup_file.bak'' WITH FILE = 1, NORECOVERY,NOUNLOAD GO -- Restore a Log backup RESTORE LOG Database_name FROM DISK = N''path_of_LOG_backup_file.trn'' WITH FILE = 2, RECOVERY, NOUNLOAD GO
Por supuesto, puede realizar una restauración con la opción STATS = 10 que le dice al SQL Server que informe cada 10% completado.
Si lo prefiere, puede observar el proceso o restaurar en una consulta basada en tiempo real. De la siguiente manera:
USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command in (''BACKUP DATABASE'',''RESTORE DATABASE'')
GO
Espero que esto ayude.
Debe utilizar la opción WITH RECOVERY
, con el comando RESTORE
su base de datos, para poner su base de datos en línea como parte del proceso de restauración.
Esto es, por supuesto, solo si no tiene la intención de restaurar ninguna copia de seguridad del registro de transacciones, es decir, solo desea restaurar una copia de seguridad de la base de datos y luego poder acceder a la base de datos.
Tu orden debe verse así
RESTORE DATABASE MyDatabase
FROM DISK = ''MyDatabase.bak''
WITH REPLACE,RECOVERY
Puede tener más éxito usando el asistente de restauración de base de datos en SQL Server Management Studio. De esta manera, puede seleccionar las ubicaciones específicas de los archivos, la opción de sobrescritura y la opción CON Recuperación. A veces, el proceso de restauración se atascó solo por el tamaño del archivo de base de datos. vea aquí: https://madhivanan.wordpress.com/2016/09/06/issue-in-recovering-a-database-that-is-in-the-restoring-state-reference/
En mi caso, fue suficiente para eliminar la base de datos que estaba colgada en el estado "Restaurando ..." con el comando SQL
drop database <dbname>
en una ventana de consulta.
Luego hice clic con el botón derecho en Bases de datos y seleccioné Actualizar, lo que eliminó la entrada en Management Studio. Luego realicé una nueva restauración que funcionó bien (tenga en cuenta que ponerla fuera de línea no funcionó, un reinicio del servicio de SQL no funcionó, un reinicio de servidor no funcionó también).
Esto puede ser bastante obvio, pero me hizo tropezar justo ahora:
Si está realizando una copia de seguridad del registro de seguimiento, este problema también puede deberse a que esta opción esté seleccionada en el asistente de restauración de SSMS: "Dejar la base de datos de origen en el estado de restauración (SIN NORECOVERÍA)"
He tenido este problema cuando también recibí un error de TCP en el registro de eventos ...
Suelte la base de datos con sql o haga clic con el botón derecho en el administrador "delete" y restaure nuevamente.
De hecho, he empezado a hacer esto por defecto. Script el DB caer, recrear y luego restaurar.
La opción WITH RECOVERY se usa de forma predeterminada cuando se ejecutan los comandos RESTORE DATABASE / RESTORE LOG. Si está atrapado en el proceso de "restauración", puede devolver una base de datos al estado en línea ejecutando:
RESTORE DATABASE YourDB WITH RECOVERY
GO
Si es necesario restaurar varios archivos, los comandos de la CLI requieren WITH NORECOVERY y WITH RECOVERY respectivamente - solo el último archivo en el comando debe tener WITH RECOVERY para volver a poner la base de datos en línea:
RESTORE DATABASE YourDB FROM DISK = ''Z:/YourDB.bak''
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = ''Z:/YourDB.trn''
WITH RECOVERY
GO
También puede usar el asistente de SQL Server Management Studio:
También hay un proceso de restauración virtual, pero tendrá que usar soluciones de terceros. Por lo general, puede utilizar una copia de seguridad de la base de datos como base de datos en línea en vivo. ApexSQL e Idera tienen sus propias soluciones. Revisión por SQL Hammer sobre ApexSQL Restore . La restauración virtual es una buena solución si se trata de una gran cantidad de copias de seguridad. El proceso de restauración es mucho más rápido y también puede ahorrar mucho espacio en la unidad de disco. Puedes ver la infographic aquí para una comparación.
Lo que me lo arregló fue
- detener la instancia
- creando una copia de seguridad de los archivos .mdf y .ldf en la carpeta de datos
- Reinicie la instancia
- eliminar la base de datos atascado restaurando
- vuelva a colocar los archivos .mdf y .ldf en la carpeta de datos
- Adjunte la instancia a los archivos .mdf y .ldf
Me di cuenta de por qué.
Si el cliente que emitió el comando RESTORE DATABASE
desconecta durante la restauración, la restauración se bloqueará.
Es extraño que el servidor, cuando se le indique que restaure una base de datos mediante una conexión de cliente, no finalice la restauración a menos que el cliente permanezca conectado todo el tiempo.
OK, tengo un problema similar y exactamente como lo fue en el caso de Pauk, fue causado porque el servidor se quedó sin espacio en el disco mientras se restauraba y, por lo tanto, causó un estado de restauración permanente. ¿Cómo terminar este estado sin detener los servicios de SQL Server?
He encontrado una solución :)
Drop database *dbname*
También puede haber problemas para eliminar una base de datos atascada si la instantánea está habilitada. Para mí esto funcionó:
- Primero seguí los pasos de Tipu Delacablu (lee algunos mensajes arriba)
- ejecutar comando: soltar la base de datos [su base de datos], que le dará un error que le indica el nombre de la base de datos de instantáneas
- ejecute el comando: suelte la base de datos [base de datos de instantáneas] y luego ejecute nuevamente el comando en el paso 2.
Tengo el caso MyDbName (Restoring ...) debido al límite de licencia de SQL Express.
En el archivo de registro, encontré esto:
CREATE DATABASE o ALTER DATABASE fallaron porque el tamaño de base de datos acumulativo resultante excedería su límite de licencia de 10240 MB por base de datos.
Por lo tanto, si está intentando restaurar una base de datos más grande, necesita cambiar su servidor SQL Express a la edición Developer, por ejemplo.
Todas las opciones basadas en RECUPERACIÓN no funcionaron para mí.
Lo que hizo fue hacer la restauración completa desde Management Studio.
USE [master]
RESTORE DATABASE Sales_SSD
FROM DISK = N''D:/databaseBackups02/Daily_Sales_20150309_0941.bak''
WITH FILE = 1,
MOVE N''Sales_Data'' TO N''C:/Data/SSD/Sales.mdf'',
MOVE N''Sales_Log'' TO N''C:/Data/SSD/Sales_1.ldf'',
NOUNLOAD, REPLACE, STATS = 5
Tuve el mismo problema ... aunque no sé por qué mi base de datos experimentó este problema ya que mi disco no estaba lleno ... Es como si se hubiera dañado o algo así. Intenté todo lo anterior, ninguno de ellos funcionó por completo, pensé especialmente que la sugerencia de detener el servicio y eliminar los archivos mdf y ldf funcionaría ... ¿pero aún se congela en la restauración?
Terminé resolviendo esto eliminando los archivos como se mencionó, pero en lugar de intentar restaurar la base de datos nuevamente, copié los archivos .mdf y .ldf nuevos y los adjunté con el asistente de conexión de front-end. Alivio, funcionó !!
FOREVER tardó en copiar los nuevos archivos ya que estoy usando una Máquina Virtual ... así que copiar y pegar usando el portapapeles tomó como una hora, así que solo recomendaría esto como un último intento.
Tuve esta situación al restaurar una base de datos en una instancia de SQL Server 2005 Standard Edition utilizando Symantec Backup Exec 11d. Una vez completada la tarea de restauración, la base de datos permaneció en un estado de "Restauración". No tuve problemas de espacio en el disco: la base de datos simplemente no salió del estado "Restaurando".
Ejecuté la siguiente consulta en la instancia de SQL Server y encontré que la base de datos se convirtió de inmediato en utilizable:
RESTORE DATABASE <database name> WITH RECOVERY
Tuve un . en mi nombre de la base de datos, y la consulta no funcionó por eso (diciendo una sintaxis incorrecta cerca de ''.'') Entonces me di cuenta de que necesitaba un corchete para el nombre:
RESTORE DATABASE [My.DB.Name] WITH RECOVERY
Tuve un incidente similar al detener un servidor secundario de envío de registros. Después del comando para eliminar el servidor del envío de registros y se detuvo el envío del registro del servidor primario, la base de datos en el servidor secundario se atascó en el estado de restauración después del comando
RESTORE DATABASE <database name> WITH RECOVERY
Los mensajes de la base de datos:
RESTORE DATABASE procesó con éxito 0 páginas en 18.530 segundos (0.000 MB / s).
La base de datos fue utilizable nuevamente después de esos 18 segundos.
Tuve un problema similar con la restauración utilizando SQL Management Studio. Intenté restaurar una copia de seguridad de la base de datos a una nueva con un nombre diferente. Al principio, esto falló y, después de corregir los nombres de los archivos de la nueva base de datos, se ejecutó con éxito, en cualquier caso, el problema que estoy describiendo se repite, incluso si lo hice desde la primera vez. Entonces, después de la restauración, la base de datos original se mantuvo con un (Restaurando ...) junto a su nombre. Teniendo en cuenta las respuestas del foro anterior (de Bhusan), intenté ejecutar en el editor de consultas en el lado lo siguiente:
RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"
que solucionó el problema. Al principio tenía problemas debido al nombre de la base de datos que contenía caracteres especiales. Resolví esto agregando comillas dobles alrededor: las comillas simples no funcionarían dando un error de "Sintaxis incorrecta cerca de ...".
Esta fue la solución mínima que he intentado resolver este problema (la base de datos está bloqueada en estado de restauración) y espero que se pueda aplicar a más casos.