谁把我的表给drop了?
今天生产上有人把几张表给DROP了,一通折腾。恢复备份导数回来数据,重建索引。
但是,我就想知道是谁给干掉了。
到你被删除表数据库中找日志吧。其它的也想不到更好办法了
USE '被删表数据库'
--查年那些创建和删除表的用户和时间
SELECT
[Xact ID],Operation,[Transaction Id],SUSER_SNAME([Transaction SID]) [User],
[Transaction Name],[Begin Time],[SPID],Description
FROM fn_dblog (NULL, NULL)
WHERE [Transaction Name]= 'DROPOBJ' or [Transaction Name]='CREATE TABLE'

知道谁干的了。
等等,这只是知道它删除表了,能知道他删除那个表了吗?
SELECT [Lock Information] FROM fn_dblog (NULL, NULL)
WHERE
[Lock Information] LIKE '%SCH_M OBJECT%'
and [Transaction Id]='0000:0000022d'
结果:
Lock Information
HoBt 0:ACQUIRE_LOCK_SCH_M OBJECT: 12:2105058535:0
这个[Transaction Id]来自第一个查询中。上面标出结果中12是DBID,而后面的是objectid,由于表已经在数据库里删除了。我们没有办法通过object_name()来得到表名,所以只能拿着这个ID去恢复的数据库里找了。
或者可以通过其它的方法:
如果你的‘default trace enabled’是默认设置,那就有好办法了。
通过下面的语句确认是否启动:
select * from sys.configurations
where name = 'default trace enabled'
如果是启用的,OK,我们可以使用下面查询
SELECT SessionLoginName,LoginName,SPID,StartTime,ObjectID,ObjectName ,TransactionID
FROM fn_trace_gettable
('D:\Program Files\Microsoft SQL Server\MSSQL10.SQL2K8\MSSQL\Log\log_8.trc', default)
where DatabaseName='Test'
其中的那个trc文件在你的系统安装路径里,例如我的

按修改日期排序,找出最新一个。一般是LOG日志数字比较大的那个,我的是log_8.trc。
好了,我们看看上面的查询返回的结果

看到了吧,上面的TransactionID列的值正好与我们第一个查询中[Xact ID]值对上了。这样我们就能确认什么人在什么时间删除了什么表了。
其实,SQL SERVER已经具有这个功能。
Reports > Standard Reports > Schema Changed History


这里有一个条件是你的数据库是full恢复模式,你的日志没有被断了。是否可能从已经备份的事务日志里找呢?也是可以的,下次我们一起研究一下吧~~
参考
http://www.sqlskills.com/blogs/paul/finding-out-who-dropped-a-table-using-the-transaction-log/
http://sqlserver-help.com/2011/06/08/help-who-dropped-objects-from-database/
http://msdn.microsoft.com/en-us/library/ms175513.aspx?s=1
谁把我的表给drop了?的更多相关文章
- sql语句中----删除表数据drop、truncate和delete的用法
sql语句中----删除表数据drop.truncate和delete的用法 --drop drop table tb --tb表示数据表的名字,下同 删除内容和定义,释放空间.简单来说就是把整 ...
- 2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法
一.SQL中的语法 1.drop table 表名称 eg: drop table dbo.Sys_Test 2.truncate table 表 ...
- 删除表数据drop、truncate和delete的用法
说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大- ...
- Oracle数据表被drop后的恢复
对于被drop的表和索引,都会存放在回收站中(所以对于生产的数据库必须设置好回收站功能) 由于本次生成环境在drop掉已有的表后,又一次创建了很多的表,全部直接还原的话会提示原有对象存在,表名反复.当 ...
- mysql语句中----删除表数据drop、truncate和delete的用法
程度从强到弱 1.drop table tb drop将表格直接删除,没有办法找回 2.truncate (table) tb 删除表中的所有数据,不能与where一起使用 ...
- mysql----快速删除数据表(drop,truncate.delete)
概念: 三者均可删除数据表 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快 ...
- 数据库之删除表数据drop、truncate和delete的用法
数据库中删除表数据的关键字,最常用的可能就是delete了,另外其实还有drop和truncate两个关键字. 老大:drop 命令格式:drop table tb ---tb表示数据表的名字,下 ...
- mysql:删除表数据drop、truncate和delete的用法
程度从强到弱 1.drop table tb drop将表格直接删除,没有办法找回 2.truncate (table) tb 删除表中的所有数据,不能与where一起使用 ...
- oracle中删除表:drop、delete、truncate
相同点,使用drop delete truncate 都会删除表中的内容 drop table 表名 delete from 表名(后面不跟where语句,则删除表中所有的数据) truncate t ...
随机推荐
- 100个实用的CSS技巧,以及遇见的问题和解决方案。
前言 本篇文章将会持续更新,我会将我遇见的一些问题,和我看到的实用的CSS技巧记录下来,本篇文章会以图文混排的方式写下去.具体什么时候写完我也不清楚,反正我的目标是写100个. 本案例都是经本人实测 ...
- .net core 第一篇选择开发工具和环境
.net core 已经发布三年了,社区也逐步成熟.作为微软阵营的一员,忙了一年年底抽点时间系统学习下.学习资料主要为以下为主: 1. https://docs.microsoft.com/zh-cn ...
- 【转】Encrypt ConnectionString in Web.Config 【加密ASP.NET web.config数据库链接字串】
原文链接:https://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Config web.config中一般会存放 ...
- UVA 10328(DP,大数,至少连续)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19825 这道题和http://www.cnblogs.com/qlky/p/ ...
- jqGrid用法汇总(全经典)
1.支持多种类型的数据集合作为数据源 $("#grid1").jqgrid( ........ datatype: "xml", ........ ); XML ...
- nginx关于 error_page指令详解.md
error_page指令解释 nginx指令error_page的作用是当发生错误的时候能够显示一个预定义的uri,比如: error_page 502 503 /50x.html; 这样实际上产生了 ...
- 简单的数据库连接池实例(java语言)
1.概述 频繁的创建和销毁数据库连接消耗非常多的系统资源,创建一个池子, 管理一定数量的连接,用的时候去池中取,用完了放回池中,这时比较通用的做法. 2.关键字 LinkedList synchro ...
- 01_编程规约——OOP规约
1.[强制]避免通过一个类的对象引用访问此类的静态变量或静态方法,避免增加编译器解析成本,直接用“类名.变量名”访问即可. 2.[强制]所有的覆盖方法,必须加@Override注解 说明:加@Over ...
- 22_CopyOnWrite容器
[简述] Copy-On-Write简称COW,是一种程序设计中的优化策略. JDK里的COW容器分为两种:CopyOnWriteArrayList 和 CopyOnWriteArraySet. Co ...
- 139.00.009提高Github Clone速度
@(139 - Environment Settings | 环境配置) Method 1 :SS+系统内置代理 用 git 内置代理,直接走系统中运行的代理工具中转,比如,你的 SS 本地端口是 1 ...