Base de datos atascada en estado "Restaurando"
Hice una copia de seguridad de una base de datos:
BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing
Y luego intenté restaurarlo:
RESTORE DATABASE MyDatabase
FROM DISK = 'MyDatabase.bak'
WITH REPLACE --force restore over specified database
Y ahora la base de datos está bloqueada en estado de restauración.
Algunas personas han teorizado que se debe a que no había ningún archivo de registro en la copia de seguridad y era necesario actualizarlo usando:
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
Tuve esta situación al restaurar una base de datos en una instancia de SQL Server 2005 Standard Edition usando Symantec Backup Exec 11d. Una vez completado el trabajo de restauración, la base de datos permaneció en estado "Restaurando". No tuve problemas de espacio en disco; la base de datos simplemente no salió del estado "Restaurando".
Ejecuté la siguiente consulta en la instancia de SQL Server y descubrí que la base de datos se volvió utilizable de inmediato:
RESTORE DATABASE <database name> WITH RECOVERY
Debe usar la WITH RECOVERY
opción, con RESTORE
el comando de su base de datos, para poner su base de datos en línea como parte del proceso de restauración.
Por supuesto, esto es sólo si no tiene intención de restaurar ninguna copia de seguridad del registro de transacciones, es decir, sólo desea restaurar una copia de seguridad de la base de datos y luego poder acceder a la base de datos.
Tu comando debería verse así,
RESTORE DATABASE MyDatabase
FROM DISK = 'MyDatabase.bak'
WITH REPLACE,RECOVERY
Es posible que tenga más éxito utilizando el asistente de restauración de bases de datos en SQL Server Management Studio. De esta manera puede seleccionar las ubicaciones de archivos específicas, la opción de sobrescritura y la opción CON recuperación.
Así es como lo haces:
- Detener el servicio (MSSQLSERVER);
- Cambie el nombre o elimine los archivos de base de datos y registro (C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data...) o donde tenga los archivos;
- Inicie el servicio (MSSQLSERVER);
- Eliminar la base de datos con problema;
- Restaure la base de datos nuevamente.
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 detener el envío de registros desde el servidor primario, la base de datos en el servidor secundario se quedó atascada al restaurar el estado 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/seg).
La base de datos volvió a ser utilizable después de esos 18 segundos.