我们有一个数据库,它是 ALWAYS ON 的一部分。我们想清除该数据库的事务日志,因为这只是一个生产服务器,我们每天从我们的其他生产服务器之一复制数据 4 次。
由于我们每次都对 4 GB 数据进行快照复制,因此事务日志每天都在增加。
由于空间有限,我们想到了每天清理日志,这样我们就不会遇到空间问题。
我尝试了一段代码,该代码对于不属于 ALWAYS ON 的数据库运行良好。
但是当我在实际数据库上尝试代码时,它根本不起作用,日志仍然存在。
USE AdventureWorks;
GO
EXEC sp_addumpdevice 'disk', 'AdventureWorks_backup', N'E:\Backup\AdventureWorks.bak';
Go
USE AdventureWorks;
GO
BACKUP DATABASE AdventureWorks
TO AdventureWorks_backup
WITH FORMAT,
MEDIANAME = 'AdventureWorks_backup',
MEDIADESCRIPTION = N'E:\Backup\AdventureWorks.bak',
NAME = 'AdventureWorks_backup';
GO
USE AdventureWorks;
GO
BACKUP LOG AdventureWorks
TO AdventureWorks_backup;
Go
USE AdventureWorks;
GO
CHECKPOINT
GO
USE AdventureWorks;
GO
DBCC SHRINKFILE (AdventureWorks_log,1)
GO
USE AdventureWorks;
GO
EXEC sp_dropdevice 'AdventureWorks_backup','DELFILE'
Go
在上面的代码中,我创建了一个备份设备,然后备份了数据库并尝试缩小日志文件。但这对始终在线的 DB 部分没有帮助。