BACKUPフォルダーを通過し、5日以上経過したすべての.bakを削除することを想定したメンテナンスプランがあります。ジョブを実行すると、成功メッセージが表示されますが、古い.bakファイルはまだ存在しています。
私は次の質問でステップを試しました: https://serverfault.com/questions/245493/sql-maintenance-cleanup-task-success-but-not-deleting-files
Result is column IsDamaged = 0
私は次の質問で確認しましたが、これは私の問題ではありません: https://serverfault.com/questions/94094/maintenance-cleanup-tasks-running-successfully-but-not-deleting-back-up -files
また、ジョブとメンテナンスプランを削除して再作成しようとしましたが、役に立ちませんでした。
何か案は?
これらのチェックを試してください:
同じ問題があった。 Culpritは.Bak拡張子です。それをBakに変更すれば、うまくいくはずです。
多くの場合、これは許可の問題が原因です。ステップが実行されているアカウントがファイルの削除を許可していない場合、クリーンアップタスクは何も役に立たないようです。
これは次のように確認できます。
この問題についても同様に、2セントを費やします。SQL2012を使用して新しい展開を行います。バックアップジョブは正常に動作しますが、ログと古いバックアップの両方のクリーンアップタスクは正常に完了しましたが、何もしませんでした。
これらの愚かなことの中で私の意見の問題は、拡張子を.bak
と.txt
に設定しましたが、.BAK
と.TXT
(大文字)に変更するとすぐに)動作し始めました。
同様の問題をトラブルシューティングしている人の助けになることを願っています。
適切なSQL Serverでメンテナンスプランを作成してください。もっと詳しく言うと、
SQL Server 2005があり、maintを作成する場合。このSQL Server 2005での計画では、SQL Server 2005 Serverから生成/バックアップされたバックアップ(bak)およびトランザクションログ(trn)を「クリーンアップ」(削除)することしかできません。 2008年、2008年R2、2012年以降のbakまたはtrnをクリーンアップしようとしても、機能しません。 (ファイルヘッダー情報のため)。つまり、2005年は2008年以降の形式のファイルを認識しません!
ただし、maintを作成することにより、これらのファイルをいつでもクリーンアップできます。 SQL Server 2008の下で計画し、2005〜2012年のこれらのファイルを「クリーンアップ」します(テスト済み)。
つまり、1。2005は2005形式のbak/trnのみをクリーンアップできます。2. 2008は2005〜2012形式をクリーンアップできます。
2000(古すぎる)または2014(新しすぎる)をテストする機会がありませんでした。しかし、2014年は2008年から機能するはずです。
頻度を1週間から数日に変更する必要があり、古いバックアップが削除されることがわかりました。なぜかわかりませんが、それで問題は解決しました。
以前にも同様の問題がありました。 GUIを使用したときに場所が明示的に設定されていなかったため、削除せずに遭遇しました。何も変更しなかったとしても、パスの場所が具体的にリストされていなかった場合、削除を処理する場所がわからなかったため、削除は発生しませんでした。それはうまくバックアップされ、すべてが良好でしたが、ウィザード/フォームで指定されているようにクリーンアップしませんでした。
私は同じ問題を抱えており、それを解決しようとしました。私はすべての組み合わせを試しましたが、うまくいきませんでした。 xp_delete_fileは文書化されておらず、明らかにバグが多いことに注意してください。
しかし、私がやったことであなたを支援できるのは、ステップをPowerShellステップに変更することです。
以下を使用して、30日より古いファイルを削除できます。
get-childitem c:\ sqlbackup -recurse | where {$ 。lastwritetime -lt(get-date).adddays(-30)-and -not $。psiscontainer} |%{remove-item $ _。fullname -force -whatif}
テストできるように-whatifが追加されていることに注意してください。
しかし、私の場合、それは十分ではありませんでした。 PowerShellアプローチには権利の問題がありました。 SQLエージェントを実行しているアカウントには、ファイルを削除する権限がありませんでした。権限を正しく設定すると、すべてが魅力のように機能しました。
がんばろう
メンテナンスファイルを削除しようとしたときに、私の2セントを捨てるのは失敗しました。拡張子とファイルの場所は正しく設定されていましたが、バックアップファイルからメンテナンスプランファイルに設定するのを忘れていました。
問題に夢中になりました。回避策がありますが、他のサーバーは問題なしのメンテナンスプランを使用しています。 T-SQL
スクリプトをコピーし、dbo
をsys
に変更するspを作成しました。わたしにはできる。読み取り用スクリプト
Create Procedure bk_removeTLogBackupFiles
as
Declare @DeleteDate varchar(50)
Declare @DeleteExecuteSQL varchar(1000)
Set @DeleteDate = cast(DATEADD(day,-7,GetDate()) as varchar(50))
Set @DeleteExecuteSQL =
'EXECUTE master.sys.xp_delete_file 0,N''\\Backupserver\BackupFolder\' + @@servername + '\User'',N''trn'',N' + quotename(@DeleteDate,'''') + ',1'
Execute (@DeleteExecuteSQL)
これは、ユーザーシステムなどのフォルダーに分類されたserver\folderのセキュリティを使用して特定のサーバーに向かうすべてのバックアップに使用する汎用スクリプトです。大したことはありませんでしたが、うまくいきました。