遇到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图形界面
- 打开SSMS,展开管理 > 扩展事件 > 会话。
- 右键点击
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
相关产品推荐
相关产品推荐

