当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的。你只要确保每个数据库都有正确的备份。当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时。这系列文章会告诉你每个DBA应该知道的具体细节。


这个标题近乎是用词不当,因为很大程度上,运行在简单模式里不需要日志管理。在简单模式里,事务日志的唯一目的是在数据库恢复操作期间,保证事务的ACID属性,还有强制数据库的一致性和事务的持久性。事务日志不能被备份,不能用来数据库恢复,也不能用作日志传输。

在简单模式里工作

所有事务还是被记录,尽管特定大容量操作是最小化日志;实际上,日志级别和大容量日志里的应用非常类似。日志的活动部分还是照常维护,因此任何时候数据库在简单模式里启动后,恢复进程会进入,数据文件会用事务日志内容调和。

但是,在简单模式里,所有的虚拟日志文件(VLF)被标记为如第2篇里的不活动(可恢复),在定期的数据库检查点期间会自动截断。这就是说,当检查点发生时,文件里任何最高LSN小于最低LSN的VLF都会被截断,结果在事务文件里的空间会定期和经常重用。

简单恢复模式里的数据库总会是自动截断模式。如第3篇里描述的,所有的用户数据库,在第一次完整备份进行前,实际上是自动截断模式。

检查点多少时间发生一次?

为了恢复数据库到恢复区间(recovery interval)服务器配置选项指定时间里,基于需要处理的日志记录数,SQL Server引擎决定多少时间进行一次检查点。如果你的数据库是只读的,检查点之间的时间可能会很长。但是,在业务上频繁更新的系统,检查点会近每一分钟发生一次。点击https://msdn.microsoft.com/zh-cn/library/ms189573.aspx查看详细介绍。

正如上一篇文章讨论的,完整恢复模式里,事务日志维护“不活动的历史或关闭的事务”,连同活动/打开的事务。这个”历史“可以在日志备份里捕获,用来还原数据库到先前的一个时间点。但是,在简单模式里,这个历史不存在因此日志不能用来还原数据库到先前的一个时间点。事实上,在简单恢复模式里,你甚至不能进行事务日志备份,如下代码所演示。

  USE master;
ALTER DATABASE TestDB
SET RECOVERY SIMPLE;
BACKUP Log TestDB
TO DISK ='C:\BACKUP\TestDB_log.bak'
GO

这表示你的备份计划只能在完整和差异备份计划里执行。

简单模式的支持与反对

简单模式的缺点,肯定是你丢失数据的机率会很高,因为你只能恢复数据库到最近的完整或差异备份。刚才提到过,如果丢失数据是以分钟衡量,不是以小时衡量,不要使用简单模式。

但是,如果你运行的是开发或测试数据库,或者甚至是一个只读的生产数据库,那么使用简单模式可能是一个可行的,甚至是一个明智的选择,这会大大减轻数据库上的维护负担。备份的存储空间会更少,后续的恢复操作会更简单。此外,因为事务日志是自动截断的,你很少有日志增长失控的风险,引起9002错误。

尽管简单模式明显减轻了事务日志管理的负担,这样认为是错误的。如果你使用这个模式,你会完全忘记日志维护。事务日志在数据库的日常操作中还是扮演着重要角色,你还是需要正确调整事务日志的大小和增长,根据数据库受到的事务本质和频率。不是因为日志是自动截断的,这不表示健壮和长时间运行的事务不会导致日志快速增长,如果你没有正确调整大小,还是会给你带来麻烦——这个会在第7篇-第8篇详细介绍。

SQL Server中的事务日志管理(4/9):简单恢复模式里的日志管理的更多相关文章

  1. SQL Server中的事务日志管理(7/9):处理日志过度增长

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  2. SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  3. SQL Server中的事务日志管理(5/9):完整恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  4. SQL Server中的事务日志管理(3/9):事务日志,备份与恢复

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  5. 第17周翻译:SQL Server中的事务日志管理的阶梯:第5级:在完全恢复模式下管理日志

    来源:http://www.sqlservercentral.com/articles/Stairway+Series/73785/ 作者:Tony Davis, 2012/01/27 翻译:刘琼滨. ...

  6. 第16周翻译:SQL Server中的事务日志管理,级别3:事务日志、备份和恢复

    源自: http://www.sqlservercentral.com/articles/Stairway+Series/73779/ 作者: Tony Davis, 2011/09/07 翻译:刘琼 ...

  7. SQL Server中的事务日志管理的阶梯,级别1:事务日志概述

    SQL Server中的事务日志管理的阶梯,级别1:事务日志概述 翻译:刘琼滨 谢雪妮 许雅莉 赖慧芳 级别1:事务日志概述 事务日志是一个文件,其中SQL服务器存储了所有与日志文件关联的数据库执行的 ...

  8. 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色

    简介 在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性.并不承担具体的恢复数据的角色.正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.在 ...

  9. 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

随机推荐

  1. Beego源码分析(转)

    摘要 beego 是 @astaxie 开发的重量级Go语言Web框架.它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点.并且beego在国内企业用户较多,社区发达和Q群,文档齐全, ...

  2. 【1】CommonCode快速代码集

    阅读目录 CommonCode是什么? CommonCode包括哪些内容? 版本信息   回到顶部 CommonCode是什么? 简单的说,CommonCode是作者在经历各种"试错&quo ...

  3. The main difference between Java & C++(转载)

    转载自:http://stackoverflow.com/questions/9192309/the-main-difference-between-java-c C++ supports point ...

  4. 【Android】wifi开发

    WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点 ...

  5. td 自动换行

    Two solutions for cell width:1. Omit words: <td style="width:60px;"><div style=&q ...

  6. 曲率已驱动了头发——深度分析谷歌AlphaGo击败职业棋手

    这篇是我们自开设星际随笔以来写得最长的一篇.我们也花了不少力气.包括把那5盘棋各打了两遍的谱,包括从Nature官网上把那篇谷歌的报告花了200元下载下来研究它的算法(后来发现谷 歌网站上可以免费下载 ...

  7. 八卦一下黄晓明和Angelababy的电话号码

    最新一期20150605的<奔跑吧兄弟>真是太搞笑了,邓超被大家整的... 但这一期有个细节引起了我的注意,就是Angelababy在现场打电话给黄晓明,而拨键声音十分清晰.一些拥有“绝对 ...

  8. CoreData多线程安全

    CoreData中的NSManagedObjectContext在多线程中不安全,如果想要多线程访问CoreData的话,最好的方法是一个线程一个NSManagedObjectContext, ,每个 ...

  9. Centos 7防火墙firewalld开放80端口

    开启80端口 1.firewall-cmd --zone=public --add-port=80/tcp --permanent  出现success表明添加成功 命令含义: --zone #作用域 ...

  10. webpack 打包时到底如何组织js

    问题一:引入前端库,方法也是不一样的 比如 lodash.js ,作为一个 chunk 用 html-webpack-plugin 打包到页面里,会生成一个全局变量 window._ ,在其它 js ...