PROBLEMA: SQL Server Agent XPs Disabled

Olá pessoal! Tudo certo?

 Hoje vou abordar um outro problema que o DBA pode vir a enfrentar no dia-a-dia. Por acaso vocês já se fizeram login em uma instância SQL e se depararam com o SQL Server Agent com status igual da imagem abaixo?



 O mais estranho, ao entrar nos serviços ou no Configuration Manager do SQL Server você nota que o mesmo está com status “Started”.

Analisando o problema

 O primeiro passo para investigar o problema é olhar o error log. Se a instância do SQL Server estava funcionando normalmente, não teve nenhuma queda inesperada e você se deparou com este problema, você deve ver algo parecido com o seguinte no error log:

2013-06-22 11:09:58.240 spid61       Error: 17053, Severity: 16, State: 1.
2013-06-22 11:09:58.240 spid61       C:\TransactionLog\TESTE_LOG2.LDF: Operating system error 112(There is not enough space on the disk.) encountered.
2013-06-22 11:17:16.020 spid61       Error: 9002, Severity: 17, State: 2.
2013-06-22 11:17:16.020 spid61       The transaction log for database 'TESTE' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

 Opa! O que temos aqui? Um arquivo de log da base de dados tentou expandir na unidade e não encontrou espaço para tal, continuando a leitura da log:

2013-06-22 12:30:09.100 spid10s      Could not write a checkpoint record in database ID 5 because the log is out of space. Contact the database administrator to truncate the log or allocate more space to the database log files.
2013-06-22 12:30:09.090 spid63       Error: 3314, Severity: 21, State: 4.
2013-06-22 12:30:09.090 spid63       During undoing of a logged operation in database 'TESTE', an error occurred at log record ID (8153835:17896:72). Typically, the specific failure is logged previously as an error in the Windows Event Log service. Restore the database or file from a backu
2013-06-22 12:30:09.110 spid10s      Automatic checkpointing is disabled in database 'TESTE' because the log is out of space. Automatic checkpointing will be enabled when the database owner successfully checkpoints the database. Contact the database owner to either truncate the log file or
2013-06-22 12:30:09.110 Backup       Error: 3041, Severity: 16, State: 1.
2013-06-22 12:30:09.110 Backup       BACKUP failed to complete the command BACKUP LOG TESTE. Check the backup application log for detailed messages.
2013-06-22 12:30:09.120 spid63       Error: 9001, Severity: 21, State: 5.
2013-06-22 12:30:09.120 spid63       The log for database 'TESTE' is not available. Check the event log for related error messages. Resolve any errors and restart the database.

 Tivemos sucessivas falhas, todas relacionadas a falta de espaço na log da base de dados, continuando: 

2013-06-22 12:30:15.750 spid22s      Starting up database 'TESTE'.

 Opa! Este “starting” em meio ao log está nos dando uma dica do que vem a seguir:

2013-06-22 12:32:33.250 spid22s      Analysis of database 'TESTE' (5) is 1% complete (approximately 23 seconds remain). This is an informational message only. No user action is required.
2013-06-22 12:32:35.830 spid22s      Analysis of database 'TESTE' (5) is 20% complete (approximately 11 seconds remain). This is an informational message only. No user action is required.
2013-06-22 12:32:40.280 spid22s      Analysis of database 'TESTE' (5) is 55% complete (approximately 5 seconds remain). This is an informational message only. No user action is required.
2013-06-22 12:32:45.200 spid22s      Analysis of database 'TESTE' (5) is 93% complete (approximately 0 seconds remain). This is an informational message only. No user action is required.
2013-06-22 12:32:46.040 spid22s      Analysis of database 'TESTE' (5) is 100% complete (approximately 0 seconds remain). This is an informational message only. No user action is required.
2013-06-22 12:32:46.060 spid22s      Recovery of database 'TESTE' (5) is 0% complete (approximately 1509 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.
2013-06-22 12:32:50.530 spid22s      Recovery of database 'TESTE' (5) is 1% complete (approximately 267 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.
2013-06-22 12:32:54.810 spid22s      Recovery of database 'TESTE' (5) is 3% complete (approximately 249 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.

 Isso mesmo, a base foi pra recovery devido as transações que estavam abertas quando o problema do log ocorreu, porém o problema não acaba ai, continuando a leitura da log:

2013-06-22 12:34:10.510 spid22s      13977 transactions rolled forward in database 'TESTE' (5). This is an informational message only. No user action is required.
2013-06-22 12:34:12.500 spid22s      Recovery of database 'TESTE' (5) is 48% complete (approximately 88 seconds remain). Phase 3 of 3. This is an informational message only. No user action is required.
2013-06-22 12:34:12.630 spid22s      Error: 17053, Severity: 16, State: 1.
2013-06-22 12:34:12.630 spid22s      C:\TransactionLog\TESTE_LOG2.LDF: Operating system error 112(There is not enough space on the disk.) encountered.

 Veja só, a fase 3 do nosso recovery falhou pelo mesmo motivo das transações, ela não encontrou espaço na log para concluir com sucesso (algumas vezes a operação de recovery necessita de espaço adicional da log para executar), qual o resultado disso? O SQL Server Agent fica no status “Agent XPs Disabled”, vamos olhar o log do SQL Server Agent em busca de mais informações:

20xx-xx-xx xx:xx:xx – ? [x] Waiting for SQL Server to recover databases…

 Veja só, ai esta nosso problema, o Agent está no aguardo do término do recovery daquela base de dados chamada TESTE, e agora?


Saindo do problema

 O log da base está cheio e está sendo utilizado, você provavelmente não irá conseguir manipular o mesmo com operações de backup, o mais indicado nestes casos é liberar espaço na unidade em que o log reside ou expandir o tamanho da mesma. Não efetue o detach da base de dados, você pode ter problemas em recuperar a mesma, ou pode até recupera-la porem assumindo a perda de alguns dados. Uma vez que você resolver este problema de espaço, execute o comando abaixo:

ALTER DATABASE DBNAME SET ONLINE

 Acompanhe no error log o recovery da base:

2013-06-23 06:01:50.170 spid14s      Recovery of database 'TESTE' (5) is 100% complete (approximately 0 seconds remain). Phase 3 of 3. This is an informational message only. No user action is required.
2013-06-23 06:01:50.170 spid14s      1 transactions rolled back in database 'TESTE' (5). This is an informational message only. No user action is required.

 Veja só, foi efetuado o rollback de uma transação, quando atualizamos nosso Management Studio o que ocorre com o nosso Agent?

 
Outra situação

 Você também pode passar por este problema caso seu SQL Server sofra com uma queda inesperada e no processo de recovery das bases ele não consiga concluir com sucesso o mesmo.

Evitando este problema

 Evite ter mais de um arquivo de log para as suas bases de dados, com dois arquivos fica mais difícil controlar o crescimento dos mesmos e aumenta a chance de operações de expansão/recovery falharem.
 Tenha sempre discos bem dimensionados para que você nunca tenha esta necessidade de realizar operações de emergência nos arquivos de log, ou tenha que realizar expansão das unidades de disco, o que nem sempre é algo fácil ou viável de fazer.

 Espero que vocês tenham gostado do post pessoal! Até a próxima!

Nenhum comentário:

Postar um comentário