« 上一篇下一篇 »

如何对SQL Server 2008产生的日志文件进行清空操作(瞬间缩小日志到几M)

   如果数据库日志增长被设置为“无限制”,那么时间一长日志文件必然会很大,一个50G的数据库居然有70G的LOG文件,严重占用了磁盘空间。由于主要是做OLAP,所以数据库本身不会有大变动,所以日志也就没有多少作用了,因此想办法把数据库日志文件收缩到很小或者删除。

  网上搜索相关解决方案后,得到的答案眼花缭乱,但是真正管用的方案并不多,这里分享一个csdn上找到的方法。这个方法讲述了SQL Server 2005和SQL Server 2008在收缩数据库日志的不同之处,颇有帮助。同时,该方法的效率很高,收缩70G的日志到30M只花了不到一分钟。

  sql 在使用中每次查询都会生成日志,但是如果你长久不去清理,可能整个硬都堆满哦,笔者就遇到这样的情况,直接网站后台都进不去了,今天到数据库中一看又竟然达到了19G的日志文件,下面我们一起来学习一下如何清理这个日志吧

SQL2008清空删除日志:

方法及代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
USE [master]
GO
ALTER DATABASE AFMS SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE AFMS SET RECOVERY SIMPLE
GO
USE AFMS
GO
DBCC SHRINKFILE (N'AFMS_Log' , 11, TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE AFMS SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE AFMS SET RECOVERY FULL
GO

'在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
'这里的DNName_Log 如果不知道在sys.database_files里是什么名字的话,可以用以下注释的语句进行查询
'USE DNName
'GO
'SELECT file_id, nameFROM sys.database_files;
'GO
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL --还原为完全模式
GO

SQL2005清空删除日志:

1
2
3
4
5
6
7
Backup Log DNName with no_log '这里的DNName是你要收缩的数据库名,自己注意修改下面的数据库名,我就不再注释了。
go
dump transaction DNName with no_log
go
USE DNName
DBCC SHRINKFILE (2)
Go

sqlserver2000压缩日志

可以将shujuba.ldf文件变得很小,方便备份数据库等,在sqlserver查询分析器中执行即可。

1
2
3
DUMP TRANSACTION [jb51] WITH NO_LOG
BACKUP LOG [jb51] WITH NO_LOG
DBCC SHRINKDATABASE([jb51])

 

适用于SQL Server 2008的方法
USE [master]GOALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE DNName SET RECOVERY SIMPLE   --简单模式GOUSE DNName GODBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY)GOUSE [master]GOALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAITGOALTER DATABASE DNName SET RECOVERY FULL  --还原为完全模式GO说明:优点:此清除日志所运行消耗的时间短。缺点:不过此动作最好不要经常使用,因为它的运行会带来系统碎片。普通状态下LOG和DIFF的备份即可截断日志。此语句使用的恰当环境:当系统的日志文件异常增大或者备份LOG时间太长可能影响生产的情况下使用。