Bancos de dados do SQL Server presos no estado de restauração

79

Eu tenho um servidor Sharepoint. Tivemos um problema com nossa ferramenta de backup e agora alguns dos meus bancos de dados estão paralisados ​​na restauração do estado!

Imagem mostrando a restauração de bancos de dados

É possível parar o processo de restauração? e também, como posso garantir que a integridade do banco de dados não foi comprometida?

Pooya Yazdani
fonte

Respostas:

129

Provavelmente, isso é causado pelo script de restauração adicionando o WITH NORECOVERYparâmetro, para preparar o banco de dados para um log de transações após a restauração.

O banco de dados agora está aguardando o arquivo de log de transações mais recente.

Você também pode:

  1. Aplique o log de transações mais recente usando RESTORE LOG database_name FROM backup_device WITH RECOVERY;... ou
  2. Restaure o banco de dados novamente, mas desta vez usando ... WITH RECOVERY;... ou
  3. Force o banco de dados a sair do modo de restauração executando: RESTORE DATABASE YourDb WITH RECOVERY;

Antes de fazer isso, certifique-se de entender as implicações dessas opções. Você pode causar perda de dados se não for cuidadoso.

Veja isto para detalhes:

Thomas Kejser
fonte
Quando isso não funcionar, consulte dba.stackexchange.com/questions/11175/… - novamente, MUITOS AVISOS DE DOOM se você não souber o que está fazendo e entender todo o risco de perda de dados. Mas se você estiver vinculado a um servidor que não seja de produção, terá bons backups para fazer uma nova restauração e poderá dar ao luxo de reiniciar o SQL no servidor, ele funciona.
NateJ
6
"Force o banco de dados para fora do modo de restauração executando: RESTORE DATABASE YourDb WITH RECOVERY". 20 minutos de arranhar a cabeça e reiniciar os serviços, em seguida, corrigidos com um revestimento. Obrigado!
Echilon
2
Eu estava preso com a mesma situação minha caixa de desenvolvimento. A opção 3 funcionou como um encanto!
Moiz Tankiwala
Tentei restaurar um banco de dados do .bak para um novo banco de dados, mas esqueci de alterar os nomes dos arquivos no disco. A restauração falhou, embora não porque os arquivos estavam sendo usados ​​por um banco de dados existente, mas por algum outro erro. Isso atrapalhou o banco de dados existente (preso no estado de restauração). A terceira colocação on-line novamente em um segundo e, verificando os dados, tudo fica bem. Obrigado!
CoDEmanX
44

Script T-SQL simples para resolver este problema:

escreva este script na janela Nova Consulta e execute:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;
Sina
fonte
RESTORE DATABASE [database_name] COM RECUPERAÇÃO .... Funcionou perfeito para mim. Obrigado!
10
Tenha muito cuidado para entender as implicações disso. Se o banco de dados estiver aguardando uma restauração de log que possa resultar em considerável perda de dados.
precisa
2
Falha ao funcionar devido a erro: "O banco de dados não pode ser recuperado porque o log não foi restaurado".
22716 Ian Boyd
0

Acabei de ter essa situação, e a cura foi bastante surpreendente:

ALTER DATABASE DBName SET ONLINE;

Aparentemente, a restauração do NetBackup que quebrou o deixou em um estado estranho. Nenhuma outra solução funcionou (embora eu ainda não tenha tentado reiniciar o serviço SQL Server)

Eu teria cuidado com o banco de dados, no entanto, como teoricamente, uma vez que a restauração é iniciada e falha, você pode ter dados corrompidos. De qualquer maneira, vou restaurar o banco de dados novamente, então não importa para mim.

ErikE
fonte
Esta é a resposta errada para esta pergunta, se você tentar definir um banco de dados que esteja em 'Restaurando' Online, você receberá o erro "ALTER DATABASE não é permitido enquanto um banco de dados estiver no estado Restaurando".
James Jenkins
Talvez você não esteja familiarizado com o StackOverflow, às vezes respondemos a perguntas um pouco diferentes das postadas. Isso fornece valor, porque as pessoas costumam fazer perguntas semelhantes às delas depois de pesquisar on-line. Com relação à sua alegação factual de ALTER DATABASEnão ser permitido, garanto que, no meu caso, o banco de dados estava realmente mostrando como em estado de restauração e usando SET ONLINEde fato funcionou . Então perceba que você está me chamando de enganado ou mentindo. É isso que você realmente precisa fazer quando uma alternativa está disponível?
ErikE 20/01
@JamesJenkins E qual é essa alternativa? A alternativa é a hipótese de que um banco de dados possa ser exibido na restauração de estado, mas na verdade não esteja sendo restaurado. Ou pode estar na etapa final da restauração, com a restauração realmente concluída para que possa realmente ser definida como ONLINEestado. Para encurtar a história, acho que seu comentário e voto negativo estão desatualizados neste site e suas informações estão incorretas porque não estão adequadamente qualificadas com os dados que apresentei.
ErikE 20/01
0

Como sabemos, a opção padrão de restauração do banco de dados é o Recovery, que garante que o banco de dados esteja disponível e Online para uso após a conclusão da restauração do banco de dados.

Exemplo:

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

Vamos ver os pontos importantes sobre a restauração sem recuperação

  • O banco de dados não é utilizável
  • Permanece no modo de restauração
  • A próxima sequência de restauração pode ser feita
  • Não reverte nenhuma transação não confirmada

Restaurar com NoRecovery

Esta opção é usada especialmente quando vários backups devem ser restaurados. Isso significa que, quando você executa o comando restore com a opção norecovery, isso significa que o banco de dados não é liberado para os usuários até que o último backup em sequência seja restaurado. Com o último backup, a opção Recuperação é usada e o banco de dados fica online.

Exemplo:

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

E depois:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO
Priyanka
fonte
1
Você pode ter um erro de digitação na sua resposta. A seção marcada ... sobre Restaurar com recuperação lista todas as opções que se aplicam à RESTORE ...WITH NORECOVERYopção. Você poderia verificar isso?
hot2use