无法启动 system_health 扩展事件会话

Nic*_*uet 2 sql-server extended-events sql-server-2014

在某些 SQL Server 实例上(我还没有找到模式),当我尝试手动启动此会话时,出现以下错误:

对于目标“5B2DA06D-898A-43C8-9309-39BBBE93EBBD.package0.event_file”,传递的参数“filename”无效。索引 0 处的目标参数无效(Microsoft SQL Server,错误:25641)

如果我们查看 SQL Server 日志,每次实例启动时(即在 Windows 重新启动以应用补丁后),我们得到:

错误:25641,严重性:16,状态:0。对于目标“5B2DA06D-898A-43C8-9309-39BBBE93EBBD.package0.event_file”,传递的参数“文件名”无效。索引 0 处的目标参数无效

错误:25710,严重性:16,状态:1。事件会话“system_health”无法启动。参考当前会话中以前的错误来确定原因,并纠正任何相关的问题。

错误:25709,严重性:16,状态:1。一个或多个事件会话未能启动。参考当前会话中以前的错误来确定原因,并纠正任何相关的问题。

有没有人注意到这个问题?我怀疑这是由于权限,因为会话的定义不指示路径,而只是 .xel 文件的名称。也就是说,它直接写入 SQL Server 日志文件夹,显然 SQL Server 服务帐户被授予完全访问权限。

我在 AlwaysOn_health 会话中遇到了同样的问题。

在此先感谢您的帮助 !

Aar*_*and 5

首先,确定有问题的文件夹。在 SSMS 中,将结果设置为网格,运行以下查询:

SELECT target_data = CONVERT(xml, target_data) 
  FROM sys.dm_xe_session_targets
  WHERE target_package_guid = '5B2DA06D-898A-43C8-9309-39BBBE93EBBD'
  AND target_name = N'event_file';
Run Code Online (Sandbox Code Playgroud)

应该返回一行,您应该能够从网格结果中单击它。这将打开一个带有 XML 文档的新选项卡,它应该如下所示:

<EventFileTarget truncated="0">
  <Buffers logged="0" dropped="0" />
  <File name="C:\...path_to_xe_files...\system_health_0_131278486394000000.xel" />
</EventFileTarget>
Run Code Online (Sandbox Code Playgroud)

如果文件名不包含路径组件,则可以通过查看系统注册表来确定扩展事件默认文件位置。这段代码应该这样做:

EXEC master.sys.xp_instance_regread
       @rootkey      = N'HKEY_LOCAL_MACHINE'
       , @key          = N'SOFTWARE\Microsoft\MSSQLServer\CPE'
       , @value_name   = N'ErrorDumpDir';
Run Code Online (Sandbox Code Playgroud)

获得保存扩展事件文件的路径后,请尝试执行以下操作:

BACKUP DATABASE model TO DISK = 'C:\...path_to_xe_files...\model_trash.bak'
  WITH INIT;
Run Code Online (Sandbox Code Playgroud)

这应该让您更好地了解问题所在 - 可能是权限,可能是文件夹不存在(可能实例的配置已被移动),可能是一大堆事情。但这应该为您指明正确的方向,并为您提供更好的错误消息。