通过事务日志恢复SqlServer数据库到一个特定的时间点

Code
--创建测试数据库
CREATE DATABASE Db
GO

--对数据库进行备份
BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMAT
GO

--创建测试表
CREATE TABLE Db.dbo.TB_test(ID int)

--延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败)
WAITFOR DELAY '00:00:01'
GO

--假设我们现在误操作删除了 Db.dbo.TB_test 这个表
DROP TABLE Db.dbo.TB_test

--保存删除表的时间
SELECT dt=GETDATE() INTO #
GO

--在删除操作后,发现不应该删除表 Db.dbo.TB_test

--下面演示了如何恢复这个误删除的表 Db.dbo.TB_test

--首先,备份事务日志(使用事务日志才能还原到指定的时间点)
BACKUP LOG Db TO DISK='c:\db_log.bak' WITH FORMAT
GO

--接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行)
RESTORE DATABASE Db FROM DISK='c:\db.bak' WITH REPLACE,NORECOVERY
GO

--将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早
DECLARE @dt datetime
SELECT @dt=DATEADD(ms,-20,dt) FROM #  --获取比表被删除的时间略早的时间
RESTORE LOG Db FROM DISK='c:\db_log.bak' WITH RECOVERY,STOPAT=@dt
GO

--查询一下,看表是否恢复
SELECT * FROM Db.dbo.TB_test

/*--结果:
ID          
----------- 

(所影响的行数为 0 行)
--*/

--测试成功
GO

--最后删除我们做的测试环境
DROP DATABASE Db
DROP TABLE #

时间: 2024-11-13 04:01:40

通过事务日志恢复SqlServer数据库到一个特定的时间点的相关文章

SQL Server误区:有关大容量事务日志恢复模式的误区

误区 #28:有关大容量事务日志恢复模式的几个误区 28 a)常见的DML操作可以被"最小记录日志" 不是.在大容量事务日志恢复模式下只有一小部分批量操作可以被"最小记录日志",这类操作的列表可以在Operations That Can Be Minimally Logged找到.这是适合SQL Server 2008的列表,对于不同的SQL Server版本,请确保查看正确的列表. 28 b)使用大容量事务日志恢复模式不会影响灾难恢复 首先,在上次事务日志备份之后

DB2崩溃后用事务日志恢复的原理和技巧

在系统崩溃之后,使用DB2的事务日志恢复数据库. 您曾多少次碰到过错误消息"SQL0946C The transaction log for the database is full?" 在尽力解决该问题时,您是否停下来思考如下两个问题:1. 为何存在事务日志:2. 事务日志记录服务的目的是什么呢? 若没有事务,多个用户和应用程序同时与一个数据库进行交互时就必然会破坏数据.而如果没有事务日志记录,DB2 UDB中的一些据库恢复方法就不会存在. 如果您还没有完全理解这些概念,也不必担忧.

SQL Server日志恢复还原数据库几种方法

SQL Server日志恢复 通过日志还原,最重要的是: 1.必须有一个完整的备份,且这个备份必须是在修改.删除数据之前做的. 2.在更新.删除数据之后,做日志备份,该log备份将用于还原之前的数据  下面步骤的目的:还原被删除的表 在SQL Server Management可视化操作步骤: 1.创建数据库并完整备份:  代码如下 复制代码 --创建测试数据库 CREATE DATABASE Db GO --对数据库进行备份 BACKUP DATABASE Db TO DISK='c:/db.

SQL Server误区30日谈 第28天 有关大容量事务日志恢复模式的误区_MsSql

误区 #28:有关大容量事务日志恢复模式的几个误区 28 a)常见的DML操作可以被"最小记录日志"    不是.在大容量事务日志恢复模式下只有一小部分批量操作可以被"最小记录日志",这类操作的列表可以在Operations That Can Be Minimally Logged找到.这是适合SQL Server 2008的列表,对于不同的SQL Server版本,请确保查看正确的列表. 28 b)使用大容量事务日志恢复模式不会影响灾难恢复    首先,在上次事务

一起谈.NET技术,asp.net利用log4net写入日志到SqlServer数据库

asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖. 下面就我的安装部署log4net到MS sql server的经验与大家分享. 下载log4net的Dll文件并引入到项目中,在你的web主项目(比如MainWeb.csproj)添加对log4net.dll的引用,并在相应的Globall.cs文件中的Application_Start 事件中写入 protected void Applica

asp.net利用log4net写入日志到SqlServer数据库

asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖. 下面就我的安装部署log4net到MS sql server的经验与大家分享. 下载log4net的Dll文件并引入到项目中,在你的web主项目(比如MainWeb.csproj)添加对log4net.dll的引用,并在相应的Globall.cs文件中的Application_Start 事件中写入 protected void Applica

使用SQL Server 2008的事务日志传送功能备份数据库

一:系统要求 数据库服务器,名称Server-DW,Windows Server 2003 X64,安装SQL Server 2008,需要备份的数据库为"JKL_DW". 备份服务器,名称Server-ETL,Windows Server 2003 X32,安装SQL Server 2008. 二:准备工作 1.在Server-ETL上创建文件夹,用于存放备份数据库,此例中命名为"jklDW". 2.在Server-ETL上创建文件夹,用于存放为备份数据传送过来的

如何使用ASP.NET备份和恢复SqlServer数据库

首先我们先分析ASP备份SQL数据库的代码,详细如下: 备份SqlServer数据库:string SqlStr1 = "Server=(local);database='" + this.DropDownList1.SelectedValue + "';Uid=sa;Pwd=";string SqlStr2 = "backup database " + this.DropDownList1.SelectedValue + " to d

用Asp.net还原与恢复sqlserver数据库

上次做了个项目,涉及到数据库的还原和恢复,到网上找了一下,是利用SQLDMO实现的,只要添加SQLDMO引用就好了,然后利用下边的类的方法就可以实现了. 我把原作者的类扩充了一下,可以自动识别web.config里 的数据库连接字符串,可以通过变量设置还原恢复的信息. 需要注意的时还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在MASTER数据库中添加一个存储过程: createprockillspid(@dbnamevarchar(20)) as begin de