默认跟踪已启用但未激活

And*_*mar 9 sql-server sql-server-2008-r2 trace

当我查询默认跟踪的配置时,它显示已启用:

exec sp_configure 'default trace enabled';
-->
name                    minimum  maximum  config_value  run_value
default trace enabled         0        1             1          1
Run Code Online (Sandbox Code Playgroud)

但是当我查询sys.traces路径时,它返回一个空行集:

select * from sys.traces;
Run Code Online (Sandbox Code Playgroud)

什么可以解释没有启用的跟踪?

Aar*_*and 13

我会说你的太空事件和丢失的踪迹之间有很强的相关性。请注意,该sp_configure选项仅告诉您启用了默认跟踪,但这并不意味着它正在运行或甚至存在。请注意,这sys.traces不是表格而是视图:

create view sys.traces as select * from OpenRowset(TABLE SYSTRACES)
Run Code Online (Sandbox Code Playgroud)

什么是TABLE SYSTRACES行集提供?它是如何工作的?它的结果是如何过滤的?你的猜测和我的一样好。痕迹可能仍然存在,但处于一种防止它被此视图暴露的状态。并且它可能处于即使重新启动服务后仍然无法启动的状态。

首先,确保默认跟踪的位置有足够的空间,SQL Server 服务帐户仍然具有足够的写入权限,您不受任何空间配额的限制等。您可以从注册表中获取位置:

HKEY_LOCAL_MACHINE\Software\Microsoft\...YourInstance...\Setup\SQLDataRoot\
Run Code Online (Sandbox Code Playgroud)

一旦您确定 SQL Server 应该能够写入此文件夹,您就可以禁用并重新启用默认跟踪:

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;
Run Code Online (Sandbox Code Playgroud)

此时您不需要重新启动 SQL Server 服务,但如果您在sys.traces. 请注意,trace_id您得到的不能保证保持在 1。