Oi Tiago Cruz!
Bem-vindo ao Microsoft Q&A!
Com base no erro relatado e nas informações coletadas, o problema de indisponibilidade do banco de dados SQL Azure pode estar relacionado a erros transitórios, operações travadas ou manutenção no servidor. Abaixo, apresento uma análise detalhada e os passos recomendados para resolver o problema.
Causas Possíveis
- Erro Transitório:
- O erro "Database 'dbsisloc_gestaoavista' on server 'srvgestao' is not currently available" é frequentemente associado a falhas transitórias no Azure SQL Database. Essas falhas podem ocorrer devido a manutenção no servidor ou problemas temporários de conectividade.
- Operação de Cancelamento Travada:
- Operações pendentes ou travadas, como transações não concluídas, podem impedir o acesso ao banco de dados. Isso pode ser causado por bloqueios ou deadlocks43.
- Configuração de Auto-pause:
- Se o banco de dados estiver configurado para "Auto-pause" (pausa automática), ele pode entrar em estado de suspensão após um período de inatividade. Isso pode causar atrasos na retomada.
- Problemas de Saúde do Recurso:
- O estado de saúde do recurso no portal do Azure pode indicar problemas específicos na região onde o banco de dados está hospedado.
Soluções Recomendadas
- Verificar o Estado do Recurso no Portal do Azure
- Acesse o Azure Portal e navegue até o recurso do banco de dados.
- Verifique o painel de Resource Health (Saúde do Recurso) para identificar problemas na região ou manutenção em andamento.
- Link de referência: Resource Health no Azure
- Resolver Operações Travadas
- Use a funcionalidade de auditoria do Azure SQL para identificar transações ou operações travadas:
- Habilite a auditoria no portal do Azure.
- Filtre os logs de auditoria por Session ID e Transaction ID para identificar consultas problemáticas3.
- Execute o seguinte comando no SQL Server Management Studio (SSMS) para identificar bloqueios:
SELECT * FROM sys.dm_tran_locks;
- Para encerrar transações travadas:
KILL <session_id>;
- Implementar Lógica de Repetição (Retry Logic)
- Para lidar com erros transitórios, implemente uma lógica de repetição no código do aplicativo. O Azure recomenda o uso de bibliotecas como Polly para .NET.
- Exemplo de lógica de repetição:
var retryPolicy = Policy .Handle<SqlException>() .WaitAndRetry(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));
- Verificar Configurações de Auto-pause
- Se o banco de dados estiver configurado como Serverless, ajuste o tempo de pausa automática para evitar indisponibilidade frequente:
- Navegue até aumente o tempo de "Auto-pause delay".
Referências
- Azure SQL Database Troubleshooting
- Stack Overflow - Azure SQL Database Issues
- Entender e Resolver Bloqueios no SQL Server
Espero que essas dicas ajudem a resolver o problema! Se precisar de mais assistência, estou à disposição.
Saudações
Jonathan.
-----------
Sua opinião é muito importante para nós! Se esta resposta resolveu sua consulta, por favor clique em ‘YES‘. Isso nos ajuda a melhorar continuamente a qualidade e relevância de nossas soluções. Obrigado pela sua colaboração!