3

我正在尝试缩小我的数据库日志文件。我试图运行:

USE databasename 
BACKUP log databasename
WITH truncate_only 
DBCC shrinkfile (databasename_log, 1)

我收到错误消息:

消息 155,级别 15,状态 1,第 3 行“truncate_only”不是可识别的备份选项。

我错过了什么吗?

4

2 回答 2

5

SQL Server 2008 不再允许NO_LOG/TRUNCATE_ONLY选项。

要截断您的事务日志,您要么必须(真实地)备份它,要么将数据库的恢复模式切换为简单。后者可能是您在这里真正想要的。除非您定期进行事务日志备份以便能够恢复到中午的某个时间点,否则您不需要完全恢复。

于 2010-02-03T23:00:40.023 回答
0

我认为最好的方法是使用这样的脚本:

USE AdventureWorks
GO

-- Use some dynamic SQL just only not to re-write several times the name 
-- of your db, or to insert this snippet into a loop for all your databases...
DECLARE @dbname varchar(50) = 'AdventureWorks';
DECLARE @logFileName varchar(50) = @dbname  + '_log';
DECLARE @SQL nvarchar(max);
SET @SQL = REPLACE('ALTER DATABASE {dbname} SET RECOVERY FULL;', '{dbname}', @dbname);
EXECUTE(@SQL);

DECLARE @path nvarchar(255) = N'F:\BCK_DB\logBCK' + CONVERT(CHAR(8), GETDATE(), 112) + '_'
  + REPLACE(CONVERT(CHAR(8), GETDATE(), 108),':','') + '.trn';

BACKUP LOG @dbname TO DISK = @path WITH INIT, COMPRESSION;

DBCC SHRINKFILE(@logFileName);

-- determine here the new file size and growth rate:
SET @SQL = REPLACE('ALTER DATABASE {dbname} MODIFY FILE (NAME = ' + @logFileName + ', SIZE = 32000MB, FILEGROWTH = 10%);', 
    '{dbname}', @dbname);
EXECUTE(@SQL);
GO

http://www.snip2code.com/Snippet/12913/How-to-correctly-Shrink-Log-File-for-SQL

于 2013-12-14T18:46:19.430 回答