当SQL Server截断事务日志时,它仅仅是在虚拟日志文件中做个标记,以便不再使用它,然后准备以重用形式来做备份(假如运载在完整或是批量日志恢复模型)。也就是说,在使用简单恢复模型时,事务日志包括如下的日志记录:

checkpoint发生时,虚拟日志文件1、2不再被使用,因为事务1、2已经被提交了,而且日志记录也不再需要回滚了。然后SQL Server重用虚拟日志文件1、2,如下图:

这就是我们所熟知的事务日志截断。基本上,事务日志的活动区间已经被截断了,但是事务日志的物理大小不会改变,除非数据库使用自动收缩的属性设置。在这种情况下,事务日志就会尽可能的在物理上进行周期性的收缩。

为了物理上减小事务日志的大小,收缩事务日志作为已知的方法,你在使用时可以选择下面选项中的一种:

  • 执行 DBCC SHRINKDATABASE命令
  • 执行 DBCC SHRINKFILE命令
  • 设置数据库的事务日志自动收缩选项

需要注意的是,事务日志仅仅能收缩到虚拟日志文件的边界。下面是个例子。

我新建了一个数据库,它有1MB的事务日志空间,5MB的自动增长空间。运行DBCC LOGINFO显示如下:

这里有四个可变大小的虚拟日志文件。然后我输入一些数据,这会使事务日志 增长到5MB:

在新的5MB事务日志区间里面新建了4个新的虚拟日志文件。每一个新建的虚拟日志文件都是1310720bytes,每7个虚拟日志文件正在使用时(状态是2)。我现在备份事务日志,因此将会截断事务日志:

目前仅仅有一个虚拟日志文件在使用(第7行,状态为2). 假如我现在用下面的命令,试着把日志收缩到2M:

DBCC SHRINKFILE ('AdventureWorks_log', 2)

因为活动日志记录是虚拟日志文件7,所以SQL Server仅仅删除虚拟日志文件8。这次事务日志从7MB收缩到4.7MB. SQL Server也在事务日志中新建了假的入口,为了移除2MB点之前的最近活动日志记录,以便于它包裹到虚拟日志文件2(注意状态为2的行)。

假如现在再次备份事务日志的话,事务日志会再次被截断,现在活动区间就是虚拟日志文件2了。

如果我现在再尝试一次收缩文件的话,SQL Server则会成功的收缩到2MB左右,因为日志的活动区间已经接近2MB了。文件被收缩到最接近于日志登记时的大小。这时DBCC LOGINFO的输出如下:

事务日志文件大小为2359296bytes(虚拟日志文件大小总量要加上8192字节的头信息)

所以如果你发现你不能收缩事务日志到一个指定的范围,运行DBCC LOGINFO,然后检查虚拟日志文件的范围,弄清楚每一个日志的大小,你能把文件收缩到什么范围。

SQL Server如何截断(Truncate)和收缩(Shrink)事务日志的更多相关文章

  1. sql server 完整备份、差异备份、事务日志备份

    一. 理解: 完整备份为基础, 完整备份可以实物回滚还原,但是由于完整备份文件过大,对硬盘空间比较浪费这是就需要差异备份 或者 事务日志备份. 差异备份还原时,只能还原到备份的那个点, 日志备份还原时 ...

  2. 一张图解释SQL Server集群、镜像、复制、日志传送

    一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.

  3. SQL Server Transaction Log Truncate && Shrink

    目录 什么是事务日志 事务日志的组成 事务日志大小维护方法 Truncate Shrink 索引碎片 总结 什么是事务日志 Transaction log   是对数据库管理系统执行的一系列动作的记录 ...

  4. SQL Server delete、truncate、drop

    在T-SQL中这三个命令符,相信很多朋友都不会陌生的,我自己在工作也会常常使用到它们,虽然我们清除的知道用这三个命令符可以达到怎样的预期效果. 但是却很少深入的去了解它们,知道它们有什么区别,又各有什 ...

  5. 收缩sqlserver事务日志

    若要允许 DBCC SHRINKFILE 命令收缩文件,首先需要通过将数据库恢复模式设置为 SIMPLE 来截断该文件. 示例,收缩数据库abce的事务日志 USE abce; GO -- Trunc ...

  6. SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  7. sql server xml 截断

    c#读取 sql生成的xml时,发生阶段. 加,type 解决

  8. SQL Server 2008以上误操作数据库恢复方法——日志尾部备份

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的 ...

  9. 如何清除sql server日志

    1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件-- ...

随机推荐

  1. Python 以指定概率获取元素

    这是Python cookbook的示例 1 def random_pick(some_list,probabilities): 2 x=random.uniform(0,1) 3 cumulativ ...

  2. 2013年19个最棒的HTML5网站模板免费下载

    上次我们整理了14个HTML5奉献给大家下载了,今天我再给大家整理了19个2013最新的HTML5模板供有需要的朋友下载使用,它们涉及不同的行业的模板需求,支持手机设备,十分精美! 1. Affini ...

  3. asp.net mvc下ckeditor使用

    资源下载:ckeditor 第一步,引入必须文件“~/ckeditor/ckeditor.js” 第二步,替换文本域 <%: Html.TextArea("Content", ...

  4. NSRangeFromString 测试

    官网文档 Returns a range from a textual representation. Declaration SWIFT func NSRangeFromString(_ aStri ...

  5. Hadoop 1.1.2 Eclipse 插件使用——异常解决

    permission denied user 1.修改配置文件在conf/hdfs-site.xml文件中添加如下内容: <property> <name>dfs.permis ...

  6. E2202 Required package 'VclJPG' not found

    xe8 [dcc32 Fatal Error] RaizeComponentsVcl_Design.dpk(40): E2202 Required package 'VclJPG' not found ...

  7. RESTful服务的版本管理经验 (转)

    原文:RESTful服务的版本管理经验 最近,Howard Dierking将在设计NuGet API的下一个主要修订版(v3)时新学到的经验,与他在大约一年前的观念做了对比,并写道:使用服务器驱动的 ...

  8. uber优步提高成单率,轻松拿奖励!

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. ZOJ 3810 Pretty Poem 分类: ACM 2015-05-17 14:40 83人阅读 评论(0) 收藏

    Pretty Poem Time Limit: 2 Seconds     Memory Limit:65536 KB Poetry is a form of literature that uses ...

  10. hdu 5510 Bazinga

    http://acm.hdu.edu.cn/showproblem.php?pid=5510 Problem Description: Ladies and gentlemen, please sit ...