今天遇到一个很奇怪的问题,数据库中的表被无缘无故的删了,而且是有针对性的定时删;查代码找了一条也没看出什么问题,后来查sql server的日志看到删除记录,只能定位到时间,不能定位到操作者;后来从现场人员口中得知,除了本服务在跑之外还有另一个服务也在跑;后来试着交替停掉两个服务,才定位到是另一个服务操作的;原始是另一个服务和本服务使用同一个数据库,且两个服务生成的表名中的关键字一样才删,后来就尝试着改表名,就没有问题了。简直一个坑字了得。
通过查看日志追寻原因:
1. select * from sys.configurations where configuration_id = 15682. select * from ::fn_trace_getinfo( 0 )3. selectloginname,loginsid,spid,hostname,applicationname,servername,databasename,objectname,e.category_id,cat.name as [CategoryName] ,textdata,starttime,eventclass,eventsubclass, --0表示begin,1表示commite.name as EventNamefrom ::fn_trace_gettable( 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\log.trc' , 0 )inner join sys.trace_events eon eventclass = trace_event_idinner join sys.trace_categories as caton e.category_id = cat.category_idwhere databasename = 'TraceDB' andobjectname is null and --根据objectname来过滤e.category_id = 5 and --category 5表示对象e.trace_event_id = 46 --trace_event_id: 46表示Create对象,47表示Drop对象,164表示修改对象
来源:oschina
链接:https://my.oschina.net/u/4964407/blog/4932249