题目
清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
清空日志:
DUMP TRANSACTION 库名 WITH NO_LOG
DBCC SHRINKFILE( 日志文件名,新的大小数值型如1)
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE WebRoot -- 要操作的数据库名
SELECT @LogicalFileName = WebRoot_log, -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 100 -- 你想设定的日志文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT Original Size of + db_name() + LOG is +
CONVERT(VARCHAR(30),@OriginalSize) + 8K pages or +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + MB
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = BACKUP LOG + db_name() + WITH TRUNCATE_ONLY
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES (Fill Log)
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT Final Size of + db_name() + LOG is +
CONVERT(VARCHAR(30),size) + 8K pages or +
CONVERT(VARCHAR(30),(size*8/1024)) + MB
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
清空日志
DUMP TRANSACTION @DataBaseName WITH NO_LOG
DBCC SHRINKFILE( @LogoFileName,@NewSize)
--假设test2为数据库名称 日志已经很大的时候用
方法一此方法适用于7.0和2000。
1、在查询分析器中执行: exec sp_detach_db DB_Name,true
2、在我的电脑中将日志的物理文件xxx_Log.LDF改名。
3、在查询分析器中执行: exec sp_attach_single_file_db DB_Name,C:\Program Files\Microsoft SQL Server\MSSQL\Data\DB_Name.MDF
4、如果上一步成功,将步骤2中改名后的文件删除。如果上一步不成功,改回原来的文件名,用sp_attach_db将数据库附加到服务器,然后用方法二。
方法二
6.X中 DUMP TRANSACTION test2 with NO_LOG DUMP TRANSACTION test2 with TRUNCATE_ONLY 将上面的语句多次执行,直到日志缩小。7.0和2000中 backup log test2 with NO_LOG backup log test2 with TRUNCATE_ONLY DBCC SHRINKDATABASE(test2) 将上面的语句多次执行,直到日志文件缩小。上面的方法治标不治本,标本兼治要用下面的方法。
方法三:
--6.X和7.0中改为日志处于截断模式,2000中恢复模型改为简单恢复 exec sp_dboption test2,trunc. log on chkpt.,on --7.0和2000中设为自动收缩,6.x中不用执行。 exec sp_dboption test2,autoshrink,on 通常用于测试环境。
方法四: --7.0中改为日志不处于截断模式,2000中恢复模型改为完全恢复 exec sp_dboption test2,trunc. log on chkpt.,off --7.0和2000中设为自动收缩,6.x中不用执行。 exec sp_dboption test2,autoshrink,on 建立作业,每半个小时一次日志备份,每天一次完全数据库备份。 7.0和2000中:在Log收缩到正常大小后,将autoshrink选项设置为off。通常用于真实环境。 在产品化系统中将autoshrink选项设置为开启状态并非明智之举,这是因为,当您的系统正在忙于完成其它任务时,autoshrink选项可能会同时启动,从而降低系统运行速度。然而,对于那些数据库管理员无暇估计并且数据库尺寸有可能在您毫无察觉的情况下超出控制范围的桌面或远程系统来说,开启这一选项却是一种非常有效的措施。 收缩事务日志 在下列情况下,日志文件的物理大小将减少:
*执行 DBCC SHRINKDATABASE 语句时。
*执行引用日志文件的 DBCC SHRINKFILE 语句时。
*自动收缩操作发生时。 日志收缩操作依赖于最初的日志截断操作。日志截断操作不减小物理日志文件的大小,但减小逻辑日志的大小,并将没有容纳逻辑日志任何部分的虚拟日志标记为不活动。日志收缩操作会删除足够多的不活动虚拟日志,将日志文件减小到要求的大小。 按下面任一方式控制事务日志的大小:
*在维护日志备份序列时,调度 BACKUP LOG 语句按间隔发生,以使事务日志不致增长到超过预期的大小。
*当不维护日志备份序列时,指定简单恢复模式。 详情请参考 MS SQL Server 2000 联机丛书: 目录--> SQL Server构架-->数据库构架-->物理数据库构架-->事务日志构架-->收缩事务日志 目录--> SQL Server构架-->数据库构架-->物理数据库构架-->事务日志构架-->截断事务日志
或者你可以用管理->数据库维护计划来做
选择数据库->从数据库文件中删除未使用的空间
当数据库的大小超过n MB 时收缩数据库 保留 10 % 的数据空间作为可用空间,这样可以调度执行,不需要手工操作了
按照一下步骤:
1. EXEC sp_detach_db @dbname = pubs
2. 删除pubs_log.ldf
3. EXEC sp_attach_single_file_db @dbname = pubs,
@physname = c:\mssql7\data\pubs.mdf
john1219(john) 的方法不是很好,要离线,又危险,还是先作备份的好