¿Puedo recuperar una base de datos SQL desde Standby / Read-Only sin un archivo en espera?

8

¿Hay alguna forma de recuperar una base de datos SQL del modo de espera / solo lectura si falta el "archivo de espera"?

(Veo algunas referencias que llaman a esto un archivo TUF en un escenario de envío de registros, pero en mi caso, fue solo una restauración manual y el archivo en espera tenía una extensión BAK).

Hacer un "RESTAURAR BASE DE DATOS FOO CON RECUPERACIÓN" da como resultado un error fatal:

During startup of warm standby database 'foo', its standby file
('path\filename.bak') was inaccessible to the RESTORE statement.
The operating system error was '5(Access is denied.)'. Diagnose the
operating system error, correct the problem, and retry startup.

La restauración se realizó hace un tiempo, y desafortunadamente el archivo en espera estaba en la carpeta de respaldo y fue eliminado por nuestra rutina de limpieza de carpetas. No existe una copia del archivo en ningún otro medio. Las copias de seguridad originales que se utilizaron para restaurar a este punto también se han ido.

Afortunadamente, esto no es un gran problema para nosotros (fue una restauración temporal), pero no pude encontrar ninguna otra referencia útil sobre esta pregunta, aparte de "no elimine ese archivo".

Si se tratara de eso, supongo que podría hacer un script de toda la base de datos, o usar SSIS para copiar todos los objetos en un nuevo contenedor de base de datos, ya que tengo una copia de solo lectura de la base de datos frente a mí.

¿Alguna forma de solucionar este problema? Ciertamente no espero que pueda volver a "restaurar" y continuar haciendo restauraciones posteriores o cualquier otra cosa, solo me gustaría forzarlo al modo normal en línea en su estado actual, para que pueda hacerlo cosas como cambiar permisos, o cambiar el modo de recuperación, o tomar una nueva copia de seguridad completa o algo así.

BradC
fuente

Respuestas:

7

Resulta que se puede hacer si usas CONTINUE_AFTER_ERROR

RESTORE DATABASE foo WITH RECOVERY, CONTINUE_AFTER_ERROR

Todavía recibí una advertencia cuando lo probé, pero luego hice un CHECKDB y no recibí ningún error.

RESTORE WITH CONTINUE_AFTER_ERROR was successful but some damage was encountered. Inconsistencies in the database are possible.
RESTORE DATABASE successfully processed 0 pages in 4.180 seconds (0.000 MB/sec).
Msg 3441, Level 17, State 1, Line 13
During startup of warm standby database 'foo' (database ID 46), its standby file ('C:\MSSQL\Backup\foo_standby') was inaccessible to the RESTORE statement. The operating system error was '2(The system cannot find the file specified.)'. Diagnose the operating system error, correct the problem, and retry startup.

Teniendo en cuenta la advertencia, no estoy 100% seguro de si lo probaría en una base de datos de producción donde no tuviera una buena copia de seguridad. Dado que es una restauración temporal, podría valer la pena intentarlo.

Kenneth Fisher
fuente