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

园子里前段时间发过一篇通过日志恢复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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript面向对象编程指南(五) 原型

第5章 原型 5.1 原型属性 function f(a,b){return a*b;};// length 属性f.length; //2// constructor 构造属性f.constructor; // function Function() { [native code] }// prototype 属性 初始值是空对象typeof f.prototype; //"object" 5.1.1 利用原型添加方法和…

java communal_平台用英语怎么说

平台通常指高于附近区域的平面;楼房的阳台。也指指计算机硬件或软件的操作环境。而在网络上所说的平台一般是指网站。那么你知道平台用英语怎么说吗?下面来学习一下吧。平台英语说法1:platform平台英语说法2:terrace平台英语说法3:flat roof…

面试题-- 什么是偏向锁

所谓的偏向,就是偏心,即锁会偏向于当前已经占有锁的线程 。 大部分情况是没有竞争的(某个同步块大多数情况都不会出现多线程同时竞争锁),所以可以通过偏向来提高性能。即在无竞争时,之前获得锁的线程再次获…

Ping, IPConfig, Format, Netstat, etc. Not Recognized as Commands

Can you use them when you point directly to them..> C:\Windows\System32\ping.exe 127.0.0.1? If so, you probably have a messed up PATH variable.> echo %PATH%Should have "C:\Windows\System32" in it, does it? 以上为google的结果,我…

Collections.min()和Collections.max()的使用

取集合中的最小值 Collections.min(); 取集合中的最大值 Collections.max(); public class TestCollectionMinMax {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(3);list.add(7);list.add(9);list.add(1);list.add(…

java date 过时_过时date.toLocaleString()的解决方法

过时date.toLocaleString()的解决方法 Java代码 收藏代码 System.out.println(new java.util.Date()); 输出&#xff1a;Thu Jan 27 14:43:28 CST 2011 Java代码 收藏代码 System.out.println(new java.util.Date().toLocaleString()); 输出&#xff1a;2011-1-27 14:45:…

linux下查看隐藏的文件

在linux下以点开头命名的文件在系统中视为隐藏文件&#xff0c;例如 “.123 ”。用ls、ls -l或者ll是无法查看的。那么如何才能查看linux系统下的隐藏文件呢&#xff1f;下面介绍一下简单的查看方式。1、#在命令行下使用ls -a2、#在XWindow的KDE桌面中在"查看(View)"…

python学习之路(九)

这一节主要讲的是装饰器。装饰器是一个非常好用的&#xff0c;用于装饰已有函数的函数功能。 其优点是不用修改调用方式&#xff0c;还不用修改源代码。 他的思想是&#xff1a;函数既变量&#xff1b;高阶函数&#xff1b;嵌套函数。 现在来尝试写装饰器 有两个函数 各自实现自…

java http请求实现_java工程实现http请求接口

java工程实现http请求接口java工程实现http请求接口1.实现代码package com.home;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import com.sun.net.https…

Java集合中removeIf的使用

使用removeIf方法从List中删除元素 在JDK1.8中&#xff0c;Collection以及其子类新加入了removeIf方法&#xff0c;作用是按照一定规则过滤集合中的元素。这里展示removeIf的用法。 需求是过滤掉学生中分数为为18以下的&#xff0c; 一个学生实体类 Data public class Studen…

Java中lombok @Builder注解使用详解

简介 Lombok大家都知道&#xff0c;在使用POJO过程中&#xff0c;它给我们带来了很多便利&#xff0c;省下大量写get、set方法、构造器、equal、toString方法的时间。除此之外&#xff0c;通过Builder注解&#xff0c;lombok还可以方便的实现建造者模式&#xff0c;创建对象 …

鼠标控制

一&#xff09;客户端 using System;using System.Net;using System.Net.Sockets;using System.Text;using System.IO;using System.Threading; namespace 鼠标控制_客户端{ //我们定义一个保存鼠标坐标的结构 public struct MousePosition { private int x; …

java resourcebundle_Java - Properties和ResourceBundle类学习

一、前言在项目的开发过程中&#xff0c;为了统一配置的管理&#xff0c;我们经常需要将一些配置信息根据环境的不同&#xff0c;配置在不同的properties中&#xff0c;然后从里面进行读取。而Properties类作为最基础也是最经常使用的类&#xff0c;通过本文我们来学习一下它的…

Java中Collections.singletonList用法

Collections.singletonList()返回的是不可变的集合&#xff0c;但是这个长度的集合只有1&#xff0c;可以减少内存空间。但是返回的值依然是Collections的内部实现类&#xff0c;同样没有add的方法&#xff0c;调用add&#xff0c;set方法会报错 调用add方法报错 Exception in…

最近找工作的面试经历

来到广州已经一个星期了&#xff0c;招聘会参加了两场&#xff0c;面试了三间公司&#xff0c;但都是通知回去等结果。回想一下这几天的面试经历&#xff0c;感觉自己要学的东西还很多。 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office&quo…

CF Round410 D. Mike and distribution

D. Mike and distribution 构造法 798D - Mike and distribution In the beginning, its quite easy to notice that the condition " 2(ap1  ...  apk) is greater than the sum of all elements in A " is equivalent to " ap1  ...  apk is greater …

OOAD实践之路——真实案例解析OO理论与实践(二、第一项任务:特性列表)

查看本系列全部文章&#xff1a;《OOA&D实践之路——真实案例解析OO理论与实践》索引贴 第一份说明 当这个项目开始时&#xff0c;我们得到的关于我们要做的系统的唯一说明是一页Word文档&#xff0c;这是一份简单的不能再简单的说明。文档里只有一行字&#xff1a;我…

CSS3常用属性及用法

1.transition: 过渡属性&#xff0c;可以替代flash和javascript的效果 兼容性&#xff1a;Internet Explorer 9 以及更早的版本&#xff0c;不支持 transition 属性。 Chrome 25 以及更早的版本&#xff0c;需要前缀 -webkit-。 Safari 需要前缀 -webkit-。 div { transition: …

ADSL提速 从入门到精通

虽然现在的宽带速率已经很快了&#xff0c;但是大家还是希望在以下方面提升一下应用速度&#xff1a;电影BT下载时、在线影音播放时、FTP文件传送时等。广大网友也因此探寻出不少提升宽带速率的方法&#xff0c;那么&#xff0c;都有哪些简单可行的提速方法呢&#xff1f;它们的…