SQL Server如何截断(Truncate)和收缩(Shrink)事务日志
当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)事务日志的更多相关文章
- sql server 完整备份、差异备份、事务日志备份
一. 理解: 完整备份为基础, 完整备份可以实物回滚还原,但是由于完整备份文件过大,对硬盘空间比较浪费这是就需要差异备份 或者 事务日志备份. 差异备份还原时,只能还原到备份的那个点, 日志备份还原时 ...
- 一张图解释SQL Server集群、镜像、复制、日志传送
一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.
- SQL Server Transaction Log Truncate && Shrink
目录 什么是事务日志 事务日志的组成 事务日志大小维护方法 Truncate Shrink 索引碎片 总结 什么是事务日志 Transaction log 是对数据库管理系统执行的一系列动作的记录 ...
- SQL Server delete、truncate、drop
在T-SQL中这三个命令符,相信很多朋友都不会陌生的,我自己在工作也会常常使用到它们,虽然我们清除的知道用这三个命令符可以达到怎样的预期效果. 但是却很少深入的去了解它们,知道它们有什么区别,又各有什 ...
- 收缩sqlserver事务日志
若要允许 DBCC SHRINKFILE 命令收缩文件,首先需要通过将数据库恢复模式设置为 SIMPLE 来截断该文件. 示例,收缩数据库abce的事务日志 USE abce; GO -- Trunc ...
- SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- sql server xml 截断
c#读取 sql生成的xml时,发生阶段. 加,type 解决
- SQL Server 2008以上误操作数据库恢复方法——日志尾部备份
原文出处:http://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的 ...
- 如何清除sql server日志
1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件-- ...
随机推荐
- Shell Scipt 命令行带参数,输出log
命令行带参数,以及字符串参数放到ssh命令里可以这么放: #!/bin/bash 这行保证运行bash可以这样: ./data.sh if [ $# != 4 ]; then echo ...
- Array.prototype.slice.call
Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组 ,::'age'}; Array.prototype.slice.call(arr); ...
- 深入理解HBase Memstore
2013/08/09 转发自http://www.cnblogs.com/shitouer/archive/2013/02/05/configuring-hbase-memstore-what-you ...
- 20160512关于mac安装caffe的记录
记得2015年在mac系统上安装过一次caffe,非常顺利,但是最近群里许多同学反映mac安装caffe出现了各种问题,同时我也在帮助别人安装caffe的时候也遇到了一些坑,不再像以前这么顺利了.估计 ...
- HD1049Climbing Worm
Problem Description An inch worm is at the bottom of a well n inches deep. It has enough energy to c ...
- RGPJS 教程之八 创造场景
开始画面 游戏画面 代码 <!DOCTYPE html> <html> <head> <script src="rpg-beta-2.js" ...
- POJ3185(简单BFS,主要做测试使用)
没事做水了一道POJ的简单BFS的题目 这道题的数据范围是20,所以状态总数就是(1<<20) 第一次提交使用STL的queue,并且是在队首判断是否达到终点,达到终点就退出,超时:(其实 ...
- jsp页面加载readyState的五种状态根据我们状态添加进度条
这段代码放在页面最下面 原文如下: document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法. function subSomet ...
- Odoo的Domain (一)
Odoo 的Domain:多个条件的列表. 条件:(字段名,操作符,值)三元式(列表或者元组) 字段名:当前模型的字段或者是通过点操作符访问的Many2one/Many2Many对象,当是Many2M ...
- 使用maphilight高亮显示map的指定area
引用jquery.maphilight.js之后,调用如下方法: //obj参数是代表一个或者多个area的jQuery对象 function areaLight(obj) { var data = ...