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

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

 

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

 

alter database sql2008 set recovery simple

go

alter database sql2008 set recovery 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循环所有的错误日志文件

 

set nocount on

 

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),Text varchar(max))

 

insert into @logs EXEC master..sp_enumerrorlogs

 

declare cLogs cursor for select LogNo from @logs

 

declare @LogNo int

 

open cLogs

 

fetch cLogs into @LogNo

 

while @@fetch_status =0

 

    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 =(select path from sys.traces where is_default=1)

 

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

 

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

select starttime,*

 

from fn_trace_gettable(@logFile,null) t

 

join @results r on  t.StartTime between dateadd(ms,-150,r.logDate) and dateadd(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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于c/s模式的通信录查询程序含数据库是一种客户端/服务器模式的应用程序,用于管理和查询通信录信息。该程序包含一个数据库,用于存储通信录信息,并提供客户端和服务器端的交互界面。 客户端通过与服务器建立连接,向服务器发送查询请求,服务器从数据库中检索相关信息,并将结果返回给客户端。客户端可以通过界面操作,对查询结果进行编辑、添加、删除等操作,并将修改后的信息发送给服务器,服务器将修改后的信息更新到数据库中。 该程序具有实时性和可靠性,能够快速响应用户的查询请求,并保证数据的完整性和安全性。同时,该程序还具有良好的扩展性和可维护性,可以根据需要进行功能扩展和代码维护。 ### 回答2: 基于c/s模式的通讯录查询程序含数据库是一种典型的客户端/服务器架构的应用程序。该程序主要包括客户端和服务器两个部分,通过网络连接实现通讯录的查询和管理。 客户端部分的功能包括用户界面展示、数据输入和传输,用户可以通过客户端界面输入查询条件,如姓名、电话号码等,然后将查询请求发送给服务器。 服务器部分负责接收客户端的请求并进行处理。服务器首先接收到客户端的查询请求后,从数据库中读取匹配的通讯录信息,并将结果返回到客户端进行展示。服务器也可以支持其他操作,如添加、编辑和删除通讯录等。 为了实现这一功能,需要一个中央数据库来存储通讯录信息。该数据库可以使用关系型数据库管理系统(如MySQL)或NoSQL数据库(如MongoDB)来搭建。数据库中的表可包括姓名、电话号码、邮件地址等字段,用于存储用户的通讯录信息。 在通讯录查询程序中,客户端和服务器之间通过网络进行通信。可以使用TCP协议来保证数据传输的可靠性和稳定性。客户端通过网络将查询请求传输给服务器,而服务器则通过网络将查询结果传输给客户端。 总之,基于c/s模式的通讯录查询程序含数据库通过客户端和服务器之间的通信,实现了用户方便地查询和管理通讯录的功能。用户可以通过客户端界面输入查询条件,并从数据库中获取满足条件的通讯录信息。这种架构设计使得程序具有良好的可扩展性和稳定性。 ### 回答3: 基于c/s模式的通信录查询程序含数据库是一种客户端/服务器架构的应用程序,用于管理和查询通信录信息。该程序包括两个主要组件:客户端和服务器端。 客户端是用户使用的界面,通过与服务器端进行通信来查询和管理通信录数据。客户端可以提供用户友好的图形界面,让用户轻松地输入查询条件并查看结果。客户端还可以包括一些额外的功能,如添加、修改和删除通信录条目。 服务器端是程序的核心部分,负责接收和处理来自客户端的请求。服务器端还与数据库进行交互,从数据库中检索和更新通信录数据。服务器端可以使用各种编程语言和技术来实现,如Java、Python或C#,并使用适当的数据库管理系统(如MySQL、Oracle或SQL Server)来存储和管理数据。 通信录数据库可以包含以下字段:姓名、电话号码、电子邮件地址、地址等。用户可以通过客户端向服务器端发送查询请求,根据姓名、电话号码或其他条件搜索通信录。服务器端将接收这些请求,并在数据库中执行相应的查询操作,然后将结果返回给客户端。 该程序的优点是可以实现远程访问通信录数据,用户可以通过互联网或局域网连接到服务器,并查找他们需要的联系人信息。此外,基于c/s模式的通信录查询程序还可以提供数据安全性和一致性,因为数据库中的数据可以进行备份和恢复,并可以设置权限以控制用户的访问。 总而言之,基于c/s模式的通信录查询程序含数据库可以提供便捷的通信录管理和查询功能,使用户能够轻松地查找和更新联系人信息。这种程序可以应用于各种领域,如企业内部通讯录、社交网络和在线商务等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值