博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
阅读量:7040 次
发布时间:2019-06-28

本文共 1195 字,大约阅读时间需要 3 分钟。

简介
   
    在数据库数据文件因各种原因发生损坏时,如果日志文件没有损坏。可以通过备份结尾日志(Tail of log)使得数据库可以恢复到灾难发生时的状态。
    例如:
     grid.ai
     上图中。在DB_1中做了完整备份,在Log_1,Log_2处做了日志备份。在Log_2备份之后不久,发生了故障。从Log_2备份到灾难发生时之间的日志。就是结尾日志(Tail of log)。如果不能备份尾端日志,则数据库只能恢复到Log_2备份的点。尾端日志期间所做的改动全部丢失。更详细的概念可以查看我之前关于日志的博文。
     下面我们分别来看在SQL Server实例运行良好和SQL Server实例崩溃状态下,备份结尾日志方法。
SQL Server实例运行正常时,结尾日志的备份
    下面来模拟一次灾难下结尾日志的备份:
    1
    现在数据库TestBackUp有了一个完整备份和一个日志备份,而最后那条”日志备份后的测试数据”是在上次日志备份之后的,被结尾日志所包含。
    接下来模拟数据库文件所在磁盘损坏(日志文件完好)
    1.停掉Server SQL服务
    2.删除数据库文件(MDF文件)
   
     此时在SSMS中访问数据库TestBackUp会出现不可用:
     2
     此时,因为SQL Server实例可用,通过在T-SQL语句指定NO_TRUNCATE选项(必须指定,否则无法备份尾端日志),备份尾端日志:
    3
     依次进行完整备份恢复,和两次事务日志恢复,可以看到数据已经成功恢复到灾难点:
    4
 
当SQL Server实例崩溃时,结尾日志的备份
    此时由于各种原因,所处的SQL Server实例也崩溃,无法通过T-SQL来备份结尾日志。此时数据库文件损坏,而事务日志文件保持正确。
    假设情况和上面例子一样,此时我手里有一个完整备份(TestBackUp_FULL.bak)和一个日志备份(TestBackUp_log1.bak),还有一个日志文件(ldf)。
    这时我将这几个文件拷贝到其他拥有SQL Server实例的机器上。
    新建一个和原数据库名一样的数据库。设置为脱机:
    5
    删除新建数据库的MDF文件。
    将需要备份的数据库的日志文件替换掉原有的LDF文件。
    此时直接备份结尾日志,成功:
    6
    原有Sql server实例恢复后一次恢复完整备份和两个日志备份。成功恢复到灾难发生点。
 
总结
    我相信看到这篇文章的人都不希望碰到用到上面两种方法的情况。但是,墨菲定律(事情如果有变坏的可能,无论这种可能性有多小,它总会发生)是残酷的,事先练习一下总是比真正遇到情况用生产数据练习惬意的多:-)
分类: SQL Server 日志
本文转自CareySon博客园博客,原文链接:http://www.cnblogs.com/CareySon/archive/2012/02/23/2365006.html,如需转载请自行联系原作者
你可能感兴趣的文章
大数据的商业化:从数据、模型到业务逻辑
查看>>
Junit在MyEclipse上怎么用?
查看>>
能测试知多少--系统计数器与硬件分析
查看>>
颠覆传统 移动CRM成企业应用热点
查看>>
适合应用RFID的六大领域介绍
查看>>
《Web测试囧事》——2.6 时区不一致造成邮件发送异常
查看>>
需求管理是需求开发的基础
查看>>
干货:模板网站SEO优化技巧!
查看>>
CB Insights:2017年Q1网络安全领域共实现140宗投资
查看>>
安捷伦2016 Q2收入较去年增长6% 调升全年收入指导范围
查看>>
最新 Chrome 可让本地文件在网页应用中打开
查看>>
《Python地理空间分析指南(第2版)》——1.10 GIS中矢量数据的基本概念
查看>>
MySQL自动化运维工具 Inception
查看>>
QGraphicsItem如何使用信号/槽
查看>>
《计算机科学导论》一第2章
查看>>
分布式列式数据库 IndexR 开源啦!
查看>>
微软被评为全球第二大影响力公司
查看>>
《Web前端工程师修炼之道(原书第4版)》——我需要学习哪些语言
查看>>
《计算机视觉:模型、学习和推理》——3.5 一元正态分布
查看>>
Uncode-DAL 1.0.18 发布,Java 通用数据访问层
查看>>