我真的需要保留.LDF文件吗?


9

每个月,我们都会制作生产数据库的月末快照。这些月末快照严格用于报告目的,没有任何插入,更新或删除操作。每个快照都有一个.MDF.LDF文件。

我想删除.LDF文件并释放服务器上的一些空间。有什么原因需要保留.LDF文件?

澄清:

我们的生产数据库每天晚上都从另一个系统的文件提取中重新创建。我们只报告生产数据库,没有更新。

夜间过程:据
我所知...
每天晚上,数据库表都被截断
。表通过一系列批量插入语句填充。
索引被重建

Answers:


16

您不应该删除日志文件。如果您尝试重新附加不带日志的数据文件,SQL Server可以从技术上重新创建它,但是存在一些潜在的问题,例如在分离数据库时是否存在打开的事务。在这种情况下,您将丢失全部数据。

占用空间,并且不要删除日志文件。您要为此麻烦。

请参阅有关事务日志的文章,尤其是“日志管理不善”部分。


9

另一个答案所述,您无法删除日志文件。您可以将数据库设置为READ_ONLY。如果数据库位于中READ_ONLY,则不允许进行任何修改,并且日志文件将不会增长。您可以将日志文件的大小减小到最小,并实现最小占用空间的目标。要设置数据库,请READ_ONLY运行以下命令:

USE master;
GO
ALTER DATABASE databasename SET READ_ONLY;
GO

您可以将数据库改回READ_WRITE,进行所需的任何更改,然后将其设置为所需的READ_ONLY任何时间。

仍然需要日志文件来维护数据库的ACID属性。


2

事实是您可以仅使用mdf文件来创建数据库。这是sp_attach_single_file_db(Transact-SQL)命令。请注意,它将在将来的Microsoft SQL Server版本中删除。但是,删除LDF文件并不明智。鲨鱼是对的,“您要为此提出麻烦”。另一种观点-您的ldf文件很大吗?如果是这样,您可以对它们做一些事情。

  1. 将数据库设置为简单恢复模型。仅当您不想回滚事务时才可以这样做
  2. 创建完整的数据库备份(.BAK)文件,而不是制作MDF和LDF文件。它会更小tnan MDF + LDF

-3

这是我提出的缩小LDF文件的解决方案。

  1. 分离数据库
  2. 将LDF文件重命名为* _old.ldf
  3. 附加数据库
  4. 删除对缺少的LDF的引用

这将重新创建一个504K大小的LDF文件。

  1. 删除* _old.ldf
  2. 空回收站

这已经收回了服务器上的大量磁盘空间。它对我们有用,因为所有这些数据库仅是静态报告数据库。不会对这些数据库执行插入,更新或删除操作。

更新2019-09-24:是的,我同意这是一个非常糟糕的主意。我几乎立即停止这样做。我已使用100的填充因子重建了所有索引。仅缩小.ldf文件。并将所有数据库更改为只读。


6
哇,这真是个坏主意。如果数据库无法成功分离,或者丢失或损坏(介于1到3之间)怎么办?你完蛋了。您有数据库的零副本。
亚伦·伯特兰

3
正确的方法是:1.对数据库进行COPY_ONLY备份。2.在报告服务器上还原它。3.将恢复设置为简单,并将恢复的副本标记为只读。4.手动收缩日志文件。是的,您同时需要空间,但您可以继续工作!
亚伦·伯特兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.