日志截断之后, 删除日志有几种方式,缺省是不释放空间给操作系统的
除非你指定释放给操作系统才会看到日志文件有变小;
----给一段参考吧,尽管很简单, 但是就是有人搞不对,所以有必要放在这里------
USE Pubs
GO
BACKUP LOG Pubs WITH NO_LOG
GO
DBCC SHRINKFILE (2, 20)
GO
---这会将Pubs数据库物理日志文件的大小将减小到20M,如果逻辑日志大于20M,或者虚拟日志处于活动状态的文件大于20M,将收缩到活动日志或者逻辑日志的大小。
除非你指定释放给操作系统才会看到日志文件有变小;
----给一段参考吧,尽管很简单, 但是就是有人搞不对,所以有必要放在这里------
USE Pubs
GO
BACKUP LOG Pubs WITH NO_LOG
GO
DBCC SHRINKFILE (2, 20)
GO
---这会将Pubs数据库物理日志文件的大小将减小到20M,如果逻辑日志大于20M,或者虚拟日志处于活动状态的文件大于20M,将收缩到活动日志或者逻辑日志的大小。
MSSQL 2005 日志收缩
----日志收缩
declare @name varchar(25)
declare @sql varchar(1000)
declare @logid int
DECLARE sysdatabase_name cursor for select /*top 5 部分处理*/ name from master.dbo.sysdatabases
open sysdatabase_name
FETCH NEXT FROM sysdatabase_name into @name
WHILE @@FETCH_STATUS = 0
BEGIN
if ( @name not in ('xxx')) --不需要进行日志收缩
begin
set @sql =' declare @logid int
use ' + @name+'
select @logid = fileid from sysfiles where right(rtrim(filename),3) = ''ldf''
BACKUP LOG ' + @name+' WITH NO_LOG --切断日志
DBCC SHRINKFILE (@logid) '
exec(@sql)
end
FETCH NEXT FROM sysdatabase_name into @name
END
CLOSE sysdatabase_name
DEALLOCATE sysdatabase_name
declare @name varchar(25)
declare @sql varchar(1000)
declare @logid int
DECLARE sysdatabase_name cursor for select /*top 5 部分处理*/ name from master.dbo.sysdatabases
open sysdatabase_name
FETCH NEXT FROM sysdatabase_name into @name
WHILE @@FETCH_STATUS = 0
BEGIN
if ( @name not in ('xxx')) --不需要进行日志收缩
begin
set @sql =' declare @logid int
use ' + @name+'
select @logid = fileid from sysfiles where right(rtrim(filename),3) = ''ldf''
BACKUP LOG ' + @name+' WITH NO_LOG --切断日志
DBCC SHRINKFILE (@logid) '
exec(@sql)
end
FETCH NEXT FROM sysdatabase_name into @name
END
CLOSE sysdatabase_name
DEALLOCATE sysdatabase_name
我公司的生产管理系统,数据库用的是MS SQL,有一次晚上数据升级后,数据库的log变成了10几G,这么大的日志确实有点吓人,害的备份也增加了,且日志大小不减。google了一下,参考了一些网友的方法,找到了解决办法,如下:
1、打开sql server management studio.
2、服务器名上右键->Nnew Query。
3、输入DUMP TRANSACTION 数据库名 WITH NO_LOG,再点击执行按钮执行。
(DUMP TRANSACTION msc2003_rfid_zh WITH NO_LOG)
4、数据库名右键->task->shrink-》file。
选择日志文件,在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数。