sql-server – 我可以从SQL Server默认得到哪些变乱信息?
副问题[/!--empirenews.page--]
我常常会看到一些题目,人们想知道某件工作是否产生,可能何时产生,可能是谁执行了这一动作.在许多环境下,SQL Server自己不会跟踪此信息.譬喻: >谁最后执行了存储进程dbo.MyProcedure? 可是,默认环境下SQL Server会暂且跟踪其他几个变乱,而且可以原生答复有关的题目,譬喻: > AdventureWorks数据库中最后一次自动增添是什么时辰,必要多长时刻? 我怎样获取此信息,以及它可以保存多长时刻? 办理要领默认环境下,SQL Server会为您跟踪相等多的有代价信息.因为SQL Server 2005中存在一个在靠山运行的“默认跟踪”,而且自SQL Server 2008以来已经有一个自动运行的扩展变乱会话,称为system_health.您还可以从SQL Server错误日记,SQL Server署理日记,Windows变乱日记以及SQL Server Audit,Management Data Warehouse,Event Notifications,DML Triggers,DDL Triggers,SCOM / System Center,您本身的处事器端跟踪或扩展变乱等其改日记记录中查找某些信息.会话或第三方监控办理方案(如my employer,SQL Sentry所述).您也可以选择启用a so-called “Blackbox trace” to assist in troubleshooting. 可是对付这篇文章,我将把范畴齐集在凡是最常用的对象上:默认跟踪,扩展变乱会话和错误日记. 默认跟踪 默认跟踪凡是在大大都体系上运行,除非您有disabled it using DECLARE @TraceID INT; SELECT @TraceID = id FROM sys.traces WHERE is_default = 1; SELECT t.EventID,e.name as Event_Description FROM sys.fn_trace_geteventinfo(@TraceID) t JOIN sys.trace_events e ON t.eventID = e.trace_event_id GROUP BY t.EventID,e.name; 您可以通过插手sys.trace_columns来相识更多具体信息,以查察哪些变乱包括哪些数据,但我此刻要跳过它,由于您可以在现实查询特定变乱的跟踪数据时看到您拥有的内容.这些是我的体系上可用的变乱(您应该在您的体系上运行查询以确保它们匹配): EventID Event_Description ------- ---------------------------------------------- 18 Audit Server Starts And Stops 20 Audit Login Failed 22 ErrorLog 46 Object:Created 47 Object:Deleted 55 Hash Warning 69 Sort Warnings 79 Missing Column Statistics 80 Missing Join Predicate 81 Server Memory Change 92 Data File Auto Grow 93 Log File Auto Grow 94 Data File Auto Shrink 95 Log File Auto Shrink 102 Audit Database Scope GDR Event 103 Audit Schema Object GDR Event 104 Audit Addlogin Event 105 Audit Login GDR Event 106 Audit Login Change Property Event 108 Audit Add Login to Server Role Event 109 Audit Add DB User Event 110 Audit Add Member to DB Role Event 111 Audit Add Role Event 115 Audit Backup/Restore Event 116 Audit DBCC Event 117 Audit Change Audit Event 152 Audit Change Database Owner 153 Audit Schema Object Take Ownership Event 155 FT:Crawl Started 156 FT:Crawl Stopped 164 Object:Altered 167 Database Mirroring State Change 175 Audit Server Alter Trace Event 218 Plan Guide Unsuccessful 请留意,默认跟踪行使翻转文件,因此可用的数据只会返回到今朝为止 – 可用数据的日期范畴取决于捕捉的上述变乱的数目和频率.假如要确保保存较长的汗青记录,可以配置一个功课,按期归档与跟踪关联的当前非勾当文件. 例子 在这个题目中,我问了几个我发明的题目.以下是从默认跟踪中提取特定信息的示例查询.
此查询将提取AdventureWorks数据库中的全部AutoGrow变乱,包罗仍在默认跟踪日记文件中的日记和数据文件: DECLARE @path NVARCHAR(260); SELECT @path = REVERSE(SUBSTRING(REVERSE([path]),CHARINDEX(CHAR(92),REVERSE([path])),260)) + N'log.trc' FROM sys.traces WHERE is_default = 1; SELECT DatabaseName,[FileName],SPID,Duration,StartTime,EndTime,FileType = CASE EventClass WHEN 92 THEN 'Data' ELSE 'Log' END FROM sys.fn_trace_gettable(@path,DEFAULT) WHERE EventClass IN (92,93) AND DatabaseName = N'AdventureWorks' ORDER BY StartTime DESC;
这将返回名为EmployeeAuditData的工具的任何DROP变乱.假如要确保它只检测表的DROP变乱,可以添加过滤器:ObjectType = 8277(full list is documented here).假如要将搜刮空间限定为特定命据库,可以添加过滤器:DatabaseName = N’db_name’. DECLARE @path NVARCHAR(260); SELECT @path = REVERSE(SUBSTRING(REVERSE([path]),260)) + N'log.trc' FROM sys.traces WHERE is_default = 1; SELECT LoginName,HostName,ObjectName,TextData FROM sys.fn_trace_gettable(@path,DEFAULT) WHERE EventClass = 47 -- Object:Deleted AND EventSubClass = 1 AND ObjectName = N'EmployeeAuditData' ORDER BY StartTime DESC; 这里有一个伟大的题目,这长短常简朴的案例,但无论怎样都以为这是审慎的.假如您行使多个模式而且也许在多个模式中具有沟通的工签字称,则您将无法判别这是哪一个(除非它的对应物如故存在).有一个外部环境,UserA也许已经删除了SchemaB.Tablename,而UserB也许已经删除了SchemaA.Tablename.默认跟踪不跟踪工具的模式(也不捕捉此变乱的TextData),而且跟踪中包括的ObjectID对直接匹配没有效(由于该工具已被删除且不再存在).在这种环境下在输出中包括该列也许对付行使如故存在的沟通名称的表的任何副本举办交错引用是有效的,可是假如体系处于这种紊乱中(可能假如全部这些副本都已被删除)哪里如故也许不是一个靠得住的要领来揣摩谁删除了哪个表副本. 扩展变乱 从Supporting SQL Server 2008: The system_health session (SQLCSS Blog)开始,以下是您可以从SQL Server 2008和2008 R2中的system_health会话中剔除的数据列表: (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |