【问题标题】:SQL - shrink database log fileSQL - 收缩数据库日志文件
【发布时间】:2011-01-12 20:39:38
【问题描述】:

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

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

我收到错误消息:

消息 155,级别 15,状态 1,行 3 'truncate_only' 不是公认的 备份选项。

我错过了什么吗?

【问题讨论】:

  • 为什么?作为一般规则,缩小文件是一个的主意。
  • 对不起,我对此很陌生。为什么这是个坏主意?
  • 这是一种糟糕的做法,因为它首先否定了事务日志的目的。这就是 SQL Server 2008 删除此功能的原因。正如我所提到的,如果您不希望事务日志增长,如果您没有 RPO,请使用简单恢复模型。否则,您需要事务日志才能从上次数据库备份成功恢复最近的事务。
  • 任何基于商业的数据库都不应该被制作成简单的模型。始终,始终使用 FULL 并在需要时支付更多存储空间。您已收到警告。

标签: sql-server-2008 backup transaction-log shrink


【解决方案1】:

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

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

【讨论】:

  • 这是一件非常可怕的事情。如果您想使用SIMPLE 恢复模型,那很好,但不要通过破坏事务日志然后声称您有FULL 恢复来撒谎。写那篇文章的人显然对 SQL Server 恢复模型一无所知,只是(就像我猜的 OP 一样)寻找快速修复以释放空间。
  • 这并不可怕,如果有人不想进行备份并且不想打扰日志并且只想节省空间,那么最好使用该解决方案来仅缩小日志文件。我猜 OP 也问过同样的问题。
  • 正如你所说,如果有人对日志数据感到困扰,那么他们应该先备份。
  • @JitendraPancholi:如果你想鲁莽,那么只需使用SIMPLE 恢复模型。切换到SIMPLE 删除日志然后假装你真的在FULL 上是鲁莽的不诚实。告诉我,你了解这些日志中的内容吗?为什么不能在FULL recovery 下简单地缩小或删除它们?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多