当前位置: 首页 > news >正文

通过日志恢复SQL Server的历史数据

通过日志恢复SQL Server的历史数据

转载:http://www.cnblogs.com/jintan/archive/2008/11/14/1333879.html

园子里前段时间发过一篇通过日志恢复MSSQL数据例子 ,我总结一下

通过日志还原,最重要的是:

1.必须有一个完整的备份,且这个备份必须是在修改、删除数据之前做的。

2.在更新、删除数据之后,做日志备份,该log备份将用于还原之前的数据

 

下面步骤的目的:还原被删除的表

在SQL Server Management可视化操作步骤:

1.创建数据库并完整备份:

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

 

 

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

 

2.创建一个空表

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

3.删除刚刚建的这个空表,假设这个表被误删除了

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

到了这一步,我们想还原被删除的TB_Test表,这个时候,记住删除表之前的时间,后面会用到

这个时候,需要备份日志,可以用SQL Management界面操作备份,也可以用T-SQL备份

BACKUP   LOG  Db  TO   DISK = ' c:\db_log.bak '   WITH  FORMAT
GO

 

4.还原数据库,可以替换原来数据库,或者还原成一个新的数据库DB1,这里新的数据库DB1

如果是界面操作:

“任务”- “还原” - “数据库”:

在“常规”选择页中的设备后面选择我们之前的完整备份:db.bak,

目标数据库:DB1

在“恢复状态”下选择第2项“不对数据库执行任何操作,不回滚提交的事务。。” ,点确定后,可以看到DB1数据库的状态变成“正在还原。。”

接下来:在DB1数据库上点右键--还原--事务日志,选择刚刚我们删除表后备份的事务日志:db_log.bak,

在下面选择时间点,这个时间是上面我们记住的删除表之前的时间,点击确定后,还原成功。可以看到被删除的表又回来了。

 

完整的脚本:

-- 创建测试数据库
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  #

 

本文代码参考csdn的帖子:http://topic.csdn.net/u/20080321/12/f5d33007-9bea-43f1-844b-914e68de727d.html

posted on 2010-09-24 13:56 老杨~ 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/qiangqiang/archive/2010/09/24/1833856.html

相关文章:

  • DateTime Calendar
  • Sqlserver与Oracle 10g数据类型对照
  • win7、Ubuntu双系统Grub启动菜单修复
  • IT男吃什么最利于健康
  • 根据经纬度获取时区信息
  • 团购消费已成近期投诉热点 长假团购需防三大陷阱
  • 大数据架构和模式(五)——对大数据问题应用解决方案模式并选择实现它的产品...
  • 解决MSE, Windows Update/Defender无法更新(错误代码0x8024402F)
  • Android_CodeWiki_03
  • D3D 部分功能测试结论
  • PHP time(), microtime(),date()函数
  • 使用快照隔离snapshot isolation实例(二)
  • Powershell管理系列(十七)在PowerShell中添加Exchange管理单元
  • 数据库连接代码
  • javascript中setInterval与setTimeout中this的问题以及对于闭包的一些理解
  • 03Go 类型总结
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Koa2 之文件上传下载
  • magento 货币换算
  • passportjs 源码分析
  • PHP变量
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 半理解系列--Promise的进化史
  • 大整数乘法-表格法
  • 开源SQL-on-Hadoop系统一览
  • 力扣(LeetCode)22
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 使用 Docker 部署 Spring Boot项目
  • 事件委托的小应用
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #微信小程序(布局、渲染层基础知识)
  • $.each()与$(selector).each()
  • ${factoryList }后面有空格不影响
  • ( 10 )MySQL中的外键
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)JAVA中的堆栈
  • (转)linux下的时间函数使用
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net IE10 _doPostBack 未定义
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @Query中countQuery的介绍
  • @我的前任是个极品 微博分析
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [1]-基于图搜索的路径规划基础