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’ |
<参考: LogShippingHistory テーブルのカラム一覧>
Restored フラグは、バックアップされたデータベースが配布先にリストアされたかどうかを確認するためのフラグで、リストア済みの場合は 1 に更新されます。
リストア前の DB のレコードを消してしまうとリストアに失敗してしまうので、必ず WHERE 句に “Restore = 1” を指定します。
また、BackupDateTime はバックアップを行った日付ですが、WHERE 句にはバックアップの保持期間ポリシーに従った日付を指定してください。
LogShipping のジョブの Clear Backup History で指定している保持期間は、既定で 14日となります。この場合、バックアップは 14 日分しか残っていないので、それより古い LogShippingHistory の履歴は削除しても問題ないと判断できます。
簡単な例となりますが以上が削除方法のご紹介となります。
要件に合わせて適宜カスタマイズしてお使いください。