今天生产上有人把几张表给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了?的更多相关文章

  1. sql语句中----删除表数据drop、truncate和delete的用法

    sql语句中----删除表数据drop.truncate和delete的用法 --drop drop table  tb   --tb表示数据表的名字,下同 删除内容和定义,释放空间.简单来说就是把整 ...

  2. 2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法

    一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表 ...

  3. 删除表数据drop、truncate和delete的用法

    说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大- ...

  4. Oracle数据表被drop后的恢复

    对于被drop的表和索引,都会存放在回收站中(所以对于生产的数据库必须设置好回收站功能) 由于本次生成环境在drop掉已有的表后,又一次创建了很多的表,全部直接还原的话会提示原有对象存在,表名反复.当 ...

  5. mysql语句中----删除表数据drop、truncate和delete的用法

    程度从强到弱 1.drop  table tb        drop将表格直接删除,没有办法找回 2.truncate (table) tb       删除表中的所有数据,不能与where一起使用 ...

  6. mysql----快速删除数据表(drop,truncate.delete)

    概念: 三者均可删除数据表 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快 ...

  7. 数据库之删除表数据drop、truncate和delete的用法

    数据库中删除表数据的关键字,最常用的可能就是delete了,另外其实还有drop和truncate两个关键字. 老大:drop 命令格式:drop table  tb  ---tb表示数据表的名字,下 ...

  8. mysql:删除表数据drop、truncate和delete的用法

    程度从强到弱 1.drop  table tb        drop将表格直接删除,没有办法找回 2.truncate (table) tb       删除表中的所有数据,不能与where一起使用 ...

  9. oracle中删除表:drop、delete、truncate

    相同点,使用drop delete truncate 都会删除表中的内容 drop table 表名 delete from 表名(后面不跟where语句,则删除表中所有的数据) truncate t ...

随机推荐

  1. SpringBoot和SpringCloud区别

    SpringBoot专注于快速方便的开发单个个体微服务.    SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,    为各个服 ...

  2. 如何高效的算出2x8的值

    原文出自:https://blog.csdn.net/seesun2012 位移算法,如何高效的算出2*8的值,为什么8<<1,4<<2,2<<3,1<< ...

  3. 推荐几款基于Bootstrap的响应式后台管理模板

    1.Admin LTE 该模版开源免费. AdminLTE - 是一个完全响应式管理模板.基于Bootstrap3的框架.高度可定制的,易于使用.支持很多的屏幕分辨率适合从小型移动设备到大型台式机. ...

  4. spring整合struts2和hibernate

    1.spring 1.1 jar包 1.2 spring.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  5. LDAP概念了解

    LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.LDAP支持TCP/IP,这对访问Internet是必须的. L ...

  6. PAT 1071. Speech Patterns

    又是考输入输出 #include <cstdio> #include <cstdlib> #include <string> #include <vector ...

  7. mybatis向数据库插入数据 (传入的是一个实体类)

    /** * 插入用户信息 user为实体类 * @param user */ public int insert( User user); //实体类不用@param标注 //mybatis的xml文 ...

  8. [摘]全文检索引擎Solr系列—–全文检索基本原理

    原文链接--http://www.importnew.com/12707.html 全文检索引擎Solr系列—–全文检索基本原理 2014/08/18 | 分类: 基础技术, 教程 | 2 条评论 | ...

  9. ef使用dbfirst方式连接mysql

    1.安装 mysql connector net 6.9.9  https://dev.mysql.com/downloads/file/?id=463758 和mysql for visual st ...

  10. JavaScript 访问对象属性和方法及区别

    这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...