0

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 部分では役に立ちませんでした。

4

0 に答える 0