我在SQL Server中的日志文件用完了磁盘上的所有空间。我每晚都运行完整备份,但日志文件不断增长。我该怎么办?
答案 0 :(得分:4)
在大多数繁忙的系统上,您需要查看全天的日程安排备份,然后查看每晚完整备份。这是很常见的做法。
答案 1 :(得分:4)
在某些情况下,即使运行了日志备份,您也可能会发现日志文件无法正确截断。您可以使用TRUNCATE_ONLY进行备份以进行检查。当你运行它时,它应该截断事务日志:
BACKUP LOG dbname WITH TRUNCATE_ONLY
此问题的原因是日志的早期部分中的打开事务。 SQL不会截断此事务之后的日志,从而可能导致日志量不断增加。您需要找出哪些交易保持开放以及原因。您可以使用以下方式监控日志空间:
DBCC SQLPERF (LOGSPACE)
有关长时间运行交易的信息,请参阅:
DBCC OPENTRAN
或者:
select * from sys.dm_tran_database_transactions
答案 2 :(得分:3)
如果您的作业计划进行完整备份,这很好,应该是您的起点,但您还需要执行常规的事务日志备份。
备份事务日志会导致重新标记空间。一旦定义了常规事务日志备份计划,您可能会考虑将事务日志缩小到更适合的大小。因为它将不再无限增长。
完全恢复的备份策略包括:
* Database backups.
* Differential backups (optional).
* Transaction log backups.
我建议您参考以下Microsoft参考资料。
http://msdn.microsoft.com/en-us/library/aa173551(SQL.80).aspx
答案 3 :(得分:1)
您必须备份日志以及主数据库
答案 4 :(得分:0)
您可以使用某种日志轮换,并且只保留固定时间的日志,比如过去7天。这应该绰绰有余。或者您可以每晚重置日志,因为您应该在备份中使用它。
答案 5 :(得分:0)
这应该缩小它:
dbcc shrinkfile('databasename_log', 0)
答案 6 :(得分:0)
试试这个:
dump transaction <dbname> with no_log
然后通过在sql server设置中设置autoshrink选项来缩小日志文件。
我认为你也可以使用dbcc来缩小它,但我不记得语法。
答案 7 :(得分:0)
最好将事务日志备份添加到您的计划中。
BACKUP LOG database TO DISK = 'D:/database_log.bak'
请记住,在完整或大容量日志恢复模型中,事务日志在事务日志备份时会被截断,因此需要定期备份日志以管理事务日志的大小。否则,事务日志文件将增长,直到没有剩余空间。
如果不需要时间点恢复并且数据库更改很少,则最好使用简单的恢复模型(没有事务日志)。 在这种情况下,将自动截断事务日志以删除任何非活动的虚拟日志文件。在简单恢复模型中,事务日志截断发生在每个检查点之后。
答案 8 :(得分:-1)
删除日志文件?
编辑:显然删除日志文件很糟糕,它只是只是日志到SQL服务器。我要离开这一点重申不该做的事情。