通过Transaction Log(fn_dblog)取回被删除的数据

最近跟 James 讨论为何「ApexSQL Log」这个工具可以读到被删除的数据呢?

原来它是透过 Transaction Log 来读取数据的!

于是透过 Transaction Log 到网络上有找到「SQL Server – How to find Who Deleted What records at What Time」直接透过 Transaction Log 来把被删除的数据给找回来!

蛮神奇的,只是Run在我的区分大小写的DB中会发生错误,因为有些字段名称大小写没有一致,于是就调整了一下!

刚开始在SQL 2012中运作都正常,到了SQL 2005及SQL 2008,删除的人员及时间居然没有显示出来。 www.it165.net

再检查一下,原来是因为sysusers跟fn_dblog中的Transaction SID Join不到,所以改用SUSER_SNAME也蛮清楚的!

另外,原本要输入数据库名称,改为自动取得现在执行的数据库。

修改后的SP,请从附件download,希望对大家有帮助,谢谢!

 

测试范例如下,

 

view sourceprint?

01.--先建立测试的数据,并删除它

02.Create Table tbl_Sample

03.([ID] int identity(1,1) ,

04.[Namevarchar(50),

05.[T1] int)

06.GO

07.Insert into tbl_Sample values ('Letter A', 11)

08.Insert into tbl_Sample values ('Letter B', 22)

09.Insert into tbl_Sample values ('Letter C', 33)

10. 

11.Select from tbl_Sample

12.DELETE FROM tbl_Sample

13. 

14.--执行找回被删除数据的SP

15.--1.输入删除的Table Name 从 Transaction Log 找所有被删除的数据

16.EXEC Recover_Deleted_Data_With_UID_Date_Time_Proc  'dbo.tbl_Sample'

17.--2.输入删除的Table Name 从 Transaction Log 在时间区间中,找出所有被删除的数据

18.EXEC Recover_Deleted_Data_With_UID_Date_Time_Proc  'dbo.tbl_Sample','2013/05/23','2013/05/23'

执行SP后,会把被删除的数据给找出来,如下图,

 

时间: 2024-10-31 07:45:00

通过Transaction Log(fn_dblog)取回被删除的数据的相关文章

warning The transaction log file is corrupted.

Remark Even if appealing using compress option has a constraint when preparing the backup, as clearly stated by Percona: Before you can prepare the backup you'll need to uncompress all the files with qpress. The error message you get is : xtrabackup:

通过PL/SQL同时对200多个表空间进行创建、删除和数据迁移

功 能:创建存储过程,通过PLSQL同时对200多个表空间/用户进行创建/删除,数据迁移 适用范围: 表空间较多,数据量比较大的数据迁移.以后会逐渐把这种数据库单独放一个实例.已经有一套1TB以上数据量的库,例如csb221.要将此库迁移至另一个系统上的另外一套库csb461.   sys sysdba 登陆plsql --0.创建另外一套库的databaselink 如果能执行语句就不用创建link. Select upper(userid) as userid Frommymis_main.

如何不使用rman工具恢复被rm删除的数据文件

朋友一时兴起使用了rm**,删除了oracle数据文件后找我帮忙,我在帮朋友恢复数据库时,遇到了当recover时,报错不能找到28739号归档日志,这样我就不能同步scn,更不能打开数据库了.这是归档日志不连续的典型案例,我最后告诉他要做好心理准备.事情还没有完,这个真实案例引发了我的思考,如果当时在朋友没有做rman拯救措施的情况下,可不可能不使用rman即可恢复数据文件呢!最后我找到了答案:) 案例 1.系统solaris SunOS TJLT-YDWG6 5.9 Generic_1223

javascript中删除页面数据的问题

问题描述 javascript中删除页面数据的问题 在一个HTML程序的的地步引入了两个JS程序,现在我在HTML页面添加了一个删除按钮 <a href=""index.html""><input type=""button"" value=""Remove!"" id=""a"" onclick=""remo

代码-如何请求接口删除网络数据?

问题描述 如何请求接口删除网络数据? 给我了HTML5的接口,我怎么去调用呢?用AFN,求大神给代码,耽误您一分钟时间,谢谢 解决方案 网络提供的证券实时数据访问接口 解决方案二: AFN没接触过,但是删除接口肯定是一个url地址,然后需要一个id属性之类的. 解决方案三: AFN参考 http://blog.csdn.net/huang2009303513/article/details/41309043h5提供的是一个http的接口,他需要你传入一些参数,并返回结果给你 解决方案四: 没用过

c++ 编程问题-.txt文件中删除某些数据而保留其他数据

问题描述 .txt文件中删除某些数据而保留其他数据 比如我有个.txt文件,名字叫aaa 里面有数据是这样的: 第一行11111 第二行23222 第三行32562 那么怎么才能用C++的代码实现把第二行删除掉,而保留第一行和第三行呢? 求代码,最后带一些解析 解决方案 先用ostream对象把文件读到一个缓冲区,然后对缓冲区修改,最后将缓冲区用istream对象写入到文件就行了,主要是对缓冲区的操作而已

实现删除主表数据时, 判断与之关联的外键表是否有数据

问题描述:某个基础信息表,与系统中30多个表存在外键关系,当删除基础数据时,需要判断是否已经被用过,如果用过则更改标志位,如果没有用过则直接删除,如何能很好实现这个处理?最好能够自动适应表的变化 问题解决(SQL Server 2005)-- SQL Server 2005的错误处理容易控制, 因此, SQL Server 2005中可以直接删除, 通过错误处理来确定是否需要更新. -- 示例如下.USE tempdbGO CREATE TABLE m(    id int PRIMARY KE

Excel中删除重复数据

请仔细阅读并修改相关数据. 1.打开有重复数据的EXCEL 2.Alt+F11 打开宏编辑器 3.左边双击:ThisWorkBook 4.贴入以下代码并运行即可: Sub 删除重复数据() '删除col列的重复数据 '本例是删除标题为sheet1的EXCEL表中A列(从A2单元格开始)的重复数据 Application.ScreenUpdating = False '可根据实际情况修改下面三行的结尾值 Dim sheetsCaption As String: sheetsCaption = "S

Oracle比较快的删除重复数据的方式

  网上五花八门删除重复数据的方法就是没见过这种: DELETE FROM prod_grid_inc WHERE ROWID IN (SELECT b.row_id2 FROM (SELECT ROWID row_id2, a.*, row_number() over(PARTITION BY a.prod_id ORDER BY a.insert_date DESC) row_num FROM prod_grid_inc a) b WHERE b.row_num >= 2); 大家不妨试试,