查询谁修改了数据库的恢复模式

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

QQ群里面有人说自己的数据库恢复模式自动被修改了,但是没有JOB也没有人修改,问我是否查出到底发生了什么。

其实在SQL Server Error Log里面会记录数据库恢复模式被更改的信息。比如我运行下面的脚本:

 

alterdatabase sql2008 setrecovery simple

go

alterdatabase sql2008 setrecovery full

然后用sp_readerrorlog可以看到下面的信息:

2013-09-1309:57:45.200        spid51      Settingdatabase option RECOVERY to SIMPLEfor database sql2008.

2013-09-1309:57:48.980        spid51      Settingdatabase option RECOVERY to FULLfor database sql2008.

可以看到Error Log获得的信息比较少无法确切知道当时是谁执行的,命令代码,应用程序是什么。但是在Default Trace中会记录对象的变更,事件类为 164,修改数据库的恢复模式也会被记录到这个事件。如果将Default TraceError Log的信息结合起来,就可以获得更为详细的资料,从而找到当时运行的脚本,用户名,应用程序名称。

这里面有一个问题,默认情况下sp_readerrorlog只获得当前的错误日志,但是可能错误信息不在这个日志里面。所以下面的脚本使用存储过程sp_enumerrorlogs循环所有的日志文件。

脚本如下:

 

--查询所有的错误日志文件找到修改Recovery Mode的信息,由于Error Log肯能被Recycle

--所以我们用Undocomented存储过程master..sp_enumerrorlogs循环所有的错误日志文件

setnocounton

 

declare @searchString1  varchar(255)

 

declare @searchString2  varchar(255)

 

set @searchString1  ='RECOVERY'

 

set @searchString2  ='OPTION'

 

declare @logs  table (LogNo int, StartDate Datetime, FileSize int)

 

declare @results  table (LogFileNo  int, LogDate  Datetime, ProcessInfovarchar(20),Textvarchar(max))

 

insertinto @logs EXECmaster..sp_enumerrorlogs

declare cLogs  cursorforselect LogNo from @logs 

 

declare @LogNo  int

 

open cLogs 

 

fetch cLogs  into @LogNo 

 

while @@fetch_status=

 

begin

 

insertinto @results(LogDate, ProcessInfo,Text)

 

EXECsp_readerrorlog@LogNo,1, @searchString1,@searchString2

 

update@resultsset LogFileNo =@LogNowhere LogFileNo isnull

 

fetchcLogsinto @LogNo 

 

end

 

deallocate cLogs 

 

 

select*from @results 

 

 

---循环所有的DefaultTrace文件

declare @logFile  varchar(max)

 

set @logFile  =(selectpathfromsys.traceswhere is_default=1)

 

set @logFile  =left(@logFile,len(@LogFile)-charindex('_',reverse(@LogFile)))+'.trc'

 

--将日志文件和Trace文件关联,这样就可以获得当时修改Recovery Mode的代码,LoginIDHOSTNAME 等等。

select starttime,*

 

fromfn_trace_gettable(@logFile,null) t 

 

join @results r  on  t.StartTime betweendateadd(ms,-150,r.logDate)anddateadd(ms,150,r.logdate)

 

andt.spid =substring(r.ProcessInfo,5,10)--required to enable ahash join to be used 

where t.EventClass = 164 

 

and EventsubClass  = 1 

原始脚本来自于:http://sqlblogcasts.com/blogs/simons/archive/2011/04/27/how-to-find-out-when-a-db-recovery-model-was-changed.aspx

 

 

 本文转自 lzf328 51CTO博客,原文链接:http://blog.51cto.com/lzf328/1296231



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
24天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
14 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
21天前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
26 2
|
22天前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
22天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
109 1
|
24天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
198 2
|
24天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
143 1
|
1月前
|
SQL Java 数据库连接
如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
【10月更文挑战第6天】在代码与逻辑交织的世界中,我从一名数据库新手出发,通过不断探索与实践,最终成为熟练掌握JDBC的开发者。这段旅程充满挑战与惊喜,从建立数据库连接到执行SQL语句,再到理解事务管理和批处理等高级功能,每一步都让我对JDBC有了更深的认识。示例代码展示了如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
98 5
|
23天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
53 0
|
1月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
60 0
|
1月前
|
存储 SQL 数据库
深入理解数据库索引:提升查询性能的关键
数据库索引是优化查询性能的重要工具。本文将带你深入探索索引的内部结构和工作原理,揭示如何通过合理使用索引来加速数据库查询,同时避免常见的索引陷阱。
下一篇
无影云桌面