Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Sql Server LDF文件占用的空间太大_Sql Server - Fatal编程技术网

Sql server Sql Server LDF文件占用的空间太大

Sql server Sql Server LDF文件占用的空间太大,sql-server,Sql Server,为什么我的数据库日志文件占用了大量空间?它几乎占据了我硬盘的30GB。即使删除了1000000条记录,也不会释放任何空间。 所以, 1.为什么日志文件占用了这么多空间(30gb)?2.如何释放空间 1.为什么日志文件占用这么多空间(30gb) 或者是因为你的恢复并不简单,ldf最终发展到这样的规模 或者是因为有一个大型的一次性DML操作 或者因为其他原因,@sepupic在另一个答案中指出 2.我怎样才能腾出空间 如果恢复不是简单的: 首先备份事务日志文件 执行收缩,如DBCC SHRI

为什么我的数据库日志文件占用了大量空间?它几乎占据了我硬盘的
30GB
。即使删除了
1000000条
记录,也不会释放任何空间。
所以,
1.
为什么日志文件占用了这么多空间(
30gb
)?
2.
如何释放空间

1.为什么日志文件占用这么多空间(30gb)

  • 或者是因为你的恢复并不简单,ldf最终发展到这样的规模
  • 或者是因为有一个大型的一次性DML操作
  • 或者因为其他原因,@sepupic在另一个答案中指出
2.我怎样才能腾出空间

  • 如果恢复不是简单的:

    • 首先备份事务日志文件
    • 执行收缩,如DBCC SHRINKFILE(2256)
  • 如果恢复很简单:

    • 只需将其缩小到所需大小,如
      DBCC SHRINKFILE(2256)
如果数据库日志仍然没有减少到目标大小,那么使用@sepupic的代码片段检查确切的原因


一些成员仍然建议physicaly删除LDF文件

我强烈建议不要这样做。亚伦·伯特兰的显著亲属:

一些你不想做的事情:

分离数据库,删除日志文件,然后重新连接。我不能 强调这有多危险。您的数据库可能无法返回 向上,它可能会被认为是可疑的,您可能必须恢复到备份(如果需要) 你有一个),等等


您需要一项维护工作,并且经常进行维护:大约每10分钟一次

每天一次完整备份是不够的

或者,您可以将数据库的设置从
FULL
更改为
SIMPLE
。但如果这样做,您将失去执行时间点恢复的能力

为什么我的数据库日志文件占用了大量空间

原因可能更多,而不仅仅是另一个答案中提到的2个

您可以使用此查询找到确切原因:

select log_reuse_wait_desc
from sys.databases
where name = 'myDB';
这里有一个指向BOL文章的链接,该文章描述了
log\u reuse\u wait
下所有可能的原因:

我怎样才能腾出空间


首先,您应该使用上面的查询确定原因,然后您应该修复它,例如,如果它已损坏
复制
,您应该将其删除或修复。

1。为什么日志文件占用这么多空间(30gb)?


这是因为
Autogrowth/Maxsize
设置了
200000MB

2。如何释放空间?


如前所述,我使用了以下命令,文件现在小于
200mb

ALTER DATABASE myDatabaseName
SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE (myDatabaseName_log, 1)
GO
ALTER DATABASE myDatabaseName_log
SET RECOVERY FULL
我还在数据库属性中将
autogrow/Maxsize
设置为
1000
Limited
(见下图)

该链接描述了更多内容,因此我建议参考该链接以了解详细说明和其他选项。

感谢@hadi的链接。

我只想提一下,即使在简单的恢复中,通过运行一些大型DML操作,日志也可以增长到较大的大小。例如-TEMPDB,它只能进行简单的恢复,但其日志文件空间不足可能是服务器停机的原因。事务日志文件达到1000 MB后,数据库将无法运行。因为您将其设置为完全恢复,所以很快就会发生;)为什么?如果是,为什么sql server会提供此选项?因为您启用了完全恢复,但可能不了解何时应该使用它以及它会带来什么副作用。简而言之:如果您启用了完全恢复,并且不执行事务日志备份,则日志将不断增长,当达到您最近设置的限制时,您的数据库将无法执行任何DML操作,像插入/删除等。我认为这是一篇很好的文章,可以更详细地解释:对于我来说,DBCC SHRINKFILE不会减少日志文件ldf(恢复很简单)。对于我来说,log\u reuse\u wait\u desc不会返回任何数据。DBCC SQLPerf(日志空间)返回99,99%已使用的日志空间DBCC LOGINFO返回11059行,所有状态=2。如何获得大型一次性DML操作?@Kiquenet,值得检查一下究竟是什么阻止了收缩:
选择name,log\u reuse\u wait\u desc from sys.databases,其中name='yourDB'
For me log\u reuse\u wait\u desc不返回任何数据