SQL Server日志文件太大了

时间:2015-02-12 11:25:15

标签: sql-server logging

我们正在使用SQL Server 2008的完全恢复模式,数据库大小为10 GB,日志文件为172 GB,我们要在内部清理日志文件的空间,我们做了事务日志文件备份应该是清理,但它仍然是172 GB,该怎么办?

2 个答案:

答案 0 :(得分:1)

  执行以下DB后,

缩小task

     

/ *执行数据库的完整备份。

     

将数据库的备份方法更改为“简单”

     

打开查询窗口并输入“checkpoint”并执行

     

执行数据库的另一次备份

     

执行数据库的最终完整备份。* /

答案 1 :(得分:0)

要理解这一点,您需要了解文件缩小和截断之间的区别。

缩小意味着在物理上缩小磁盘上文件的大小。截断意味着逻辑上释放新数据所使用的空间,但不会影响磁盘上文件的大小。

例如,在外行人的术语中,如果您的日志文件大小为100 GB而且您从未备份过,则使用100GB的该大小。如果你然后备份日志/数据库,它将被截断,这意味着100GB将保留供将来使用...基本上意味着它已经为SQL Server释放了,但仍然占用了磁盘上相同的空间之前。实际上,您可以使用以下查询来查看此内容。

DBCC SQLPERF(logspace) WITH NO_INFOMSGS

结果将以DB为单位显示日志文件的大小,以及实际使用的日志文件的大小。如果你现在缩小该文件,它将释放磁盘上文件的保留部分。

同样的逻辑适用于SQL Server中的所有文件(包括主文件和分区文件,以及tempdb,用户数据库等的日志文件),甚至在表级别也是如此。例如,如果您运行此代码

sp_spaceused 'myTableName'

你会看到有多少表被保留并用于各种各样的事情,其中​​"未使用"列将显示保留但未使用的数量。

因此,作为结论,您无法在不缩小磁盘的情况下释放磁盘空间。这里真正的问题是为什么你不允许缩小日志?建议不缩小日志文件的典型原因是因为它无论如何都会自然地增长到正常大小,因此没有意义。但是,如果您只是步入建议的备份日志的做法,那么首先缩小超大日志才有意义,以便将来维护备份将保持其自然的,相对较小的大小

关于缩小的另一个非常重要点,是缩小数据文件完全是另一回事。如果缩小数据文件,则会严重破坏数据库上的所有索引和统计信息,因此必须重新构建整个数据库上的所有索引,以避免性能的灾难性降级。因此,在没有咨询知道他们正在做什么并准备好应对后果的人的情况下,不要缩小数据文件。在这方面,日志文件更加安全,因为碎片不适用于那里。