SQL Server如何截断(Truncate)和收缩(Shrink)事务日志

原文:http://blog.csdn.net/tjvictor/article/details/5253931

?

当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,然后检查虚拟日志文件的范围,弄清楚每一个日志的大小,你能把文件收缩到什么范围。

?
?

本文翻译自sqlbackuprestore,更多精彩内容请浏览http://www.sqlbackuprestore.com

SQL Server如何截断(Truncate)和收缩(Shrink)事务日志

时间: 2024-11-19 11:03:49

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

【转】SQL Server如何截断(Truncate)和收缩(Shrink)事务日志

SQL Server如何截断(Truncate)和收缩(Shrink)事务日志分类: SQL Server数据库备份还原2010-01-25 14:321708人阅读评论(4)举报 当SQL Server截断事务日志时,它仅仅是在虚拟日志文件中做个标记,以便不再使用它,然后准备以重用形式来做备份(假如运载在完整或是批量日志恢复模型).也就是说,在使用简单恢复模型时,事务日志包括如下的日志记录: 当checkpoint发生时,虚拟日志文件1.2不再被使用,因为事务1.2已经被提交了,而且日志记录也

SQL Server :完整备份,差异备份或事务日志备份,尾部日志备份

事故背景: 突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到2点40之间的数据恢复呢?这就需要通过备份尾部日志进行恢复了. 环境描述: 某公司装了一台SQL Server数据库,为了保证数据库能够在出现故障时及时的修复,管理员做了备份操作,比如说完整备份+差异备份或者完整备份+事务日志备份,而且备份的时间是每隔6个小时做一次完整备份,在每天的1点.6点.12点.18点,6个小时之内是每隔1个小时做一次差异备份事务日志备份,并且和计划任务结合在了一起. 假如现

SQL Server Transaction Log Truncate && Shrink

目录 什么是事务日志 事务日志的组成 事务日志大小维护方法 Truncate Shrink 索引碎片 总结 什么是事务日志 Transaction log   是对数据库管理系统执行的一系列动作的记录,并利用这些记录来保证在遭遇硬件故障,灾难情况下ACID的可用性.从物理上来说,事务日志就是一个记录对数据库更新操作的文件. 事务日志的组成 SQL Server 数据库引擎在内部将每个物理文件分为多个虚拟日志文件.虚拟日志文件没有固定大小和固定数量,这两个值是由数据库引擎动态决定的. 事务日志是一

如何清除sql server日志

1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了. 清除Log有两种方法: 1.自动清除法 开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log.此方法的优点是无须人工干预,由SQL Server自动执行,并且一般

转 一篇关于sql server 三种恢复模式的文章,从sql server 的机制上来写的,感觉很不错,转了

简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点.当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要.但是,一旦SQL SERVER发生崩溃时,了解事务日志的原理和概念对于快速做出正确的决策来恢复数据显得尤为重要.

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

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点.当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要.但是,一旦SQL SERVER发生崩

为什么你SQL Server的数据库文件的Date modified没有变化呢?

原文:为什么你SQL Server的数据库文件的Date modified没有变化呢? 在SQL Server数据库中,数据文件与事务日志文件的修改日期(Date Modified)是会变化的,但是有时候你会发现你的数据文件或日志文件的修改日期(Date Modified)几个月甚至是半年以上都没有变化了,如下截图所示: 为什么呢?不会是什么bug吧? 相信很多人都会有这样的反应.下面我们通过实验来看看数据库的数据文件与事务日志文件在什么情况或条件下, 修改日期(Date Modified)才会

SQL server数据库的备份和还原

SQL server的备份有如下三种:1.完整备份:完整备份包括对整个数据库.部分事务日志.数据库结构和文件结构的备份.它代表的是备份完成时刻的数据库.是所有备份类型的基础. 2.差异备份:是指对上一次完整备份之后所有更改的数据做备份,备份过程能够识别出数据库中哪一部分被修改了,并只对这一部分做备份. 差异备份的优势是速度快,备份数据库所需要的时间很少,但差异备份要求事先已经执行过一次完整备份. 3.事务日志备份:记录了数据库的所有改变,在备份事务日志时,需要考虑以下因素: 在执行了至少一次完整

SQL Server的权限管理和数据恢复

一.SQL Server权限设置 SQL Server与其他服务器不同,通常保存着运营.开发.市场等重要数据,其中大量数据还涉及机密.因此掌握SQL Server的权限设置是DBA必备的关键技能. 1.SQL Server的安全机制 SQL Server的安全性是建立在认证和访问许可两种安全机制之上的.其中,认证是用来确定登录SQL Server的用户的登录账号和密码是否正确,以此来验证其是否具有连接SQL Server的权限:访问许可用来授予用户或组能够在数据库中执行哪些操作,如创建表.查询数