zoukankan      html  css  js  c++  java
  • 【转】日志文件的截断与收缩

     

    日志文件的截断与收缩


    一.虚拟日志文件
    数据库的日志文件被分成多个虚拟日志文件(VLF)。一个VLF可以是下面4种状态之一:
    1.活动 日志的活动部分以MinLSN为起点,代表一个活动(未提交)事务。日志的活动部分以最后写入的LSN为终点。任何包含有活动日志任意部分的VLF都被认为是活动的VLF。
    2.可恢复 最老的事务之前的日志部分的唯一作用是保持一系列的日志备份,以便能够还原数据库到先前某一状态。
    3.可复用 如果事务日志备份没有得到保持(见下面的日志的自动截断),或者我们已经备份了日志(见下面的日志备份),那么最老活动事务之前的VLF将不再有任何作用并且可以被重新使用。截断或者备份事务日志会改变VLF可恢复状态到可复用状态。
    4.未用 如果没有足够的会被日志记载的活动发生,或者之前的VLF已经被标记为可复用并且已经被复用,那么日志文件结尾的一个或多个VLF也许还未被使用。

    使用dbcc loginfo命令查看VLF时,状态值为0表示可复用或未用;状态值为2表示活动或可恢复。日志截断后不包含任何活动日志记录的VLF,其状态值从2变成0。

    二.日志的自动截断
    在下面这些情况下,日志会自动截断:
    1.系统日志恢复模型为简单
    2.创建数据库以来从未进行过完全备份。
    3.曾经使用BACKUP LOG WITH NO_LOG / TRUNCATE_ONLY

    当发生检查点时,会将MinLSN(最小恢复LSN)之前的所有日志记录截断。所谓MinLSN是指下面三者中的最小值:
    1.最后一个检查点的LSN
    2.最老的一个事务的LSN。

    3.尚未传递给分发数据库的最早的复制事务起点的 LSN。

    检查点可以是自动执行命令CHECKPOINT。也可以是系统扫面,当系统发现日志比较大,以至于下次启动时重做时间需要超过恢复间隔(recovery interval)就会自动执行检查点动作。

    三.日志备份
    如果进行过完全备份,并且恢复模型为完全恢复或者大日志恢复,则必须进行日志备份才会截断日志。
    备份日志时,首先生成一个检查点,然后将所有日志备份,最后将MinLSN之前的所有日志截断。只有日志备份会截断日志,数据备份不会截断日志的。

    四.日志疯长
    在实际操作中,常常有一些数据库的日志文件会疯长,疯长的原因有多种,但是下面两种是最常见的。
    1.事务不提交。我们知道日志MinLSN是检查点和最老事务的最小者。若一个事务一致不提交(可以通过命令dbcc opentran查看),那么MinLSN就一直是这个事务,因此它之后的日志总是截断不了,于是随着时间的推移,日志文件会原来越大。

    2.没有定期备份日志。在非简单模式下,必须维护好备份计划,定期备份日志记录。因为这种情况下,只有备份日志才会截断日志。

    五.收缩
    在保证一个基础大小的前提下,将不活动的VLF删除。

    本文转自  http://blog.csdn.net/misterliwei/article/details/5881393

  • 相关阅读:
    jquery下拉菜单打开的同时,同行右边的图标变化
    echarts引入及应用
    好用又美观的时间控件
    C#不支持此安全协议
    python re模块中的函数
    python中的收集参数
    python常用操作符
    python 字符串中常用的内置函数
    VS2012停止工作解决办法
    Jqurey图片放大镜插件
  • 原文地址:https://www.cnblogs.com/gates/p/5099218.html
Copyright © 2011-2022 走看看