SQL Server メンテナンス クリーンアップでは、古いバックアップを削除するときに正確な時間を考慮しますか?

SQL Server メンテナンス クリーンアップでは、古いバックアップを削除するときに正確な時間を考慮しますか?

次のような毎日のメンテナンスタスクがあるとします。

  1. すべてのデータベースをバックアップし、
  2. 3 日以上経過したバックアップを削除します。

さて、1日目の最初のバックアップは10:00から始まり、次のファイルが作成されるとします。

db1.bak 2012-01-01 10:04
db2.bak 2012-01-01 10:06

さて、4日目にメンテナンスタスクの最初のステップ(DBのバックアップ)が10:05に終了したとします。SQL Serverは

  • db1.bakを削除し、db2.bakを残す(論理的だが、ユーザーにとっては意外かもしれない)または
  • 両方を維持するか、
  • 両方削除しますか?

答え1

メンテナンス プランでは、クリーンアップ タスクが開始された時点で SQL が生成されるため、その時点でバックアップ ファイルを削除します。したがって、説明した 3 つのオプションのうち、最初のケースで何が起こるかがわかります。

3 日以上経過したファイルを削除するサンプル プランを作成し、ジョブを実行しました。以下のログ出力から、ジョブが 2013 年 5 月 7 日の 12:25 に実行され、2013 年 5 月 4 日の 12:25 より古いファイルが削除されたことがわかります。以下の T-SQL は、日付の生成方法のおおよそのコマンドを示しています。

query:
select GETDATE()
select DATEADD(DAY, -3, GETDATE() )

results:
-----------------------
2013-05-07 12:51:52.073

(1 row(s) affected)

-----------------------
2013-05-04 12:51:52.073

(1 row(s) affected)

メンテナンス プラン: MaintenancePlan 期間: 00:00:02 ステータス: 成功。詳細:

ローカル サーバー接続でデータベースをバックアップ データベース: DBA タイプ: 完全 既存のものを追加 タスク開始: 2013-05-07T12:25:03。 タスク終了: 2013-05-07T12:25:05。 成功 コマンド:BACKUP DATABASE [DBA] TO DISK = N''N:\Apps\MSSQL10.INSTANCE\MSSQL\Backup\DBA_backup_2013_05_07_122503_6738713.bak'' WITH NOFORMAT、NOINIT、NAME = N''DBA_backup_2013_05_07_122503_6738713''、SKIP、REWIND、NOUNLOAD、STATS = 10

行く

ローカル サーバー接続のメンテナンス クリーンアップ データベース バックアップ ファイルのクリーンアップ 経過時間: 3 日以上 タスク開始: 2013-05-07T12:25:05。 タスク終了: 2013-05-07T12:25:05。 成功 コマンド:EXECUTE master.dbo.xp_delete_file 0、N''N:\Apps\MSSQL10.INSTANCE\MSSQL\Backup'',N''BAK'',N''2013-05-04T12:25:05''

行く

関連情報