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

时间:2009-05-06 13:26:09

标签: sql sql-server

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

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

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

6 个答案:

答案 0 :(得分:28)

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

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

在此期间,至少应该允许你杀死日志文件:

  1. 执行数据库的完整备份。不要跳过这个。真。
  2. 将数据库的备份方法更改为“简单”
  3. 打开查询窗口并输入“checkpoint”并执行
  4. 执行数据库的其他备份
  5. 将数据库的备份方法更改回“Full”(或者不管它是什么,如果它还不是简单的那样)
  6. 执行数据库的最终完整备份。
  7. 您现在应该可以缩小文件(如果执行备份没有为您执行此操作)。

    祝你好运!

答案 1 :(得分:28)

  • 执行数据库的完整备份。不要跳过这个。真。
  • 将数据库的备份方法更改为"简单"
  • 打开查询窗口并输入" checkpoint"并执行
  • 执行数据库的其他备份
  • 将数据库的备份方法更改回" Full" (或者不管它是什么,如果它还不是简单的那样)
  • 执行数据库的最终完整备份。
  • 逐个运行以下查询
    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)

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:3)

你必须收缩&备份日志几次以获取日志文件的大小,这是因为日志文件页面无法重新组织,因为数据文件页面可以被截断。有关更详细的说明check this out.

分离db&删除日志文件很危险!除非你想要数据丢失,否则不要这样做

答案 4 :(得分:0)

我遇到了同样的问题,我的数据库日志文件大小约为39 GB,并且在缩小(包括数据库和文件)后,将其减小到37 GB还不够,所以我采取了以下解决方案: (我不再需要ldf文件(日志文件))

(**重要):在执行该过程之前,先获取数据库的完整备份。

  1. 在该数据库上运行“检查点”。

  2. 分离该数据库(右键单击该数据库并选择任务>> 分离...){如果看到错误,请执行本文结尾的步骤}

  3. 将MyDatabase.ldf移动到另一个文件夹,您可以在与数据库相同的文件夹中的硬盘中找到它(以防万一将来由于某种原因(例如用户执行某些任务)而需要它)

  4. 附加数据库(右键单击“数据库”,然后选择“附加...”)

  5. 在“附加”对话框上,删除.ldf文件(显示“找不到文件”注释),然后单击“确定”。 (不必担心ldf文件将在附加过程之后创建。)

  6. 之后,将创建一个大小为504 KB的新日志文件!!!

在步骤2中,如果遇到另一个用户使用数据库的错误,则可以:

1。在主数据库“ sp_who2”上运行此命令,并查看使用了什么进程     您的数据库。

2。读取进程号,例如它是52,然后键入“ kill 52”,现在您的     数据库是免费的,随时可以分离。

如果使用数据库的进程数过多:

1。打开服务(在Windows启动中键入服务)查找SQL Server ...进程    并重置它(右键单击并选择重置)。

  1. 立即在分离对话框中单击确定按钮(显示了  先前分离错误)。

答案 5 :(得分:0)

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

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