Theo dõi mặc định được kích hoạt nhưng không hoạt động


9

Khi tôi truy vấn cấu hình của dấu vết mặc định, nó sẽ hiển thị:

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

Nhưng khi tôi truy vấn sys.tracesđường dẫn, nó sẽ trả về một hàng trống:

select * from sys.traces;

Điều gì có thể giải thích sự vắng mặt của dấu vết kích hoạt?


@AaronBertrand: select * from sys.tracestrả về một hàng trống
Andomar

Ngoài ra, tôi đã nghe nói về các trường hợp dấu vết chết vì ổ đĩa được ghi đầy (và điều đó sẽ không nhất thiết ảnh hưởng đến SQL Server trừ khi theo cách đáng chú ý / tương quan).
Aaron Bertrand

@AaronBertrand: Quản trị viên nói rằng ổ đĩa đã lấp đầy vài ngày trước. Khởi động lại dịch vụ SQL Server cũng khởi động lại theo dõi mặc định?
Andomar

Dấu vết bị dừng cũng là lần đầu tiên của tôi nhưng EXEC sp_trace_setstatus @traceid = 1, @status = 0mang lại The default trace cannot be stopped or modified.vì vậy không chắc chắn nó có thể bị dừng trừ khi có lỗi ngăn nó chạy. Bất cứ điều gì trong bản ghi lỗi?
Martin Smith

@Martin đúng vậy, bạn không thể dừng theo dõi mặc định theo cách thủ công.
Aaron Bertrand

Câu trả lời:


13

Tôi muốn nói có một mối tương quan mạnh mẽ giữa sự kiện ngoài vũ trụ của bạn và dấu vết còn thiếu. Lưu ý rằng sp_configuretùy chọn chỉ cho bạn biết rằng theo dõi mặc định đã được bật, nhưng điều đó không có nghĩa là nó đang chạy hoặc thậm chí nó còn tồn tại. Lưu ý rằng đó sys.traceskhông phải là bảng mà là dạng xem:

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

Các hàng TABLE SYSTRACEScung cấp những gì? Làm thế nào nó hoạt động? Kết quả của nó được lọc như thế nào? Dự đoán của bạn là tốt như của tôi. Có thể dấu vết vẫn còn đó, nhưng trong trạng thái ngăn không cho nó bị lộ bởi quan điểm này. Và nó có thể ở trạng thái vẫn ngăn không cho nó khởi động ngay cả sau khi khởi động lại dịch vụ.

Trước tiên, hãy đảm bảo vị trí của dấu vết mặc định có đủ dung lượng, tài khoản dịch vụ SQL Server vẫn có đủ quyền để ghi vào đó, bạn không phải chịu bất kỳ hạn ngạch không gian nào, v.v. Bạn có thể lấy vị trí từ sổ đăng ký:

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

Khi bạn chắc chắn rằng SQL Server sẽ có thể ghi vào thư mục này, thì bạn có thể tắt và bật lại theo dõi mặc định:

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;

Bạn không cần phải khởi động lại dịch vụ SQL Server tại thời điểm này, nhưng có thể là cú hích cuối cùng trong quần của SQL Server nếu bạn vẫn không thấy một hàng trong sys.traces. Lưu ý rằng trace_idbạn nhận được không được đảm bảo ở mức 1.


Cảm ơn, vô hiệu hóa và kích hoạt lại làm việc. Tôi đã không sử dụng with override. Các nhật ký lỗi thực sự đã cho thấy một sự kiện ngoài không gian.
Andomar

1
@Andomar xin lỗi, with overridelà thói quen.
Aaron Bertrand

1

Tôi đã có vấn đề tương tự sau khi ổ đĩa đầy. Theo dõi mặc định đã được kích hoạt nhưng không chạy. Vô hiệu hóa nó và kích hoạt lại nó hoạt động ngay lập tức mà không dừng dịch vụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.