给你一个收缩日志文件的参考,自己举一反三: USE [数据库名] GO /****** 对象: StoredProcedure [dbo].[spDB_ShrinkFile] 脚本日期: 06/08/2008 17:33:20 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* ============================================= 作者:冉冉毅马 创建:2007年5月10日 15:22 描述:数据库维护之二:日志尺寸超限则收缩 注意:本存储过程仅适用于SQL Server 2005,SQL Server 2000使用以下语法: SELECT name FROM [sysfiles] WHERE status=1081410 AND size*8/1024>@maxSize 修改:2007年5月28日 04:51 =============================================*/ CREATE PROCEDURE [dbo].[spDB_ShrinkFile] ( @maxSize int, -- 日志文件尺寸上限(MB,默认50) @targetSize int -- 收缩后日志文件尺寸(MB,默认1) ) AS SET NOCOUNT ON; -- 设置“不返回计数”参数开(表示受 Transact-SQL 语句影响的行数)。 DECLARE @rnm int; SET @rnm=0; --被收缩的日志文件数,初始 IF @maxSize>@targetSize -- 仅当目标尺寸<=源尺寸时执行收缩 BEGIN --定义变量:日志文件名称 DECLARE @logName nvarchar(50); IF @maxSize IS NULL SET @maxSize=50; IF @targetSize IS NULL SET @targetSize=1; -- 游标:尺寸超限日志文件名称 DECLARE curLogName CURSOR FOR SELECT RTRIM(name) FROM sys.database_files WHERE type=1 AND state=0 AND size*8/1024>@maxSize OPEN curLogName FETCH NEXT FROM curLogName INTO @logName --日志文件名称 WHILE @@FETCH_STATUS = 0 BEGIN DBCC SHRINKFILE (@logName,@targetSize) WITH NO_INFOMSGS ; SET @rnm = @rnm+1; FETCH NEXT FROM curLogName INTO @logName END CLOSE curLogName DEALLOCATE curLogName END SET NOCOUNT OFF; -- 恢复“不返回计数”参数为关 RETURN @rnm;
关键是这句 DBCC SHRINKFILE database
DUMP TRANSACTION 库名 WITH NO_LOG 然后再收缩数据库
借代码看看,学习select rtime(name) from sys.database_files where type =1 and state=0 and size*8/1024>@maxsize DBCC shrinkfile(@logname,@targetsize) with no_infomsgs
USE [数据库名]
GO
/****** 对象: StoredProcedure [dbo].[spDB_ShrinkFile] 脚本日期: 06/08/2008 17:33:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/* =============================================
作者:冉冉毅马
创建:2007年5月10日 15:22
描述:数据库维护之二:日志尺寸超限则收缩
注意:本存储过程仅适用于SQL Server 2005,SQL Server 2000使用以下语法:
SELECT name FROM [sysfiles] WHERE status=1081410 AND size*8/1024>@maxSize
修改:2007年5月28日 04:51
=============================================*/
CREATE PROCEDURE [dbo].[spDB_ShrinkFile]
(
@maxSize int, -- 日志文件尺寸上限(MB,默认50)
@targetSize int -- 收缩后日志文件尺寸(MB,默认1)
)
AS
SET NOCOUNT ON; -- 设置“不返回计数”参数开(表示受 Transact-SQL 语句影响的行数)。
DECLARE @rnm int;
SET @rnm=0; --被收缩的日志文件数,初始
IF @maxSize>@targetSize -- 仅当目标尺寸<=源尺寸时执行收缩
BEGIN
--定义变量:日志文件名称
DECLARE @logName nvarchar(50);
IF @maxSize IS NULL SET @maxSize=50;
IF @targetSize IS NULL SET @targetSize=1; -- 游标:尺寸超限日志文件名称
DECLARE curLogName CURSOR FOR
SELECT RTRIM(name) FROM sys.database_files
WHERE type=1 AND state=0 AND size*8/1024>@maxSize
OPEN curLogName
FETCH NEXT FROM curLogName INTO @logName --日志文件名称
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC SHRINKFILE (@logName,@targetSize) WITH NO_INFOMSGS ;
SET @rnm = @rnm+1; FETCH NEXT FROM curLogName INTO @logName
END
CLOSE curLogName
DEALLOCATE curLogName
END
SET NOCOUNT OFF; -- 恢复“不返回计数”参数为关
RETURN @rnm;
DBCC SHRINKFILE database
DBCC shrinkfile(@logname,@targetsize) with no_infomsgs