Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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日志文件的命令是什么?_Sql Server_Truncate_Logging - Fatal编程技术网

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

Sql server 截断SQL Server日志文件的命令是什么?,sql-server,truncate,logging,Sql Server,Truncate,Logging,在发送给同事之前,我需要清空LDF文件。如何强制SQL Server截断日志?在management studio中: 不要在实时环境中执行此操作,但为了确保尽可能缩小开发数据库,请执行以下操作: 右键单击数据库,选择属性,然后选择选项 确保“恢复模式”设置为“简单”,而不是“完全” 单击“确定” 再次右键单击数据库,选择任务->收缩->文件 将文件类型更改为“日志” 单击“确定” 或者,执行此操作的SQL: ALTER DATABASE mydatabase SET RECOVERY

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

在management studio中:

  • 不要在实时环境中执行此操作,但为了确保尽可能缩小开发数据库,请执行以下操作:
    • 右键单击数据库,选择属性,然后选择选项
    • 确保“恢复模式”设置为“简单”,而不是“完全”
    • 单击“确定”
  • 再次右键单击数据库,选择
    任务
    ->
    收缩
    ->
    文件
  • 将文件类型更改为“日志”
  • 单击“确定”
或者,执行此操作的SQL:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

Ref:

备份日志日志名,仅带有truncate\u,后跟dbcc shrinkfile命令,如果我记得清楚的话。。。在查询分析器或等效工具中:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

对于SQL Server 2008,命令为:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

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

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

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

然后使用
DBCC SHRINKFILE
截断日志文件。

另一个选项是通过Management Studio分离数据库。然后简单地删除日志文件,或者重命名它,稍后再删除

回到ManagementStudio,再次连接数据库。在“附加”窗口中,从文件列表中删除日志文件

DB附加并创建一个新的空日志文件。检查一切正常后,可以删除重命名的日志文件


您可能不应该将其用于生产数据库。

因为我的答案隐藏在评论中。对于SQL Server 2012及更高版本,您可以使用以下各项:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)


这肯定比将数据库恢复模型设置为SIMPLE(如Blorgbeard的回答中所示)要好,因为如果恢复模型已满,则将其设置为SIMPLE是有原因的。SQL Server 2008中不推荐使用truncate_,因此您必须将数据库切换为SQL Server 2012的SIMPLE recovery。这是可行的,但是没有
只使用TRUNCATE\u
。再加上net\u prog所说的,对于SQL Server 2012,我将
备份日志数据库名的第一行替换为DISK='NUL:'
。'TRUNCATE\u ONLY'不是公认的备份选项。(SQL Server 2019 RC1)您的回答刚刚救了我一天!我不知道“右键单击-任务->收缩”选项。非常感谢。你在生活环境中做什么?首先备份日志?我不是DBA,但是的,我相信备份日志会截断日志:@JohnBubriski如果您使用的是简单以外的恢复模型,日志是恢复数据或回滚事务的基础。因此,在生产中,您需要先备份这些日志,然后才能收缩日志文件。否则,就没有实际的恢复可能性。不幸的是,如果处于恢复状态,则必须重新加载所有事务日志备份才能完全恢复数据库。当然,这是一段有趣的时光!:)在SQL Server 2012中,在执行
dbcc shrinkfile
之前,我必须
使用mydatabase
,因为关于哪个版本和接受的答案不适用于SQL Server 2008的问题模棱两可。无论年龄大小,此答案仍然有效。谢谢,它帮助我减少了一个与DBCC ShrinkFile没有反应的大日志文件,完成后别忘了将恢复模式更改回完整模式!您应该在执行此操作(或任何其他截断选项)之前进行备份。如果执行完整备份并检查SSMS中的“仅复制备份”,则不再需要日志。(这只是一个时间点备份)。永远不要这样做!日志中可能有数据尚未提交到数据文件。你会丢失这些数据。如果你在回答中警告不要在生产中尝试,那根本不值得发布。我不同意下层选民的观点——这是一种选择。管理员只需要了解他们的场景。例如,如果没有打开的事务,就不会有“未提交”的数据。这是唯一适合我的解决方案。我的硬盘已经满了,我无法备份或缩小,其他的似乎都不起作用。非常感谢。我同意;这不是一个最佳实践,但如果你没有其他选择,比如Brian的场景,这是一个很有价值的工具。这是唯一一个在我的情况下起作用的工具。。。我在尝试使用带有TRUNCATE_ONLYNote的备份时出错:这可能需要相当长的时间,即使是在SSD上(它必须读取日志才能丢弃它)。对于功率适中的Azure VM上的30GB日志文件,执行40%的操作需要10分钟。确保切换到“消息”接收SSM以查看已处理的百分比。