SQL Server 数据恢复到指点时间点(完整恢复)

SQL Server 数据恢复到指点时间点(完整恢复)

说到数据库恢复,其实我们一般最常见的有两种,一种就是简单恢复,通过备份的bak文件直接恢复数据库,缺点就是有可能数据丢失。另外一种就是通过备份的数据+事务日志还原数据。但是后者还原的话我们需要保证事务日志的完整性。我们今天就主要介绍的是第二种,所有的操作过程我们使用的是SSMS进行操作的。

注:使用第二种方法还原数据的时候需要注意的问题:1、要准备好之前的完整备份的数据,2、备份全新的事务日志。3、通过完整备份的数据进行完整还原。4、通过备份的全新的事务日志进行指定时间点的数据还原。

我们首先创建一个测试数据库---DB2,然后创建一个表info

定义字段信息

我们插入数据

select * from info
insert into info(idcode,age)values('zs',18)
insert into info(idcode,age)values('ls',20)
insert into info(idcode,age)values('gwl',27)

接下来我们备份数据,备份路劲D:\DB_BACKUP

右击数据库---任务--备份

备份类型:完整。

备份路劲:D:\db_backup\db2.bak

备份完成

备份完成的文件

成功备份后,我们增加几条数据,然后删除几条数据(我们需要注意时间点,方便后面的操作)

此时就当是我们误操作结果;误操作后,我们正常还原了就可以了

需要注意的是,输入的写入和删除有可能是不同的用户进行操作的,所以
通过还原肯定是数据丢失了,所以我们通过完全备份恢复完成后,还需要通过log进行还原。

当前时间时21:32

我们插入了几条数据

select * from info
insert into info(idcode,age)values('xll',118)
insert into info(idcode,age)values('wc',210)
insert into info(idcode,age)values('lc',127)

我们在过几分钟进行数据删除--删除2两条测试数据

当前时间为:

接下来我们删除两条数据

select * from info
delete info where idcode = 'ls'
delete info where idcode = 'gwl'

此时我们发现数据有异常所以需要通过备份进行还原。但是我们的备份之后,做了一些数据的插入,如果用之前备份的恢复的话,数据肯定有丢失,所以我们还需要借助日志进行还原。

所以我们需要通过完整备份进行恢复,然后通过log进行恢复,然后恢复到指定的时间点。

在恢复完整备份之前,我们需要进行一次全新的事务日志备份。

其实备份事务日志的目录是为了将其写入截断,保证数据的完整性

数据库---右击--任务---备份---备份类型--事务日志

备份成功后

此时我们需要通过完整备份进行还原以下数据

数据库---任务---还原--数据库

选择设备---浏览备份的数据库文件

记住,我们一定要在选项中选择 norecovery   
恢复状态:RESTORE
WITH NORECOVERY

开始还原提示以下信息:

我们也可以使用以下脚本进行还原

USE [master]
BACKUP LOG [DB2] TO DISK = N'D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\DB2_LogBackup_2017-03-19_22-40-40.bak' WITH NOFORMAT, NOINIT, NAME = N'DB2_LogBackup_2017-03-19_22-40-40', NOSKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 5
RESTORE DATABASE [DB2] FROM DISK = N'D:\DB_BACKUP\DB2.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5
GO

出现以上问题,我们有两种解决方法

1、还原数据库时,点击选择页上的选项,勾选覆盖现有数据库(WITH
REPLACE),点确定后即可成功还原数据库(推荐此方法)。

2、进行还原操作时,点击选择页上的选项,勾选保持源数据库处于正在还原状态(BACKUP LOG WITH
NORECOVERY),即可解决问题。

我们选择第二种方法可以正常恢复成功

此时我们查看到数据库一直再提示---正在还原中,该现象为正常的。

接下来我们要通过事务日志进行数据还原。

数据库---任务---还原---事务日志

浏览到保存的事务日志文件—DB2.trn

然后我们需要选择删除数据的日期及时间:我们上面记载了删除数据的日期及时间 21:36

此时是恢复数据的主要关键地方。

确认的时间点信息

我们此时需要单击选项菜单:

恢复状态:回滚未提交的事务,使用数据库处理可以使用的状态。无法还原其他事务日志(RESTORE WITH
RECOVERY)

我们也可以通过脚本进行数据还原。

RESTORE LOG [DB2] FROM DISK = N'D:\DB_BACKUP\DB.trn' WITH FILE = 1, NOUNLOAD, STATS = 10, STOPAT = N'2017-03-19T21:36:01'
GO

还原成功后,数据库状态显示正常

接下来我们查看数据,恢复正常了;

©著作权归作者所有:来自51CTO博客作者高文龙的原创作品,谢绝转载,否则将追究法律责任

SQL Server 数据恢复到指点时间点(完整恢复)的更多相关文章

  1. SQL Server数据恢复准备之TRUNCATE TABLE理解

    SQL Server数据恢复准备之TRUNCATE TABLE理解 转自:https://blog.51cto.com/aimax/2142553 易语随风去关注0人评论6717人阅读2018-07- ...

  2. SQL Server 2008对日期时间类型的改进

    微软在备受多年的争议后,终于对日期时间数据类型开刀了,在新版的SQL Server 2008中一口气增加了4种新的日期时间数据类型,包括: Date:一个纯的日期数据类型. Time:一个纯的时间数据 ...

  3. 【MSSQL】SQL Server的日期和时间类型

    参考:SQL Server的日期和时间类型 SQL Server使用 Date 表示日期,time表示时间,使用datetime和datetime2表示日期和时间. 1.秒的精度 秒的精度是指TSQL ...

  4. SQL SERVER 提供了一些时间函数:

    SQL SERVER 提供了一些时间函数:取当前时间:select getdate()取前一个月的时间:SELECT DATEADD(MONTH,-1,GETDATE()) 月份减一个月取年份:SEL ...

  5. 【转帖】SQL Server 各版本发布时间和开发代号

    SQL Server 各版本发布时间和开发代号 2019年01月23日 11:07:44 努力挣钱娶媳妇的苗同学 阅读数 278 https://blog.csdn.net/weixin_446098 ...

  6. SQL Server的日期和时间类型

    Sql Server使用 Date 表示日期,time表示时间,使用datetime和datetime2表示日期和时间. 1,秒的精度是指使用多少位小数表示秒 DateTime数据类型秒的精度是3,D ...

  7. SQL Server取系统当前时间【转】

    getdate //获得系统当前日期 datepart //获取日期指定部分(年月日时分表) getdate()函数:取得系统当前的日期和时间.返回值为datetime类型的. 用法:getdate( ...

  8. SQL Server数据恢复——日志备份

    太坑了,我把数据给删了 “大坑啊,数据被我误删了.”从事数据库相关工作的过程中,我想应该很多人会有过和我一样的遭遇吧?尤其是在进行update或者delete操作的时候,忘记了where条件.这些毁灭 ...

  9. SQL Server(2000,2005,2008):恢复/回滚时间比预期长(译)

    我已经讨论了各种确定恢复状态的方法,但是本周我参与了一个围绕回滚的有趣讨论.交易已经运行了14个小时,然后发出了KILL SPID.SPID进入回滚,并发生2天和4小时. 自然的问题是为什么不14小时 ...

随机推荐

  1. Andrew NG 机器学习编程作业4 Octave

    问题描述:利用BP神经网络对识别阿拉伯数字(0-9) 训练数据集(training set)如下:一共有5000个训练实例(training instance),每个训练实例是一个400维特征的列向量 ...

  2. mvc EF框架中,加载外键对象序列化对象时报错 序列化类型为XX的对象时检测到循环引用

    Newtonsoft.Json.dll 或者通过->工具->库程序包管理工具->NuGet管理包->联机 输入Newtonsoft或者json.net Newtonsoft.J ...

  3. Docker 容器启动 查看容器状态 - 四

    1.容器两种方式进行启动 一种是基于创建一个容器并启动 docker create docker start 另一种 使用 run 创建自动启动:是状态下的停止 启动 docker start ngi ...

  4. pyqt5-QWidget坐标系统和大小

    获取坐标和尺寸: 坐标的获取视频教程:https://v.qq.com/x/page/t085892mzh9.html  x()    y()   返回控件的坐标 相对于父控件的坐标(窗口框架左上角) ...

  5. visual studio code运行时报错,无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,Cannot find module 'webpack'

    前言 因公司技术需求,这段时间成功进入了Vue 2.0 的坑,刚用起Visual Studio Code,却发现问题很多,发现一个错误:cnpm : 无法将“cnpm”项识别为 cmdlet.函数.脚 ...

  6. Django学习手册 - 权限管理(一)

    权限管理原理: 不同角色拥有不同的角色权限,所以能否访问的页面也就不相同. 通过控制URL使用户访问到不同的URL,从而达到权限控制的目的. 设计权限数据库 权限管理 from django.db i ...

  7. 20165234 《Java程序设计》第五周学习总结

    第五周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类 内部类:在一个类中定义另一个类. 外嵌类:包含内部类的类,称为内部类的外嵌类. 内部类的类体中不能声明类变量和类方法.外嵌类的类体中可 ...

  8. SQL Server - GO

    GO GO是批处理的标志,是一条或多条SQL语句的集合,SQL Server将批处理语句编译成一个可执行单元,此单元称为执行计划. GO语句把程序分成一个个代码块,即使一个代码块执行错误,它后面的代码 ...

  9. 使用new data计算时间以及格式转换

    1.时间计算,往后加30(默认一个月的时间),sxTime表示的是在当前时间往后加几天的之后一个月 function maxDate1(){ var nowDate = new Date(); max ...

  10. 使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页

    使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页 方法1:linux下使用awk命令 # cat access1.log | awk '{print $1" &q ...