You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遇到SQL Server DAC连接数上限错误,如何创建扩展事件跟踪连接尝试?

用扩展事件跟踪SQL Server专用管理员连接(DAC)尝试

可以通过扩展事件跟踪所有DAC连接尝试(包括成功和失败的),以下是具体实现步骤:

创建扩展事件会话

使用以下T-SQL脚本创建专门跟踪DAC连接的扩展事件会话:

CREATE EVENT SESSION [Track_DAC_Connections] ON SERVER 
ADD EVENT sqlserver.connectivity_ring_buffer_recorded(
    WHERE ([record_type]='DacConnection')),
ADD EVENT sqlserver.login_failed(
    WHERE ([error_number]=(17812)) -- 对应DAC连接数超限的错误
)
ADD TARGET package0.event_file(SET filename=N'Track_DAC_Connections.xel',max_file_size=(5),max_rollover_files=(5))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON);
GO

脚本说明:

  • connectivity_ring_buffer_recorded事件:捕获所有DAC连接请求(无论成功与否),通过record_type='DacConnection'过滤出DAC相关记录。
  • login_failed事件:专门捕获DAC连接数超限导致的失败请求,错误号17812对应用户遇到的“已存在最大数量的专用管理员连接”错误。
  • 事件文件目标:将数据保存到.xel文件,设置了最大文件大小和滚动文件数,避免日志过大。
  • STARTUP_STATE=ON:确保SQL Server重启后会话自动启动。

启动扩展事件会话

创建完成后,执行以下命令启动会话:

ALTER EVENT SESSION [Track_DAC_Connections] ON SERVER STATE = START;
GO

查看捕获的DAC连接数据

可以通过两种方式查看捕获的信息:

方式1:使用SSMS图形界面

  1. 打开SSMS,展开管理 > 扩展事件 > 会话。
  2. 右键点击Track_DAC_Connections,选择查看目标数据,即可在界面中查看所有捕获的DAC连接事件。

方式2:使用T-SQL查询

执行以下脚本读取事件文件中的数据:

SELECT 
    event_data.value('(event/@name)[1]', 'varchar(50)') AS EventName,
    event_data.value('(event/@timestamp)[1]', 'datetime2(7)') AS EventTime,
    event_data.value('(event/data[@name="username"]/value)[1]', 'sysname') AS Username,
    event_data.value('(event/data[@name="client_app_name"]/value)[1]', 'varchar(100)') AS ClientApp,
    event_data.value('(event/data[@name="client_hostname"]/value)[1]', 'varchar(100)') AS ClientHost,
    event_data.value('(event/data[@name="error_number"]/value)[1]', 'int') AS ErrorNumber,
    event_data.value('(event/data[@name="record"]/value)[1]', 'xml') AS DacConnectionDetails
FROM 
(
    SELECT CAST(event_data AS XML) AS event_data
    FROM sys.fn_xe_file_target_read_file('Track_DAC_Connections*.xel', NULL, NULL, NULL)
) AS x;

查询结果说明:

  • EventName:事件类型(connectivity_ring_buffer_recorded或login_failed)。
  • EventTime:连接尝试的时间。
  • Username:发起连接的用户账号。
  • ClientApp/ClientHost:客户端应用名称和主机名,帮助定位发起连接的来源。
  • ErrorNumber:仅在失败事件中显示,17812表示DAC连接数超限。
  • DacConnectionDetails:DAC连接的详细XML信息,包含会话ID等额外数据。

注意事项

  • 确保SQL Server服务账户对事件文件保存路径有读写权限(默认路径为SQL Server日志目录)。
  • 定期清理旧的.xel文件,避免占用过多磁盘空间。
  • 扩展事件对SQL Server性能影响极小,无需担心性能开销。

内容的提问来源于stack exchange,提问作者Laerte Junior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:47:40