热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL日志收缩及截断方法详解

本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCCSHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。

 如果从来没有从事务日志中删除日志记录,逻辑日志就会一直增长,直到填满容纳物理日志文件的磁盘上的所有可用空间。在某个即时点,必须删除恢复或还原数据库时不再需要的旧日志记录,以便为新日志记录腾出空间。
可通过以下语句解决:
   BACKUP LOG tablename WITH NO_LOG
   DBCC SHRINKFILE(Filename|FileID)

一、截断事务日志BACKUP LOG tablename WITH NO_LOG

    删除日志记录以减小逻辑日志的大小的过程称为截断日志

    1、永远不能截断事务日志的活动部分。
   
日志的活动部分是在任何时间恢复数据库所需的日志部分,因此必须有回滚所有未完成的事务所需的日志映像。
   
这部分必须始终在数据库中,因为一旦服务器发生故障,在服务器重新启动时必须用它恢复数据库。

    2、日志活动部分起点处的记录由最小恢复日志序号 (MinLSN) 标识。
   
当截断事务日志时,删除包含 MinLSN 的虚拟日志文件头之前的所有日志记录。

    3、截断不减小物理日志文件的大小,但减小逻辑日志文件的大小。

    4MinLSN的确定:
   
这是有两个活动事务的事务日志末端的简化版本。检查点记录已压缩成单个记录。

    SQL日志收缩
    LSN 148
是事务日志内的最后一条记录。在执行处理 LSN 147 时所记录的检查点时,Tran 1
   
已经提交而且 Tran 2 是唯一的活动事务。这就使 Tran 2 的第一条日志记录成为最后一个检
   
查点上的活动事务的最旧日志记录。这使 LSN 142Tran 2 的开始事务记录)成为 MinLSN

二、收缩事务日志DBCC SHRINKFILE(Filename|FileID)

    1、日志收缩操作依赖于最初的日志截断操作。
    2
、日志截断操作不减小物理日志文件的大小,但减小逻辑日志的大小,并将没有容纳逻辑日志任何部
    3
、分的虚拟日志标记为不活动。
   
日志收缩操作会删除足够多的不活动虚拟日志,将日志文件减小到要求的大小。

DBCC SHRINKFILE
收缩相关数据库的指定数据文件或日志文件大小。

语法
DBCC SHRINKFILE
    ( { file_name | file_id }
        { [ , target_size ]
            | [ , { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY } ]
        }
    )

参数
file_name
是已收缩文件的逻辑名称。若要获得文件name,可通过在当前数据库中搜索sysfiles得到name

file_id
是要收缩的文件的标识 (ID) 号。若要获得文件ID,请使用 FILE_ID 函数或在当前数据库
中搜索 sysfiles

target_size
是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,DBCC SHRINKFILE
将文件大小减少到默认文件大小。
DBCC SHRINKFILE
不会将文件收缩到小于存储文件中的数据所需要的大小。

EMPTYFILE
将所有数据从指定文件中迁移到同一文件组中的其它文件。该选项允许使用 ALTER DATABASE
语句除去文件。

NOTRUNCATE
导致将释放的文件空间保留在文件中。
当与 target_size 一起指定 NOTRUNCATE 时,释放的空间不会释放给操作系统
DBCC SHRINKFILE
的唯一影响是将已使用的页从 target_size 行上面重新定位到文件的前面。
当未指定 NOTRUNCATE 时,所有释放的文件空间返回给操作系统。

TRUNCATEONLY
导致文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次分配的大小,
从而减少文件大小,而不移动任何数据。
不尝试将行重新定位到未分配页。如果使用 TRUNCATEONLY,将忽略 target_size

------------------------------------------------------------------------------
如下语句把table替换一下就好了

use {tabale}

--先执行如下语句:{tabale}为需要缩减的数据库
BACKUP LOG {tabale} WITH NO_LOG

declare  @fileid int

--查询日志文件对应的fileid
select @fileid=fileid from sysfiles where [name] like '%log%'

--缩减日志文件,{fileid}为刚才查询出来的日志文件对应的fileid号
DBCC SHRINKFILE(@fileid)

一、截断事务日志BACKUP LOG tablename WITH NO_LOG

    删除日志记录以减小逻辑日志的大小的过程称为截断日志

    1、永远不能截断事务日志的活动部分。
   
日志的活动部分是在任何时间恢复数据库所需的日志部分,因此必须有回滚所有未完成的事务所需的日志映像。
   
这部分必须始终在数据库中,因为一旦服务器发生故障,在服务器重新启动时必须用它恢复数据库。

    2、日志活动部分起点处的记录由最小恢复日志序号 (MinLSN) 标识。
   
当截断事务日志时,删除包含 MinLSN 的虚拟日志文件头之前的所有日志记录。

    3、截断不减小物理日志文件的大小,但减小逻辑日志文件的大小。

    4MinLSN的确定:
   
这是有两个活动事务的事务日志末端的简化版本。检查点记录已压缩成单个记录。

    SQL日志收缩
    LSN 148
是事务日志内的最后一条记录。在执行处理 LSN 147 时所记录的检查点时,Tran 1
   
已经提交而且 Tran 2 是唯一的活动事务。这就使 Tran 2 的第一条日志记录成为最后一个检
   
查点上的活动事务的最旧日志记录。这使 LSN 142Tran 2 的开始事务记录)成为 MinLSN

二、收缩事务日志DBCC SHRINKFILE(Filename|FileID)

    1、日志收缩操作依赖于最初的日志截断操作。
    2
、日志截断操作不减小物理日志文件的大小,但减小逻辑日志的大小,并将没有容纳逻辑日志任何部
    3
、分的虚拟日志标记为不活动。
   
日志收缩操作会删除足够多的不活动虚拟日志,将日志文件减小到要求的大小。

DBCC SHRINKFILE
收缩相关数据库的指定数据文件或日志文件大小。

语法
DBCC SHRINKFILE
    ( { file_name | file_id }
        { [ , target_size ]
            | [ , { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY } ]
        }
    )

参数
file_name
是已收缩文件的逻辑名称。若要获得文件name,可通过在当前数据库中搜索sysfiles得到name

file_id
是要收缩的文件的标识 (ID) 号。若要获得文件ID,请使用 FILE_ID 函数或在当前数据库
中搜索 sysfiles

target_size
是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,DBCC SHRINKFILE
将文件大小减少到默认文件大小。
DBCC SHRINKFILE
不会将文件收缩到小于存储文件中的数据所需要的大小。

EMPTYFILE
将所有数据从指定文件中迁移到同一文件组中的其它文件。该选项允许使用 ALTER DATABASE
语句除去文件。

NOTRUNCATE
导致将释放的文件空间保留在文件中。
当与 target_size 一起指定 NOTRUNCATE 时,释放的空间不会释放给操作系统
DBCC SHRINKFILE
的唯一影响是将已使用的页从 target_size 行上面重新定位到文件的前面。
当未指定 NOTRUNCATE 时,所有释放的文件空间返回给操作系统。

TRUNCATEONLY
导致文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次分配的大小,
从而减少文件大小,而不移动任何数据。
不尝试将行重新定位到未分配页。如果使用 TRUNCATEONLY,将忽略 target_size

------------------------------------------------------------------------------
如下语句把table替换一下就好了

use {tabale}

--先执行如下语句:{tabale}为需要缩减的数据库
BACKUP LOG {tabale} WITH NO_LOG

declare  @fileid int

--查询日志文件对应的fileid
select @fileid=fileid from sysfiles where [name] like '%log%'

--缩减日志文件,{fileid}为刚才查询出来的日志文件对应的fileid号
DBCC SHRINKFILE(@fileid)


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Elasticsearch1Elasticsearch入门1.1Elasticsearch术语1.1.16.0以前的Elasticsearch术语1.1.26.0以后的Elasti ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
author-avatar
xinzhugedonny
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有