简介

在数据库数据文件因各种原因发生损坏时,如果日志文件没有损坏。可以通过备份结尾日志(Tail of log)使得数据库可以恢复到灾难发生时的状态。

例如:

上图中。在DB_1中做了完整备份,在Log_1,Log_2处做了日志备份。在Log_2备份之后不久,发生了故障。从Log_2备份到灾难发生时之间的日志。就是结尾日志(Tail of log)。如果不能备份尾端日志,则数据库只能恢复到Log_2备份的点。尾端日志期间所做的改动全部丢失。更详细的概念可以查看我之前关于日志的博文。

下面我们分别来看在SQL Server实例运行良好和SQL Server实例崩溃状态下,备份结尾日志方法。

SQL Server实例运行正常时,结尾日志的备份

下面来模拟一次灾难下结尾日志的备份:

现在数据库TestBackUp有了一个完整备份和一个日志备份,而最后那条”日志备份后的测试数据”是在上次日志备份之后的,被结尾日志所包含。

接下来模拟数据库文件所在磁盘损坏(日志文件完好)

1.停掉Server SQL服务

2.删除数据库文件(MDF文件)

此时在SSMS中访问数据库TestBackUp会出现不可用:

此时,因为SQL Server实例可用,通过在T-SQL语句指定NO_TRUNCATE选项(必须指定,否则无法备份尾端日志),备份尾端日志:

依次进行完整备份恢复,和两次事务日志恢复,可以看到数据已经成功恢复到灾难点:

当SQL Server实例崩溃时,结尾日志的备份

此时由于各种原因,所处的SQL Server实例也崩溃,无法通过T-SQL来备份结尾日志。此时数据库文件损坏,而事务日志文件保持正确。

假设情况和上面例子一样,此时我手里有一个完整备份(TestBackUp_FULL.bak)和一个日志备份(TestBackUp_log1.bak),还有一个日志文件(ldf)。

这时我将这几个文件拷贝到其他拥有SQL Server实例的机器上。

新建一个和原数据库名一样的数据库。设置为脱机:

删除新建数据库的MDF文件。

将需要备份的数据库的日志文件替换掉原有的LDF文件。

此时直接备份结尾日志,成功:

原有Sql server实例恢复后一次恢复完整备份和两个日志备份。成功恢复到灾难发生点。

总结

我相信看到这篇文章的人都不希望碰到用到上面两种方法的情况。但是,墨菲定律(事情如果有变坏的可能,无论这种可能性有多小,它总会发生)是残酷的,事先练习一下总是比真正遇到情况用生产数据练习惬意的多:-)

转载于:https://www.cnblogs.com/CareySon/archive/2012/02/23/2365006.html

SQL Server中灾难时备份结尾日志(Tail of log)的两种方法相关推荐

  1. windows系统中,在当前目录下打开cmd命令行的两种方法

    windows系统中,在当前目录下打开cmd命令行的两种方法 1.在当前路径地址栏中直接输入'cmd',然后回车. 2.在当前路径下,按住'shift'键同时点击鼠标右键,点击"在此处打开P ...

  2. aws rds 加密_AWS RDS SQL Server中的加密备份和还原

    aws rds 加密 ol li p{ font-size: 14px; color: #252525; } ol li p{ font-size: 14px; color: #252525; } I ...

  3. SQL Server中查询时显示行号的方法

    如何在SQL中对行进行动态编号,加行号这个问题,在数据库查询中,是经典的问题. 方法整理如下: 代码基于pubs样板数据库 在SQL中,一般就这两种方法. 1.使用临时表 可以使用select int ...

  4. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他(看了两次了,转了)

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  5. 在Activity中响应ListView内部按钮的点击事件的两种方法

    转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...

  6. 内容 超链接_excel中如何设置目录与返回目录超链接?这两种方法很简单

    在excel操作中,我们可以按下Ctrl+K快捷键使用超链接功能,包括链接到网页.文件.工作表.单元格等.但是如果同一个工作簿中有很多工作表,那么该如何设置目录,并且通过超链接的功能实现目录与工作表之 ...

  7. 关于 access 中如何使用 vba语言 判断表是否存在的两种方法

    方法一: 通过循环,判断目标表是否存在 Function searchTable(TableName As String) As BooleansearchTable = False '默认不存在Di ...

  8. C语言中的选择法排序怎么,请问高手们 C语言中选择法排序和冒泡法排序的思想,两种方法有何不同,搞不懂,请举例详细说明一下.谢谢。...

    满意答案 yl6485 2013.04.01 采纳率:48%    等级:12 已帮助:6958人 不同点:冒泡法是顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换: 而选择法, ...

  9. 查询表中最高分的学生的学号和课程号(两种方法)

    查询最高分 方法一 SELECT SNO,CNO FROM SCORE WHERE SCORE=(SELECT MAX(SCORE) FROM SCORE); 方法二 SELECT SNO,CNO F ...

最新文章

  1. writelines是python对文件的写操作方法_Python File writelines() 方法
  2. POI 导出excel带小数点的数字格式显示不对解决方法
  3. IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream...
  4. 爱奇艺视频如何联系客服?爱奇艺联系客服攻略
  5. SpringBoot异常处理以及对数据正确性的检查
  6. 14Linux远程登录And15Linux远程文件传输
  7. linux内核数据结构实现--链表、队列和哈希
  8. 上海计算机短期培训,上海日语短期培训速成班
  9. C语言基础and进阶——猜拳游戏(6个版本)
  10. 施努卡:机器视觉公司排名(机器人视觉系统)
  11. ubuntu20.04离线安装python2.7.17
  12. uni-app 学习: 页面高度设置100%
  13. 计算机二级只有上机考试吗,计算机等级考试二级是上机考试吗
  14. OLTP+OLAP->HTAP
  15. python画八卦图的指令_如何绘制八卦图?CorelDRAW快速绘制太极八卦图形
  16. dataframe日期按周、按月、按季度聚合
  17. 7. Java不可变集合和Stream流
  18. 二代测序之SNV基础知识笔记总结
  19. 这可能是你见过的最全的网络爬虫干货总结!
  20. vim环境设置(如:自动对齐)以及在vim中直接修改只读文件

热门文章

  1. 2022-2028年中国企业核心路由交换机行业市场前瞻与投资分析报告
  2. 2022-2028年中国PPS树脂产业研究及前瞻分析报告
  3. TF.VARIABLE和TENSOR的区别(转)
  4. Java集合详解之Map
  5. LeetCode简单题之两个相同字符之间的最长子字符串
  6. Hexo集成Algolia实现搜索功能
  7. Auto ML自动特征工程
  8. CentOS7系统下bower 命令权限问题
  9. Django 模板4.1
  10. android DrawerLayout 改变系统默认的灰色