安全删除 SQL Server 日志文件 (.LDF)

InO*_*der -1 sql-server delete backup transaction-log

  • 我可以确保我的应用程序处于一致状态。
  • 如果有的话,我可以回滚所有未完成的交易(以防万一)没关系
  • 我可以分离数据库

之后我需要日志文件做什么?

我特别在谈论“高度控制”的环境。所以,真正的问题是:我怎样才能明确地强制一切正常以避免可能的数据丢失?这里有人有做这种手术的经验吗?

更新

这样做的原因是我不喜欢庞大的日志文件。高度受控的环境是我的 PC 在单用户模式下运行单个应用程序。我是此应用程序的开发人员,我可以完全控制代码更改。我宁愿删除而不是SHRINK这样,请不要建议我简单地删除SHRINK文件。

UDATE 2 -- 练习

我已经在生产中使用了这个过程半年多,没有任何问题。

Mar*_*ith 12

只是为了添加到现有的答案。

SQL Server 2008 Internals Book (pp 175-177) 暗示分离数据库、删除日志文件和重新附加 mdf 文件应该是非常安全的,正如它所说的。

分离数据库可确保数据库中没有不完整的事务,并且内存中没有该数据库的脏页。如果这些条件不能得到满足,分离操作失败...使用的一个好处sp_detach_db过程是SQL服务器记录的事实数据库干净关闭......这可收缩,有一个日志文件的快捷方式变得比你想要的大得多

然而,情况似乎并非如此。这篇博客文章有这个方法的演示,让你的数据库也损坏了。


gbn*_*gbn 10

您可以通过使用 WITH ROLLBACK IMMEDIATE 将 DB 切换为 RESTRICTED 来强制 ROLLBACK。请参阅更改数据库。您不能强制 COMMIT (根据您的 SO 问题)

然后...

  • 如果您删除 LDF(SQL Server 关闭),您的数据库将返回“可疑”状态。
  • 如果您分离+删除,单独附加 MDF,则会重新创建 LDF。

注意:第一百万次,您需要一个 LDF。如果你问


Gra*_*hey 10

在你把自己从这个洞里挖出来后,请阅读这篇文章并从中学习。日志是 SQL Server 工作方式的重要组成部分。你不能只是摆脱它们。但是您可以适当地管理它们。您可能正在使用默认设置,即在完全恢复模式下创建所有数据库,这意味着日志将会增长。创建数据库后更改此设置。除此之外,@gbn 上面有答案。

  • 更准确地说,你根本不能没有日志。不妨问问有关从汽车上拆下刹车的问题。如果您希望将日志保持在可管理的大小并且不关心发生灾难时的时间点恢复,请使用简单恢复模型。并不意味着它不会增长,而是意味着您几乎可以忽略日志在那里。请通读此 http://www.sqlservercentral.com/articles/64582/ (3认同)
  • 与其担心如何摆脱日志,不如考虑学习如何正确管理日志?该应用程序现在可能是您 PC 上的单个用户,但它肯定是为了更广泛地发布给用户,一旦发生这种情况,它就不再是一个“高度受控的环境”,需要正确管理数据库的日志。 (3认同)
  • 很酷,那么这里有一些不能做的事情 - 安全地删除事务日志而不会产生潜在的后果。这不是“过于科学的绒毛”,而是数据库的完整性。大多数情况下,分离和删除都没有问题,除非不是。您要求有经验的 DBA 告诉您如何处理它。许多非常有经验的 DBA 告诉您删除日志是不安全的,并提供了替代建议。 (2认同)

Sta*_*hns 6

为了维护SQL Server 中的ACID事务,SQL Server 架构依赖于数据文件和日志文件的使用。

这就是您需要日志文件的原因。

对于您的应用程序的需求,您可能只需要一个平面文件存储机制。