SQL2005 从日志中恢复Delete 数据 1. 当前日志没有CheckPoint 走,那么在系统函数 fn_dblog 里面就有某个表操作记录,基于 fn_dblog 表,做了一 个分 析 当前日志中被 删 除 数据的 存 储 过 程 不 支 持 的 数据类 型 为 :'image','text','uniqueidentifier','varbinary','binary','real','money','float','ntext','bit','decimal','numeric','smallmoney','timestamp','xml','sysname' 其他均支持 delete FROM POD_SN_LIST WHERE SERIAL_NUMBER BETWEEN '1A7372SZW4T' AND '1A73771CW4N' 有 2690 行, 执行: EXEC [GetDeletedDataFromLog] 'POD_SN_LIST' 用 2 分 17 秒就可以找回: 2. 相关原理图片为: ------------------------------------------------------------------------------------------------------------------ ALTER PROCEDURE [dbo].[GetDeletedDataFromLog] -- Add the parameters for the stored procedure here @TableName varchar(40) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @Data varbinary(max) DECLARE @DeleteStye VARCHAR(100) DECLARE @FK_name varchar(100) SELECT @FK_name='dbo.'+@TableName IF EXISTS(SELECT * FROM SYS.INDEXES WHERE OBJECT_ID=OBJECT_ID(@TableName) AND type_desc='CLUSTERED') BEGIN SELECT @FK_name=[NAME] FROM SYS.INDEXES WHERE OBJECT_ID=OBJECT_ID(@TableName) AND type_desc='CLUSTERED' SELECT @FK_name='dbo.'+@TableName+'.'+@FK_name END IF EXISTS(SELECT * FROM SYS.TABLES WHERE [NAME]='TEMP_TABLE_ForRestore') BEGIN DROP TABLE TEMP_TABLE_ForRestore END ---------------------创建表头------------------------------------------------------------------- DECLARE @iSQL NVARCHAR(1000) DECLARE @ColumnName VARCHAR(100) DECLARE @name VARCHAR(20) DECLARE @max_length varchar(10) DECLARE @FirstColumnName VARCHAR(100) SELECT @iSQL='' SELECT A.Column_id,A.[name] ColumnName,B.[name],A.max_length max_length, is_Variable= CASE B.[name] WHEN 'varbinary' THEN 'Variable' WHEN...