截断SQL Server日志文件的命令是什么?

Aid*_*yan 189 sql-server logging truncate

我需要在发送给同事之前清空LDF文件.如何强制SQL Server截断日志?

Blo*_*ard 300

在管理工作室:

  • 不要在实时环境中执行此操作,但要确保尽可能地缩小dev db:
    • 右键单击数据库Properties,然后选择Options.
    • 确保"恢复模型"设置为"简单",而不是"完整"
    • 单击确定
  • 再次右键单击数据库,选择Tasks- > Shrink- >Files
  • 将文件类型更改为"日志"
  • 单击确定.

或者,SQL来做:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)
Run Code Online (Sandbox Code Playgroud)

参考:http://msdn.microsoft.com/en-us/library/ms189493.aspx

  • 你在现场环境中做了什么?先备份日志? (7认同)
  • @JohnBubriski如果您使用的是简单以外的恢复模型,则日志是恢复数据或回滚事务的基础.因此,在生产中,您需要先备份这些日志,然后才能收缩日​​志文件.否则,就没有实际的恢复可能性.遗憾的是,如果您处于恢复状态,则必须重新加载所有事务日志备份才能完全恢复数据库.有趣的时候,可以肯定!:) (2认同)
  • 在 SQL Server 2012 中,我必须在执行 `dbcc shrinkfile` 之前`use mydatabase` (2认同)

ila*_*ila 129

如果我记得很清楚...在查询分析器或等效的:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)
Run Code Online (Sandbox Code Playgroud)

  • truncate_only在SQL Server 2008中已弃用,因此您必须将数据库切换为简单恢复http://msdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx (52认同)
  • 对于SQL Server 2012,这可行,但没有`WITH TRUNCATE_ONLY`. (10认同)
  • 添加到net_prog所说的,对于SQL Server 2012,我将第一行替换为`BACKUP LOG DatabaseNameHere TO DISK ='NUL:'`. (4认同)
  • 这肯定比将数据库恢复模型设置为SIMPLE要好(如Blorgbeard的答案),因为如果你的恢复模型是FULL,你可以出于某种原因设置它. (2认同)

Nat*_*n R 60

对于SQL Server 2008,命令为:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)

这将我的14GB日志文件减少到1MB.

  • 完成后别忘了将恢复模式更改回FULL! (6认同)
  • 由于哪个版本和接受的答案不适用于SQL Server 2008的问题不明确,因此无论年龄大小,此答案仍然有效. (4认同)

Mat*_*tej 35

对于SQL 2008,您可以将日志备份到nul设备:

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10
Run Code Online (Sandbox Code Playgroud)

然后DBCC SHRINKFILE用来截断日志文件.

  • 这是唯一一个最终在我的情况下工作的人......我在尝试使用TRUNCATE_ONLY备份时遇到错误 (2认同)