Traccia predefinita abilitata ma non attiva


9

Quando eseguo una query sulla configurazione della traccia predefinita, mostra abilitato:

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

Ma quando chiedo sys.tracesil percorso, restituisce un set di righe vuoto:

select * from sys.traces;

Cosa potrebbe spiegare l'assenza della traccia abilitata?


@AaronBertrand: select * from sys.tracesrestituisce un set di righe vuoto
Andomar,

Ho anche sentito parlare di casi in cui la traccia muore perché l'unità su cui stava scrivendo si è riempita (e ciò non influirà necessariamente su SQL Server se non in modo evidente / correlabile).
Aaron Bertrand

@AaronBertrand: l'amministratore dice che l'unità si è riempita pochi giorni fa. Un riavvio del servizio SQL Server riavvierebbe anche la traccia predefinita?
Andomar,

Anche la traccia che è stata interrotta è stata la mia prima, ma EXEC sp_trace_setstatus @traceid = 1, @status = 0riporta The default trace cannot be stopped or modified.quindi non sono sicuro che possa essere arrestato a meno che non ci sia un errore che ne impedisce l'esecuzione. Qualcosa nei log degli errori?
Martin Smith,

@Martin esatto, non è possibile interrompere manualmente la traccia predefinita.
Aaron Bertrand

Risposte:


13

Direi che esiste una forte correlazione tra il tuo evento fuori dallo spazio e la traccia mancante. Si noti che l' sp_configureopzione indica semplicemente che la traccia predefinita è abilitata, ma ciò non significa che sia in esecuzione o addirittura esista. Nota che sys.tracesnon è una tabella ma una vista:

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

Cosa fornisce il TABLE SYSTRACESset di righe? Come funziona? Come vengono filtrati i suoi risultati? La tua ipotesi è buona come la mia. È possibile che la traccia sia ancora presente, ma in uno stato che ne impedisca l'esposizione da questa vista. E potrebbe essere in uno stato che impedisce ancora l'avvio, anche dopo il riavvio del servizio.

Innanzitutto, assicurarsi che la posizione della traccia predefinita disponga di spazio sufficiente, che l'account del servizio SQL Server disponga ancora delle autorizzazioni adeguate per scrivere su di esso, che non si siano soggetti a quote di spazio, ecc. È possibile ottenere la posizione dal registro:

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

Dopo aver verificato che SQL Server dovrebbe essere in grado di scrivere in questa cartella, è possibile disabilitare e riattivare la traccia predefinita:

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;

A questo punto non dovresti aver bisogno di riavviare il servizio SQL Server, ma potrebbe essere un calcio di punizione nei pantaloni di SQL Server se ancora non vedi una riga sys.traces. Si noti che non trace_idsi ottiene che si ottiene a 1.


Grazie, disabilita e riattiva funzionato. Non ho usato with override. I log degli errori hanno effettivamente mostrato un evento fuori dallo spazio.
Andomar,

1
@Andomar scusa, with overrideè abitudine.
Aaron Bertrand

1

Ho avuto lo stesso problema dopo il riempimento dell'unità. La traccia predefinita era abilitata ma non in esecuzione. Disabilitarlo e riattivarlo ha funzionato immediatamente senza interrompere i servizi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.