LogShippingHistory テーブルのレコードの消し方

こんにちは、BizTalk Server サポートの五十嵐です。

今回は BizTalk の Log Shipping についてのお話です。

 

BizTalk の Log Shipping

BizTalk には、SQL Server の Log Shipping とは別に専用のジョブが用意されていて、それらを構成することで BizTalk 関連の DB をバックアップすることができます。

Log Shipping の構成については下記の資料が参考になると思いますので、ご一読ください。

BizTalk Server のログ配布 https://msdn.microsoft.com/ja-jp/library/dd407739(v=bts.20).aspx

ログ配布用に送信先システムを構成する方法 https://msdn.microsoft.com/ja-jp/library/aa560961(v=bts.20).aspx

 

Log Shipping 管理用テーブル

さて、この Log Shipping ですが、ログ配布先の SQL Server を構成すると、Log Shipping の管理用にいくつかテーブルが作成されます。

<参考 - Log Shipping 用テーブル一覧>

dbo.bts_LogShippingDatabases

dbo.bts_LogShippingHistory  <-- 今回の主役の テーブル

dbo.bts_LogShippingJobs

dbo.bts_LogShippingJobSchedules

dbo.bts_LogShippingJobSteps

dbo.bts_LogShippingLastRestoreSet

dbo.bts_LogShippingSource

これらのテーブルにはジョブの情報やログ配布元の DB の情報などが格納されているので、ほとんどは一度構成されればテーブル内のレコードは増えることはありません。
しかし、dbo.bts_LogShippingHistory というテーブルについては、文字通りログ配布を行った履歴を蓄積するテーブルですので、ジョブの実行頻度やバックアップ対象の DB の数などにもよりますが、レコード件数は一定間隔で少しずつ増大していきます。
MsgBoxDb などの既定でバックアップされる BizTalk 用の DB だけでなく、多数のカスタム DB もバックアップの対象としている場合などには、LogShippingHistory テーブルは比較的短期間で増大するかもしれません。

今回は、LogShippingHistory が肥大化した場合の削除方法をご紹介します。

 

LogShippingHistory テーブルのレコード削除

LogShippingHistory テーブルのレコードを削除するためには、ジョブを新たに構成して定期的に削除するように設定するか、手動で DELETE  文を実行する必要があります。

(既定では BizTalk の LogShipping にはそのようなジョブが用意されていません。)

LogShippingHistory テーブルの “Restored” と “BackupDateTime” を用いて、以下のような SQL 文実行することで、不要なレコードを削除することができます。

DELETE FROM dbo.bts_LogShippingHistoryWHERE Restored = 1 ANDBackupDateTime < ‘2016-08-01’

 

image

<参考: LogShippingHistory テーブルのカラム一覧>

Restored フラグは、バックアップされたデータベースが配布先にリストアされたかどうかを確認するためのフラグで、リストア済みの場合は 1 に更新されます。
リストア前の DB のレコードを消してしまうとリストアに失敗してしまうので、必ず WHERE 句に “Restore = 1” を指定します。

また、BackupDateTime はバックアップを行った日付ですが、WHERE 句にはバックアップの保持期間ポリシーに従った日付を指定してください。
LogShipping のジョブの Clear Backup History で指定している保持期間は、既定で 14日となります。この場合、バックアップは 14 日分しか残っていないので、それより古い LogShippingHistory の履歴は削除しても問題ないと判断できます。

 

簡単な例となりますが以上が削除方法のご紹介となります。

要件に合わせて適宜カスタマイズしてお使いください。