首页 > 其他 > 详细

使用Extended Events收集错误信息

时间:2014-02-26 05:49:32      阅读:365      评论:0      收藏:0      [点我收藏+]

扩展事件提供了一个轻量级的平台可以用来收集错误信息,方便DBA查看最近的数据库错误配合开发人员一起解决问题。

 

下面的例子我们创建extended event会话来获取错误208, 2812,and 4121。这三个错误分别对应:Invalid object name, Could not find stored procedure, and Cannotfind either column or the user-defined function or aggregate. 可以根据扩展事件sqlserver.error_reported。我们获取下面的详细信息:

 

sqlserver.session_id

sqlserver.sql_text

sqlserver.client_app_name

sqlserver.client_hostname

sqlserver.database_id

sqlserver.username

 

通过这些信息我们可以了解到是哪个应用出现的问题尽快解决,创建扩展事件会话使用下面的脚本:

 

 CREATEEVENT SESSION exErrorsON SERVER -- Session Name

ADD EVENT sqlserver.error_reported-- Event wewant to capture

(

ACTION -- What contents to capture

(

sqlserver.session_id

,sqlserver.sql_text

,sqlserver.client_app_name

,sqlserver.client_hostname

,sqlserver.database_id

,sqlserver.username

)

-- Somepredicate or filter (here it is object not found error number)

WHERE (error= 208

OR error = 2812

OR error = 4121

)

)

ADD TARGET package0.ring_buffer

WITH (max_dispatch_latency= 5seconds); -- Thetarget

GO

ALTER EVENTSESSION exErrors ONSERVER STATE = START

GO

 

查询错误信息的脚本:

 

WITH exErrors

AS (

SELECT CAST(target_data AS xml) AS SessionData

FROM sys.dm_xe_session_targetsst

INNER JOINsys.dm_xe_sessions sONs.address= st.event_session_address

WHERE name = ‘exErrors‘

)

SELECT

error.value(‘(@timestamp)[1]‘,‘datetime‘) as event_timestamp

,error.value(‘(data/value)[5]‘,‘varchar(max)‘) as [error_message]

,error.value(‘(data/value)[1]‘,‘int‘) as error

,error.value(‘(action/value)[3]‘,‘nvarchar(255)‘) AS client_app_name

,error.value(‘(action/value)[4]‘,‘nvarchar(255)‘) as client_hostname

,DB_NAME(error.value(‘(action/value)[5]‘,‘int‘)) AS database_name

,error.value(‘(action/value)[6]‘,‘nvarchar(128)‘) AS username

,error.value(‘(action/value)[2]‘,‘varchar(max)‘) as sql_text

,error.value(‘(action/value)[1]‘,‘int‘) as session_id

,error.value(‘(data/value)[4]‘,‘bit‘) as user_defined

FROM exErrors d

CROSS APPLY SessionData.nodes(‘//RingBufferTarget/event‘)AS t(error)

WHERE error.value(‘@name‘,‘nvarchar(128)‘) = ‘error_reported‘;

 

结果如下:

bubuko.com,布布扣

 

使用Extended Events收集错误信息

原文:http://blog.csdn.net/kevinsqlserver/article/details/19916037

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!