SQL Server为啥日志文件越来越大
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server为啥日志文件越来越大相关的知识,希望对你有一定的参考价值。
SQL Server中日志主要用于下面三个部分:事务回滚(Rollback)
事务前滚(Roll Forward)
帮助数据冗余(利用事务日志进行备份,搭建冗余系统,在SQL Server中指的是镜像、事务日志传送、复制、AlwaysOn等技术,或者其他第三方利用SQL Server日志同步数据的技术)
SQL Server还提供了两种恢复模式:简单模式和完整模式
简单模式指的是日志被不在被当前未结束事务需要后,就可以回收重复利用。
完整模式指的是日志被不在被当前未结束事务需要后,就可以留着等待将这部分日志归档(日志备份)
而楼主使用的是简单恢复模式,不存在忘记备份日志导致日志越来越大的问题。因此可能造成日志越来越大的原因主要是:
1.当前存在活动日志,这个可以使用DBCC OPENTRAN命令查看是否有当前活动日志导致日志无法截断。
2.当前库用于复制,因为日志需要被复制的Log Reader进程读取,在读取之前日志是无法被清理掉的,原因可以通过sys.databases的log_resue_wait列查看到原因。
3.日志之前曾经因为大的操作暴涨,忘记收缩,尝试直接收缩一下日志。 参考技术A SQL Server中日志主要用于下面三个部分:
事务回滚(Rollback)
事务前滚(Roll Forward)
帮助数据冗余(利用事务日志进行备份,搭建冗余系统,在SQL Server中指的是镜像、事务日志传送、复制、AlwaysOn等技术,或者其他第三方利用SQL Server日志同步数据的技术)
SQL Server还提供了两种恢复模式:简单模式和完整模式
简单模式指的是日志被不在被当前未结束事务需要后,就可以回收重复利用。
完整模式指的是日志被不在被当前未结束事务需要后,就可以留着等待将这部分日志归档(日志备份)
而楼主使用的是简单恢复模式,不存在忘记备份日志导致日志越来越大的问题。因此可能造成日志越来越大的原因主要是:
1.当前存在活动日志,这个可以使用DBCC OPENTRAN命令查看是否有当前活动日志导致日志无法截断。
2.当前库用于复制,因为日志需要被复制的Log Reader进程读取,在读取之前日志是无法被清理掉的,原因可以通过sys.databases的log_resue_wait列查看到原因。
3.日志之前曾经因为大的操作暴涨,忘记收缩,尝试直接收缩一下日志。
SQL Server 2008 收缩日志 清空删除大日志文件
SQL2008 的收缩日志 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消: (SQL2005) BackupLog DNName with no_log go dump transaction DNName with no_log go USE DNName DBCC SHRINKFILE (2) Go -------------------------------------------------------------- (SQL2008): 在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式。 方案一:完全命令模式 USE[master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY SIMPLE --简单模式 GO USE DNName GO DBCC SHRINKFILE (N‘DNName_Log‘ , 11, TRUNCATEONLY) GO USE[master] GO ALTER DATABASE DNName SET RECOVERY FULLWITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY FULL --还原为完全模式 GO
以上是关于SQL Server为啥日志文件越来越大的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 收缩日志 清空删除大日志文件