Rastreio padrão ativado, mas não ativo

9

Quando eu consulto a configuração do rastreamento padrão, ele mostra ativado:

exec sp_configure 'default trace enabled';
-->
name                    minimum  maximum  config_value  run_value
default trace enabled         0        1             1          1

Mas quando eu procuro sys.traceso caminho, ele retorna um conjunto de linhas vazio:

select * from sys.traces;

O que poderia explicar a ausência do rastreamento ativado?

Andomar
fonte
@AaronBertrand: select * from sys.tracesdevolve um conjunto de linhas vazio
Andomar
Também ouvi casos em que o rastreamento morre porque a unidade que ele estava gravando foi preenchida (e isso não afetará necessariamente o SQL Server, a menos que seja de maneira perceptível / correlacionável).
Aaron Bertrand
@AaronBertrand: O administrador diz que a unidade encheu alguns dias atrás. Uma reinicialização do serviço SQL Server também reiniciaria o rastreamento padrão?
Andomar 02/07
O rastreamento que está sendo interrompido também foi o meu primeiro, mas EXEC sp_trace_setstatus @traceid = 1, @status = 0traz de volta The default trace cannot be stopped or modified.para não ter certeza de que pode ser interrompido, a menos que haja um erro que impeça a execução. Alguma coisa nos logs de erro?
Martin Smith
@ Martin, isso mesmo, você não pode parar o rastreamento padrão manualmente.
Aaron Bertrand

Respostas:

13

Eu diria que há uma forte correlação entre o evento fora do espaço e o rastreio ausente. Observe que a sp_configureopção apenas informa que o rastreamento padrão está ativado, mas isso não significa que ele esteja em execução ou que exista. Observe que sys.tracesnão é uma tabela, mas uma exibição:

create view sys.traces as select * from OpenRowset(TABLE SYSTRACES)

O que o TABLE SYSTRACESconjunto de linhas fornece? Como funciona? Como os resultados são filtrados? Seu palpite é tão bom quanto o meu. É possível que o rastreamento ainda esteja lá, mas em um estado que impeça que ele seja exposto por essa visualização. E pode estar em um estado que ainda impede que seja iniciado mesmo após reiniciar o serviço.

Primeiro, verifique se o local do rastreamento padrão tem espaço suficiente, se a conta de serviço do SQL Server ainda possui permissões adequadas para gravar nele, se você não está sujeito a nenhuma cota de espaço, etc. Você pode obter o local no registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\...YourInstance...\Setup\SQLDataRoot\

Depois de ter certeza de que o SQL Server deve gravar nesta pasta, você pode desativar e reativar o rastreamento padrão:

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure 'default trace enabled', 0;
GO
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure 'default trace enabled', 1;
GO
RECONFIGURE WITH OVERRIDE;

Você não precisa reiniciar o serviço SQL Server neste momento, mas pode ser um pontapé final nas calças do SQL Server se você ainda não vir uma linha sys.traces. Observe que o que trace_idvocê recebe não é garantido para permanecer em 1.

Aaron Bertrand
fonte
Obrigado, desative e reative o trabalho. Eu não usei with override. Os logs de erro realmente mostraram um evento sem espaço.
Andomar
11
@Andomar desculpe, with overrideé um hábito.
Aaron Bertrand
1

Eu tive o mesmo problema depois que a unidade foi preenchida. O rastreamento padrão foi ativado, mas não está em execução. Desabilitá-lo e reativá-lo funcionou imediatamente sem interromper os serviços.

jclabonde
fonte