SQLServer日志收缩的两种方法实现 |
本文标签:SQL 日志收缩 在日常运维中,有时会遇到“The transaction log for database ‘xxxx’ is full due to ‘ACTIVE_TRANSACTION’.”这样的报错信息 。 此错误消息表明:数据库的事务日志文件空间耗尽,log 文件不能再存储新的transaction log 。 这个时候我们需要进行日志收缩 。本文将介绍日志收缩的两种方法 。 通过图形界面进行日志收缩第一步:右键数据库属性 第二步:更改数据库恢复模式,将模式改为Simple 。 第三步:右键数据库,Tasks→Shrink→Files 。 第四步:收缩数据库日志,选择文件类型Log,并在Shrink action 中将文件收缩到给出的Minimum 值,这里的数据库因为是新建的没有数据,所以提供的Minimum 值为0MB,可以将红框3中的数字修改为0 。
Shrink action: 上述操作也可以使用T-SQL替代: DBCC ShrinkFile(‘数据库名', targetsize); /* 收缩数据库文件 */ DBCC ShrinkFile(‘数据库名_log', targetsize); /* 收缩日志文件 */ Targetsize:单位为兆,必须为整数,DBCC SHRINKFILE 尝试将文件收缩到指定大小 。 用本例中的数据库替换后如下: DBCC ShrinkFile(‘TEST01', 1); /* 收缩数据库文件 */ DBCC ShrinkFile(‘TEST01_log', 1); /* 收缩日志文件 */ 注意:如若磁盘空间已满,无法进行收缩数据库事务日志文件,可采取先分离出部分暂未使用的数据库,然后将MDF文件及LDF文件进行拷贝到其他空余盘,进行释放磁盘空间,待日志收缩后,再次将分离出的数据库文件进行附加 。 分离数据库操作如下: 右击数据库,Task→Detach 点击OK 此时发现数据库列表中已经没有TEST01,说明数据库分离成功了 。 附加数据库操作如下: 点击Add,添加数据库文件 选择需要添加的文件后点击OK 检查添加的文件无误后,点击OK 此时在数据库列表中可看到刚附件上去的数据库TEST01 若未显示TEST01,请刷新数据库列表 通过 Transact-Sql 进行日志收缩执行如下命令: USE [数据库名] GO ALTER DATABASE [数据库名] SET RECOVERY SIMPLE WITH NO_WAIT GO --设为简单模式 ALTER DATABASE [数据库名] SET RECOVERY SIMPLE GO USE [数据库名] GO DBCC SHRINKFILE (N'[log文件名]', [ targetsize], TRUNCATEONLY) GO USE [数据库名] GO ALTER DATABASE [数据库名] SET RECOVERY FULL WITH NO_WAIT GO --还原为完全模式 ALTER DATABASE [数据库名] SET RECOVERY FULL GO [数据库名]替换为具体数据库, [ targetsize]替换为收缩目标值 。 替换为本例中的数据库修改如下: USE TEST01 GO ALTER DATABASE TEST01 SET RECOVERY SIMPLE WITH NO_WAIT GO --设为简单模式 ALTER DATABASE TEST01 SET RECOVERY SIMPLE GO USE TEST01 GO DBCC SHRINKFILE (N'TEST01_log', 1, TRUNCATEONLY) GO USE TEST01 GO ALTER DATABASE TEST01 SET RECOVERY FULL WITH NO_WAIT GO --还原为完全模式 ALTER DATABASE TEST01 SET RECOVERY FULL GO 到此这篇关于SQLServer日志收缩方法实现的文章就介绍到这了,更多相关SQL 日志收缩内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |