sqlserver数据库的日志文件其实是由很多个逻辑上的日志文件组成,我们可以通过命令看一下数据库日志文件

​可以看到的是sqlserver数据库日志文件是由很多文件组成的,当数据库日志文件已满的时候,自动增长就会生成新的文件,这些文件叫做VLF(虚拟日志文件),所以说在这个层面上来说,我们可以简单的把数据库日志理解为一列火车,一节一节的车厢理解为数据库的虚拟日志文件,当然如果不够存的下事务日志的时候,就要扩充,就是加一个火车厢.

所以说数据库事务日志其实是由很多个独立的虚拟事务日志文件组成的,我们看一下,大概就知道数据库的虚拟日志文件有自己的状态,也有自己的LSN标识.那在数据库的层面是怎么管理这些数据库日志文件呢.

​看一下LSN的作用

1:就是LSN用来标识VLF的序列号

2:LSN标识日志在VLF文件中的具体位置

我们分析一下数据库日志的逻辑管理​

我们简单的理解数据库日志是有两种状态的,活动日志和非活动日志(虽然日志有四种状态,但是我们理解这两种状态应该就足够了),活动日志的头部和尾部的标记就是头日志和尾日志,中间部分就是数据库活动日志,其实这个图还是不太直观的,因为数据库日志管理的话,更像一个圆形的管理,是可以达到连续管理的,当数据库头日志到达数据的尾部时候,如果第一个日志文件是可用的,事务日志则不会自动增长,而是去占用第一个数据库的VLF,这一点是很重要的,我们可以看一下,数据库的头日志是不断的往前走而尾日志什么时候才能改变位置呢.

如果想要改变尾日志的位置,只有活动日志减少,活动日志减少就意味着数据库日志的截断,所以说,每次发生数据库事务日志截断的时候尾日志才会向后推移.

数据库日志文件有一个状态,status,大家细心观察一下就会发现,其实有0,2两种状态,0就是代表空闲,2代表使用.

千万不要小看这个状态,对于收缩数据库日志文件来说,这个状态是很重要的

日志文件能被收缩的原因是该文件尾部的数据被清除了,使得该部分空间被释放,而不是逃过尾部去删除文件首部或者中间部分的内容。

sqlserver数据库的收缩是从最后一个数据库日志文件开始进行压缩的,所以说只有当最后一个VLF的状态为0的时候,DBCC SHRINKFILE才能发挥作用,否则收缩数据库日志文件是不会有效果的.

收缩事务日志(sqlserver)的更多相关文章

  1. MSSQL收缩事务日志&日志文件过大无法收缩

    原文:MSSQL收缩事务日志&日志文件过大无法收缩 一.MS SQL SERVER 2005 --1.清空日志 exec('DUMP TRANSACTION 数据库名 WITH NO_LOG' ...

  2. sql server 2012 如何收缩事务日志

    sql2008不再支持 BACKUP LOG 数据库名 WITH NO_LOG   语句 BACKUP Log zxta with no_log 截断事务日志 sql2008 提示错误如下 BACKU ...

  3. SQL Server 收缩事务日志的方法

    由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005) Backup Log DataBaseName with no_ ...

  4. (转)对SQLSERVER数据库事务日志的疑问

    本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/06/10/3130856.html 对SQLSERVER数据库事务日志的疑问 摸不透SQLS ...

  5. SQLSERVER备份事务日志的作用

    事务日志备份有以下3种类型 (1)纯日志备份:仅包含相隔一段时间的事务日志记录,而不包含任何大容量更改 (2)大容量操作日志备份.包括由大容量操作更改的日志和数据页,不支持时间点恢复 (3)尾日志备份 ...

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

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

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

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

  8. MS SQL 事务日志管理小结

    本文是对SQL Server事务日志的总结,文章有一些内容和知识来源于官方文档或一些技术博客,本文对引用部分的出处都有标注.   事务日志介绍 在SQL Server中,事务日志是数据库的重要组件,如 ...

  9. sqlserver 事务日志过大 收缩方法解决方案

    sqlserver 事务日志过大,可能会导致备份失败或者数据库出现异常,所以要定期清除sqlserver 事务日志 建议:为了防止日志文件无限扩大,可以对日志文件作一些限制. 清除sqlserver事 ...

随机推荐

  1. C++_代码重用3-私有继承

    使用包含:易于理解,类声明中包含表示被包含类的显式命名对象,代码可以通过名称引用这些对象: 使用继承:将使关系更抽象,且继承会引起很多问题,尤其是从多个基类继承时. 私有继承所提供的特性确实比包含多. ...

  2. myeclipse启动后,卡在loading workbench界面

    今天在修改svn的配置文件的时候,电脑重启了几次,然后myeclipse启动的时候就一直卡在loading workbeach动不了了. 重启了几次也不行,后来查的百度,找到的解决方法如下: 找到my ...

  3. 1152 Google Recruitment (20 分)

    In July 2004, Google posted on a giant billboard along Highway 101 in Silicon Valley (shown in the p ...

  4. 1076 Wifi密码 (15 分)

    下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同学们自己作答,每两日一 ...

  5. 我所理解的session_set_save_handler的执行顺序机制

    默认的session handler启动顺序 <?php ini_set('session.gc_maxlifetime',10); ini_set('session.gc_probabilit ...

  6. Oracle "set define off" 关闭替代变量功能

    set define off关闭替代变量功能 在SQL*Plus中默认的"&"表示替代变量,也就是说,只要在命令中出现该符号,SQL*Plus就会要你输入替代值.这就意味着 ...

  7. (转)Openldap相关精品文章

    1.运维咖啡吧 https://mp.weixin.qq.com/s__biz=MzU5MDY1MzcyOQ==&mid=2247483754&idx=1&sn=9f20d45 ...

  8. Rsa2加密报错java.security.spec.InvalidKeySpecException的解决办法

    最近在和支付宝支付做个对接,Java项目中用到了RSA2进行加解密,在加密过程中遇到了错误: java.security.spec.InvalidKeySpecException: java.secu ...

  9. AutoFac之 Named and Keyed 方式注入

    AutoFac是.net framework下一个高效的ioc容器,传说中的效率最快(我偷偷看了几篇测试博文,确实这个容器的效率遥遥领先). 好了废话不多说,AutoFac的使用方式请看:http:/ ...

  10. Android应用程序组件之间的通信Intent和IntentFilter

    Android应用程序的基本组件,这些基本组建除了Content Provider之外,几乎全部都是依靠Intent对象来激活和通信的. 下面介绍Intent类,并通过例子来说明Intent一般用法 ...