Jejak bawaan diaktifkan tetapi tidak aktif

9

Ketika saya menanyakan konfigurasi jejak default, itu menunjukkan diaktifkan:

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

Tetapi ketika saya sys.tracesmencari path, ia mengembalikan rowset kosong:

select * from sys.traces;

Apa yang bisa menjelaskan tidak adanya jejak yang diaktifkan?

Andomar
sumber
@AaronBertrand: select * from sys.tracesmengembalikan rowset kosong
Andomar
Saya juga pernah mendengar kasus di mana jejaknya mati karena drive yang ditulisnya diisi (dan itu tidak akan mempengaruhi SQL Server kecuali dengan cara yang terlihat / dapat diperbaiki).
Aaron Bertrand
@ AaronBertrand: Admin mengatakan drive itu mengisi beberapa hari yang lalu. Apakah me-restart layanan SQL Server juga me-restart jejak default?
Andomar
Jejak yang dihentikan adalah yang pertama saya juga tetapi EXEC sp_trace_setstatus @traceid = 1, @status = 0membawa kembali The default trace cannot be stopped or modified.sehingga tidak yakin itu bisa dihentikan kecuali ada kesalahan yang mencegahnya berjalan. Ada sesuatu di log kesalahan?
Martin Smith
@ Martin benar, Anda tidak dapat menghentikan jejak default secara manual.
Aaron Bertrand

Jawaban:

13

Saya akan mengatakan ada korelasi yang kuat antara acara Anda di luar angkasa dan jejak yang hilang. Perhatikan bahwa sp_configureopsi hanya memberi tahu Anda bahwa jejak default diaktifkan, tetapi itu tidak berarti bahwa itu sedang berjalan atau bahkan ada. Perhatikan bahwa sys.tracesini bukan tabel tetapi tampilan:

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

Apa yang TABLE SYSTRACESdisediakan rowset? Bagaimana cara kerjanya? Bagaimana hasilnya disaring? Dugaanmu sebaik milikku. Mungkin saja jejaknya masih ada di sana, tetapi dalam keadaan yang mencegahnya terekspos oleh pandangan ini. Dan mungkin dalam keadaan yang masih mencegahnya dimulai bahkan setelah memulai kembali layanan.

Pertama, pastikan lokasi jejak default memiliki ruang yang cukup, akun layanan SQL Server masih memiliki izin yang memadai untuk menulisnya, Anda tidak tunduk pada kuota ruang, dll. Anda bisa mendapatkan lokasi dari registri:

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

Setelah Anda yakin bahwa SQL Server harus dapat menulis ke folder ini, maka Anda dapat menonaktifkan dan mengaktifkan kembali jejak default:

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;

Anda seharusnya tidak perlu me-restart layanan SQL Server pada saat ini, tetapi mungkin merupakan tendangan terakhir di celana SQL Server jika Anda masih tidak melihat baris masuk sys.traces. Perhatikan bahwa yang trace_idAnda dapatkan tidak dijamin untuk menginap di 1.

Aaron Bertrand
sumber
Terima kasih, nonaktifkan dan aktifkan kembali berfungsi. Saya tidak menggunakan with override. Log kesalahan memang menunjukkan acara di luar ruang.
Andomar
1
@Andomar maaf, with overrideitu kebiasaan.
Aaron Bertrand
1

Saya memiliki masalah yang sama setelah drive terisi. Jejak default diaktifkan tetapi tidak berjalan. Menonaktifkan dan mengaktifkannya kembali berfungsi segera tanpa menghentikan layanan.

jclabonde
sumber