Standard-Trace aktiviert, aber nicht aktiv

9

Wenn ich die Konfiguration des Standard-Trace abfrage, wird aktiviert angezeigt:

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

Wenn ich jedoch sys.tracesnach dem Pfad frage, wird ein leeres Rowset zurückgegeben:

select * from sys.traces;

Was könnte das Fehlen der aktivierten Ablaufverfolgung erklären?

Andomar
quelle
@ AaronBertrand: select * from sys.tracesgibt ein leeres Rowset zurück
Andomar
Ich habe auch von Fällen gehört, in denen der Trace stirbt, weil das Laufwerk, auf das er geschrieben hat, voll ist (und dies wirkt sich nicht unbedingt auf SQL Server aus, es sei denn, dies ist erkennbar / korrelierbar).
Aaron Bertrand
@ AaronBertrand: Der Administrator sagt, dass das Laufwerk vor einigen Tagen voll war. Würde ein Neustart des SQL Server-Dienstes auch die Standardablaufverfolgung neu starten?
Andomar
Der Trace, der gestoppt wurde, war zwar auch mein erster, EXEC sp_trace_setstatus @traceid = 1, @status = 0bringt aber zurück, The default trace cannot be stopped or modified.sodass ich nicht sicher bin, ob er gestoppt werden kann, es sei denn, es liegt ein Fehler vor, der die Ausführung verhindert. Irgendwas in den Fehlerprotokollen?
Martin Smith
@Martin das stimmt, Sie können die Standardablaufverfolgung nicht manuell stoppen.
Aaron Bertrand

Antworten:

13

Ich würde sagen, dass es eine starke Korrelation zwischen Ihrem Out-of-Space-Ereignis und der fehlenden Spur gibt. Beachten Sie, dass die sp_configureOption lediglich angibt, dass die Standardablaufverfolgung aktiviert ist. Dies bedeutet jedoch nicht, dass sie ausgeführt wird oder sogar vorhanden ist. Beachten Sie, dass dies sys.traceskeine Tabelle, sondern eine Ansicht ist:

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

Was bietet das TABLE SYSTRACESRowset? Wie funktioniert es? Wie werden die Ergebnisse gefiltert? Deine Vermutung ist genauso gut wie meine. Es ist möglich, dass die Ablaufverfolgung noch vorhanden ist, sich jedoch in einem Zustand befindet, der verhindert, dass sie von dieser Ansicht verfügbar gemacht wird. Möglicherweise befindet es sich auch nach dem Neustart des Dienstes in einem Zustand, in dem der Start weiterhin verhindert wird.

Stellen Sie zunächst sicher, dass der Speicherort der Standardablaufverfolgung über ausreichend Speicherplatz verfügt, das SQL Server-Dienstkonto weiterhin über ausreichende Berechtigungen zum Schreiben verfügt, Sie keinen Speicherplatzkontingenten unterliegen usw. Sie können den Speicherort aus der Registrierung abrufen:

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

Sobald Sie sicher sind, dass SQL Server in diesen Ordner schreiben kann, können Sie die Standardablaufverfolgung deaktivieren und wieder aktivieren:

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;

Sie sollten den SQL Server-Dienst an dieser Stelle nicht neu starten müssen, aber es kann ein letzter Kick in der Hose von SQL Server sein, wenn Sie immer noch keine Zeile in sehen sys.traces. Beachten trace_idSie, dass das, was Sie erhalten, nicht garantiert bei 1 bleibt.

Aaron Bertrand
quelle
Danke, deaktivieren und wieder aktivieren hat funktioniert. Ich habe nicht benutzt with override. Die Fehlerprotokolle zeigten tatsächlich ein Ereignis außerhalb des Speicherplatzes.
Andomar
1
@Andomar sorry, with overrideist Gewohnheit.
Aaron Bertrand
1

Ich hatte das gleiche Problem, nachdem die Fahrt voll war. Die Standardablaufverfolgung wurde aktiviert, aber nicht ausgeführt. Das Deaktivieren und erneute Aktivieren funktionierte sofort, ohne die Dienste zu beenden.

jclabonde
quelle