如何在不首先备份的情况下缩小日志文件



我有一个SQL Server 2008数据库,其中.mdf文件为1 GB,.ldf文件(日志)为70 GB。我真的不知道是什么让我的日志文件在一周内变得如此之大,并停止增加,但我的主要问题是解决这个问题。

我习惯于减少日志文件的收缩,但只有先备份才能收缩。如果我尝试在不首先备份的情况下收缩(使用SSMS),则不会发生任何事情,即使SSMS显示可用可用空间很大。我可以多次尝试收缩,但只有先备份才能奏效。

问题是我这次无法备份,因为我没有可用空间(我的HD总大小是120 GB)。

注意1:我的数据库设置为使用完全恢复模型,因为我需要能够进行时间点恢复。

注2:我知道收缩会增加索引碎片。收缩后,我可以在索引中使用REBUILD来避免这种情况。

您可以临时将恢复模型设置为简单并截断日志

在上次成功的日志备份和日志清理后可以进行的下一次差异备份结束之间的时间段内,您将失去时间点恢复能力。但从开始备份后可能进行时间点恢复

您还需要找到长期运行的活动事务,并找到的根本原因

你可以在这里看到http://blog.sqlxdetails.com/transaction-log-survival-guide-shrink-100gb-log/

在下面命令的帮助下,您可以清除事务日志文件。命令得到了很好的评价。

-- see the log size
DBCC SQLPERF(LOGSPACE);
--taking backup for log file before shrink it
BACKUP LOG MyTestDB
TO DISK = 'E:PartProcForOld_log_backupMyTestDB.TRN'
GO
-- this command will tell you the log file name
SELECT name
FROM sys.master_files
WHERE database_id = db_id()
  AND type = 1

--- these below command will alter database with actual shrink
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE MyTestDB
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (MyTestDB_log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE MyTestDB
SET RECOVERY FULL;
GO

最新更新