我不是SQL专家,每当我需要做一些基本之外的事情时,我就会想起这个事实。我有一个测试数据库,它的大小不是很大,但是事务日志确实很大。如何清除事务日志?
当前回答
根据我在大多数SQL server上的经验,没有事务日志的备份。 完全备份或差异备份是常见的实践,但事务日志备份确实很少。 因此事务日志文件会一直增长(直到磁盘满为止)。 在这种情况下,恢复模型应该设置为“simple”。 不要忘记修改系统数据库“model”和“tempdb”。
数据库“tempdb”的备份没有任何意义,因此这个数据库的恢复模型应该总是“简单”的。
其他回答
不推荐John推荐的这种技术,因为没有日志文件就不能保证数据库会附加。将数据库从full更改为simple,强制设置检查点并等待几分钟。SQL Server将清除日志,然后使用DBCC SHRINKFILE收缩日志。
DB事务日志收缩到最小大小:
备份:事务日志 收缩文件:事务日志 备份:事务日志 收缩文件:事务日志
我在几个db上做了测试:这个序列工作。
它通常缩小到2MB。
或通过脚本:
DECLARE @DB_Name nvarchar(255);
DECLARE @DB_LogFileName nvarchar(255);
SET @DB_Name = '<Database Name>'; --Input Variable
SET @DB_LogFileName = '<LogFileEntryName>'; --Input Variable
EXEC
(
'USE ['+@DB_Name+']; '+
'BACKUP LOG ['+@DB_Name+'] WITH TRUNCATE_ONLY ' +
'DBCC SHRINKFILE( '''+@DB_LogFileName+''', 2) ' +
'BACKUP LOG ['+@DB_Name+'] WITH TRUNCATE_ONLY ' +
'DBCC SHRINKFILE( '''+@DB_LogFileName+''', 2)'
)
GO
首先检查数据库恢复模型。默认情况下,SQL Server Express Edition会为简单恢复创建一个数据库 (如果我没记错的话)。
备份日志DatabaseName With Truncate_Only
DBCC ShrinkFile(yourLogical_LogFileName, 50)
SP_helpfile将为您提供逻辑日志文件名。
请参考:
从SQL Server数据库中的完整事务日志中恢复
如果您的数据库处于完全恢复模式,并且您没有进行TL备份,那么将其更改为SIMPLE。
略微更新的答案,针对MSSQL 2017,并使用SQL服务器管理工作室。 我基本上是从这些指示https://www.sqlshack.com/sql-server-transaction-log-backup-truncate-and-shrink-operations/
我有一个最近的数据库备份,所以我备份了事务日志。然后我又备份了一次。 最后,我缩小了日志文件,从20G减小到7MB,这更符合我的数据大小。 自从2年前安装这个系统以来,我认为交易日志从来没有备份过。所以把这项任务写在家务管理日历上。
根据我在大多数SQL server上的经验,没有事务日志的备份。 完全备份或差异备份是常见的实践,但事务日志备份确实很少。 因此事务日志文件会一直增长(直到磁盘满为止)。 在这种情况下,恢复模型应该设置为“simple”。 不要忘记修改系统数据库“model”和“tempdb”。
数据库“tempdb”的备份没有任何意义,因此这个数据库的恢复模型应该总是“简单”的。
推荐文章
- 确定记录是否存在的最快方法
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 外键约束可能导致循环或多条级联路径?
- 如何选择每一行的列值不是独特的
- nvarchar(max)非文本
- 在SQL Server 2008 R2中重命名数据库时出错
- 将数据复制到另一个表中
- 如何在SQL中选择表的最后一条记录?
- 修改列,添加默认约束
- 在存储过程中使用“SET XACT_ABORT ON”有什么好处?
- 如何检查SQL Server文本列是否为空?
- 如何创建一个SQL Server函数“连接”多行从一个子查询到一个单独的分隔字段?