Posso recuperar um banco de dados SQL do modo de espera / somente leitura sem um arquivo em espera?

8

Existe alguma maneira de recuperar um banco de dados SQL do modo de espera / somente leitura se o "arquivo de espera" estiver ausente?

(Vejo algumas referências chamando esse arquivo de TUF em um cenário de envio de logs, mas no meu caso, era apenas uma restauração manual e o arquivo em espera tinha uma extensão BAK.)

Executar um "RESTORE DATABASE foo WITH RECOVERY" resulta em um erro 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.

A restauração foi feita há pouco tempo e, infelizmente, o arquivo em espera estava na pasta de backup e foi removido pela nossa rotina de limpeza de pastas. Nenhuma cópia do arquivo existe em nenhuma outra mídia. Os backups originais que foram usados ​​para restaurar até esse ponto também desapareceram há muito tempo.

Felizmente, isso não é muito importante para nós (foi uma restauração temporária), mas não consegui encontrar outras referências úteis sobre essa questão, além de "não remover esse arquivo".

Se fosse o caso, suponha que eu poderia criar um script para o banco de dados inteiro ou usar o SSIS para copiar todos os objetos para um novo contêiner de banco de dados, pois tenho uma cópia somente leitura do banco de dados à minha frente.

Alguma maneira de corrigir esse problema? Certamente, não espero que seja capaz de voltar à "restauração" e continuar fazendo restaurações subsequentes ou qualquer coisa assim. Gostaria de forçá-lo ao modo online normal no estado atual, para que eu possa fazer isso. coisas como alterar permissões ou alterar o modo de recuperação ou fazer um novo backup completo ou algo assim.

BradC
fonte

Respostas:

7

Acontece que isso pode ser feito se você usar CONTINUE_AFTER_ERROR

RESTORE DATABASE foo WITH RECOVERY, CONTINUE_AFTER_ERROR

Ainda recebi um aviso quando tentei, mas fiz um CHECKDB e não recebi erros.

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.

Dado o aviso, não tenho 100% de certeza se tentaria em um banco de dados de produção em que não tive um bom backup. Dado que é uma restauração temporária, pode valer a pena tentar.

Kenneth Fisher
fonte