SQL Server no status “Recuperação Pendente” após a reinicialização

2

Temos alguns programas de design próprio que se comunicam com o SQL Server (SQL Server 2014 Express). De vez em quando eles começam a explodir em todo o lugar; corremos tentando descobrir o que está errado, apenas para abrir o SQL Server Management Studio e descobrir que nosso banco de dados não está em execução.

Para ser mais específico: abrimos o SSMS, expandimos o nó "Bancos de dados" e ele diz:
[NOME DO BANCO DE DADOS] (Recuperação Pendente)

Abrir o SQL Server Configuration Manager e reiniciar o serviço para o banco de dados inativo corrige o problema e tudo começa a funcionar novamente ... por um tempo.

Depois de executar esse problema algumas vezes, percebi que isso só acontece depois que reinicializamos o servidor, embora não todas as vezes. Isso significa que, às vezes, quando o servidor é inicializado, o SQL não faz o mesmo. Um fato interessante é que temos vários bancos de dados em execução no servidor SQL e eles não ficam juntos; um dos bancos de dados pode dizer "(Recovery Pending)" enquanto o outro funciona bem.

Não consegui encontrar uma solução para este problema - ou mesmo uma causa. Alguma idéia?

EDITAR:

Depois de passar pelos logs de eventos do servidor, encontrei o seguinte:

Nome do log: aplicativo Fonte: MSSQL $ SQLEXPRESS ID do evento: 17204 Categoria de Tarefa: Servidor Nível: erro Palavras-chave: Classic Descrição: FCB :: Open falhou: Não foi possível abrir o arquivo C: \ Arquivos de Programas \ Microsoft SQL Server \ MSSQL12.SQLEXPRESS \ MSSQL \ DATA \ DuraDB.mdf para o número do arquivo 1. Erro do SO: 32 (O processo não pode acessar o arquivo porque é sendo usado por outro processo.).

O que estaria causando o bloqueio do arquivo, especialmente após uma reinicialização?

    
por Keith Stein 16.01.2016 / 21:20

6 respostas

4

Você tem um antivírus on-access em execução? Certifique-se de que você tenha suas exclusões configuradas corretamente. A Microsoft documentou isso em KB309422 . Observe também que há problemas conhecidos com alguns produtos por McAfee e Sophos .

    
por 08.02.2016 / 15:24
3

Normalmente, uma recuperação é executada pelo SQL Server na inicialização quando um banco de dados não foi encerrado corretamente, por exemplo, porque o servidor SQL falhou ou porque o servidor sofreu uma queda de energia; Se esse não for o caso, isso pode ser causado por problemas no sistema de arquivos, problemas de disco ou problemas de driver com controladores de armazenamento. Você deve verificar os logs do sistema para desligamentos inesperados ou para problemas de disco.

Além disso, verifique se o sistema Windows está atualizado com as atualizações mais recentes e se o SQL Server está atualizado para o service pack mais recente (SP1 para SQL Server 2014).

    
por 16.01.2016 / 22:03
0

Vá para o gerenciador de configuração do Sql > Serviços do Sql Server > Selecione o tipo de serviço (Sql Server) clique com o botão direito do mouse ir para propriedades Selecione Logon como verificar nesta conta e verifique se o nome da sua conta é "NT SERVICE \ MSSQL $ SQLEXPRESS" e pressione start.

    
por 26.08.2016 / 11:46
0
The Express versions automatically shutdown after a period of inactivity.     
There is a special sp_configure value you can set to increase the timeout.
Express Editions only have the 'user instance timeout' config item available.
The default is 60 minutes.

exec sp_configure 'show advanced options', 1
reconfigure
go
exec sp_configure 'user instance timeout'  -- show current value
go

/*
exec sp_configure 'user instance timeout', 65535  -- set to max timeout 
reconfigure
go
*/

Como alternativa, seu aplicativo poderia executar uma consulta simples de "heartbeat" a cada 10 minutos para manter o SQL Server Express ativo. O SQL Server Express não permite que o SQL Agent seja usado, portanto, um trabalho agendado não funcionaria. Você também pode agendar uma tarefa sqlcmd.exe usando o Agendador de Tarefas do Windows.

    
por 07.10.2016 / 14:27
0

Internamente, o SQL Server estava restaurando as operações ou transações pendentes do banco de dados. Devemos esperar por alguns minutos e o SQL Server restaurará automaticamente o banco de dados.

Isso aconteceu porque o desenvolvedor reiniciou o serviço quando o SQL Server estava executando uma operação de transação grande. Também pode haver outro motivo, como o arquivo de log de transações, ser muito grande.

Eu preparei um artigo completo sobre este problema, você pode visitar este artigo aqui.

    
por 02.02.2017 / 04:33
0

Quando o SQL Server Database está no modo pendente, você pode obtê-lo com o método manual. Quando você restaurar o banco de dados, adicione WITH RECOVERY na última sentença de restauração. RESTORE DATABASE dbname WITH RECOVERY. Você também pode obter a solução aqui - link

    
por 25.09.2018 / 08:07