
次のような毎日のメンテナンスタスクがあるとします。
- すべてのデータベースをバックアップし、
- 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''
行く