如何减小sql server日志文件的大小?

Jon*_*ter 30 sql sql-server

所以我一直忽略了我的fogbugz数据库的任何备份,现在fogbugz ldf文件超过2次半的演出.这是在我们使用fogbugz的六个月里建立起来的.

我备份了数据库,然后我备份了,并截断了事务日志,但事务日志仍然是2个半的演出.我对日志文件进行了缩小,还有两次半的演出.我没做什么似乎缩小了文件的大小.

无论如何都有解决问题的方法吗?或者是回到这一点的唯一方法是分离数据库,删除日志文件,然后重新附加一个新文件?

ban*_*nny 31

  • 执行数据库的完整备份.不要跳过这个.真.
  • 将数据库的备份方法更改为"简单"
  • 打开查询窗口并输入"checkpoint"并执行
  • 执行数据库的另一个备份
  • 将数据库的备份方法更改回"完全"(或者它是什么,如果它还不是简单的)
  • 执行数据库的最终完整备份.
  • 在下面逐个运行查询
    1. USE Database_Name
    2. select name,recovery_model_desc from sys.databases
    3. ALTER DATABASE Database_Name SET RECOVERY simple
    4. DBCC SHRINKFILE (Database_Name_log , 1)

  • 我的数据库的恢复类型是 FULL,我找不到通过 Management Studio 2014 中的 GUI 更改它的方法。这个答案解决了这个问题。12GB 日志文件现已恢复到 1MB,非常感谢! (2认同)
  • 如果你的 RECOVERY 模型是 FULL,你需要记住留下“ALTER DATABASE Database_Name SET RECOVERY full” (2认同)

Ada*_*son 30

欢迎来到SQL Server日志管理的变幻无常的世界.

有些错误,但我认为如果没有其他信息,任何人都不会告诉你更多信息.例如,此数据库是否曾用于Transactional SQL Server复制?如果事务尚未复制到订阅者,则可能会导致此类问题.

在此期间,至少应该允许您终止日志文件:

  1. 执行数据库的完整备份.不要跳过这个.真.
  2. 将数据库的备份方法更改为"简单"
  3. 打开查询窗口并输入"checkpoint"并执行
  4. 执行数据库的另一个备份
  5. 将数据库的备份方法更改回"完全"(或者它是什么,如果它还不是简单的)
  6. 执行数据库的最终完整备份.

您现在应该可以缩小文件(如果执行备份没有为您执行此操作).

祝好运!

  • 不推荐这种技术 - http://www.sqlskills.com/BLOGS/PAUL/post/Importance-of-proper-transaction-log-size-management.aspx (3认同)
  • ...这就是为什么我说它可以完成他在 INTERIM 中需要的东西,直到他弄清楚是什么阻止了他的日志被截断。 (2认同)

tea*_*eng 15

这是使用查询完成的最佳建议之一。对于像我一样拥有大量数据库的人来说很有用。可以使用脚本运行它。

https://medium.com/@bharatdwarkani/shrinking-sql-server-db-log-file-size-sql-server-db-maintenance-7ddb0c331668

USE DatabaseName;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE DatabaseName
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (DatabaseName_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE DatabaseName
SET RECOVERY FULL;
GO
Run Code Online (Sandbox Code Playgroud)


Ric*_*ard 5

  1. 确保数据库的备份模式设置为简单(有关不同模式的概述,请参见此处)。这将避免 SQL Server 在重用空间之前等待事务日志备份。

  2. 使用dbcc shrinkfileManagement Studio缩小日志文件。

在设置备份模式之前,步骤 #2 将不执行任何操作。