Domyślne śledzenie włączone, ale nieaktywne

9

Kiedy sprawdzam konfigurację domyślnego śledzenia, pokazuje włączone:

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

Ale kiedy pytam sys.traceso ścieżkę, zwraca pusty zestaw wierszy:

select * from sys.traces;

Co może tłumaczyć brak włączonego śledzenia?

Andomar
źródło
@AaronBertrand: select * from sys.traceszwraca pusty zestaw wierszy
Andomar
Słyszałem również o przypadkach, w których ślad umiera, ponieważ dysk, który zapisywał do zapełnionego (i to niekoniecznie wpłynie na SQL Server, chyba że w zauważalny / możliwy do korelacji sposób).
Aaron Bertrand
@AaronBertrand: Administrator mówi, że dysk zapełnił się kilka dni temu. Czy ponowne uruchomienie usługi SQL Server ponownie uruchomiłoby również domyślne śledzenie?
Andomar
Zatrzymanie śledzenia było moim pierwszym, ale EXEC sp_trace_setstatus @traceid = 1, @status = 0przywraca, The default trace cannot be stopped or modified.więc nie jestem pewien, czy można go zatrzymać, chyba że wystąpi błąd uniemożliwiający jego uruchomienie. Coś w dziennikach błędów?
Martin Smith
@ Martin ma rację, nie można ręcznie zatrzymać domyślnego śledzenia.
Aaron Bertrand

Odpowiedzi:

13

Powiedziałbym, że istnieje silna korelacja między wydarzeniem braku miejsca i brakującym śladem. Zauważ, że ta sp_configureopcja mówi ci tylko, że śledzenie domyślne jest włączone, ale to nie znaczy, że jest uruchomione lub że w ogóle istnieje. Pamiętaj, że sys.tracesnie jest to tabela, ale widok:

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

Co TABLE SYSTRACESzapewnia zestaw wierszy? Jak to działa? Jak filtrowane są jego wyniki? Twoje domysły są równie dobre jak moje. Możliwe, że ślad nadal tam jest, ale w stanie, który uniemożliwia jego ujawnienie przez ten widok. I może być w stanie, który wciąż uniemożliwia uruchomienie go nawet po ponownym uruchomieniu usługi.

Po pierwsze, upewnij się, że lokalizacja domyślnego śledzenia ma wystarczającą ilość miejsca, konto usługi SQL Server nadal ma odpowiednie uprawnienia do zapisu na nim, nie podlegasz żadnym limitom miejsca itp. Możesz uzyskać lokalizację z rejestru:

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

Gdy masz pewność, że SQL Server powinien móc zapisywać w tym folderze, możesz wyłączyć i ponownie włączyć domyślne śledzenie:

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;

W tym momencie nie powinieneś ponownie uruchamiać usługi SQL Server, ale może być ostatnim kopnięciem w spodniach SQL Server, jeśli nadal nie widzisz wiersza sys.traces. Pamiętaj, że trace_idnie masz gwarancji, że pozostanie na poziomie 1.

Aaron Bertrand
źródło
Dzięki, wyłączanie i ponowne włączanie działało. I nie używać with override. Dzienniki błędów rzeczywiście pokazywały zdarzenie braku miejsca.
Andomar
1
@Andomar przepraszam, with overrideto nawyk.
Aaron Bertrand
1

Miałem ten sam problem po zapełnieniu dysku. Domyślne śledzenie było włączone, ale nie działało. Wyłączenie i ponowne włączenie działało natychmiast, bez zatrzymywania usług.

jclabonde
źródło