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 (NDNName_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错误日志如何优化自动删除

为SQL Server数据库清空日志并收缩数据库

sql server 2008 r2 日志文件过大怎么清除

SQL Server 2008 收缩日志 清空删除大日志文件

SQL Server 2008 收缩日志 清空删除大日志文件

SQL SERVER 2000数据库日志文件过大如何解决