ALWAYS ON の一部である DB があります。その DB のトランザクション ログをクリアしたいのは、それが他の運用サーバーの 1 つから 1 日 4 回データをレプリケートする単なる運用サーバーであるためです。
毎回 4 GB のデータのスナップショット レプリケーションを行っているため、トランザクション ログは日々増加しています。
スペースが限られているため、スペースの問題にぶつからないように、毎日ログをクリアすることを考えました。
ALWAYS ON の一部ではない DB で正常に動作するコードを試しました。
しかし、実際のDBでコードを試してみると、まったく機能せず、ログが残っていました。
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 をバックアップし、ログ ファイルを圧縮しようとしました。しかし、常時オンの DB 部分では役に立ちませんでした。