加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_马鞍山站长网 (https://www.0555zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

sql-server – 我可以从SQL Server默认获得哪些事件信息?

发布时间:2020-12-31 19:45:02 所属栏目:站长百科 来源:网络整理
导读:副标题#e# 我经常会看到一些问题,人们想知道某件事情是否发生,或者何时发生,或者是谁执行了这一行动.在很多情况下,SQL Server本身不会跟踪此信息.例如: 谁最后执行了存储过程dbo.MyProcedure? 谁更新了dbo.Employees表中的salary列? 谁最后查询了Managem

以下是可以从system_health会话中提取此信息的示例(可能不是非常高效)查询:

;WITH src(x) AS
(
  SELECT y.query('.')
  FROM
  (
    SELECT x = CONVERT(XML,t.target_data)
      FROM sys.dm_xe_sessions AS s
      INNER JOIN sys.dm_xe_session_targets AS t
      ON s.[address] = t.event_session_address
      WHERE s.name = N'system_health'
  ) AS x
  CROSS APPLY x.x.nodes('/RingBufferTarget/event') AS y(y)
)
SELECT 
  x,ts = CONVERT(DATETIME,NULL),err = CONVERT(INT,NULL)
INTO #blat FROM src;

DELETE #blat WHERE x.value('(/event/@name)[1]','varchar(255)') <> 'error_reported';

UPDATE #blat SET ts = x.value('(/event/@timestamp)[1]','datetime');

UPDATE #blat SET err = x.value('(/event/data/value)[1]','int');

SELECT err,number_of_events = COUNT(*)
  FROM #blat
  WHERE err IN (17803,8657,8902)
  AND ts >= CONVERT(DATE,CURRENT_TIMESTAMP)
  GROUP BY err;

DROP TABLE #blat;

(这个例子从Amit Banerjee’s introductory blog post on the system_health session开始宽容借用.)

有关扩展事件的更多信息(包括可以查询特定数据的许多示例),请参阅Jonathan Kehayias撰写的这个由31部分组成的博客系列:

https://www.sqlskills.com/blogs/jonathan/an-xevent-a-day-31-days-of-extended-events/

错误日志

SQL Server默认保留当前加上6个最新的错误日志文件(但是you can change this).存储了大量信息,包括启动信息(正在使用的内核数量,内存中的锁定页面是否设置,身份验证模式等)以及错误和其他严重到足以记录的情况(并且未在其他地方捕获).最近的一个例子是有人在数据库脱机时寻找.您可以通过扫描每个最新的7个错误日志来确定文本设置数据库选项OFFLINE:

EXEC sys.sp_readerrorlog 0,1,'Setting database option OFFLINE';
EXEC sys.sp_readerrorlog 1,'Setting database option OFFLINE';
EXEC sys.sp_readerrorlog 2,'Setting database option OFFLINE';
EXEC sys.sp_readerrorlog 3,'Setting database option OFFLINE';
EXEC sys.sp_readerrorlog 4,'Setting database option OFFLINE';
EXEC sys.sp_readerrorlog 5,'Setting database option OFFLINE';
EXEC sys.sp_readerrorlog 6,'Setting database option OFFLINE';

我介绍了其他一些细节in this recent answer,还有一些很好的背景信息at toadworld和in the official documentation.

默认情况下,错误日志会跟踪一组“错误” – 并且可以使重要信息更快地脱离 – 是每个成功的备份消息.您可以在enabling trace flag 3226之前阻止这些错误日志填满噪音.

(编辑:网站开发网_马鞍山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!