web-dev-qa-db-ja.com

トランザクションログファイルの圧縮で時々発生するエラー

毎時間実行されるトランザクションバックアップジョブがあります。

最初にデータベースログのバックアップを別のドライブに実行し、次にログを圧縮して古い.trnファイルを削除します。

Maintenance job

中間のタスクは、次のコードを使用してログファイルを圧縮します。

USE myDB
DBCC SHRINKFILE('myDB_LOG', 0, TRUNCATEONLY)

ただし、次のエラーが発生することがあります。

説明:クエリ「USE myDB DBCC SHRINKFILE( 'myDB_LOG' ...」の実行が次のエラーで失敗しました:「バックアップ、ファイル操作(ALTER DATABASE ADD FILEなど)およびデータベースでの暗号化の変更はシリアル化する必要があります。再発行してください現在のバックアップまたはファイル操作操作が完了した後のステートメント。データベースコンテキストが 'myDB'に変更されました。 "考えられる失敗の理由:クエリの問題、" ResultSet "プロパティが正しく設定されていない、パラメーターが正しく設定されていない、または接続が正しく確立されていません。終了エラーDTExec:パッケージの実行はDTSER_FAILURE(1)を返しました。開始:22:00:19終了:22:04:17経過:238.26秒。パッケージの実行は失敗しました。ステップは失敗しました。

なぜこうなった?

データベースログをバックアップおよび圧縮するより良い方法はありますか?

3
David Garcia

トランザクションログのバックアップを取った後、shrinkfileコマンドを実行する必要はありません。最終的に再び大きくなるログファイルを圧縮する必要性は何ですか?これは、あなたが毎日やっているという事実を考えると、私の意見では失敗です。

ログファイルが大きくなるたびに、トランザクションはこのイベントが完了するまで待機する必要があるため、SQLサーバーはこの増大が発生するまで静止し、ログファイル用のインスタントファイル初期化がないという事実を考慮すると、これらの増大イベントが完了するまでに時間がかかります。パフォーマンスを妨げます。

エラーメッセージについて

バックアップ、ファイル操作操作(ALTER DATABASE ADD FILEなど)、およびデータベースの暗号化の変更は、シリアル化する必要があります。現在のバックアップまたはファイル操作操作が完了した後でステートメントを再発行します

これは、データベースで何らかのバックアップ操作が実行されているときにdbcc shrinfileコマンドを実行しようとしたことを意味します。フルバックアップ、差分ログ、トランザクションログをバックアップできます。このすべてのメッセージは、バックアップ操作が完了したときにshrikfileコマンドを実行してみてくださいと言っています。次に、その時点で実行されていたバックアップを見つける必要があります。詳細については、errrlogまたはmsdbジョブ履歴を参照してください。

[〜#〜] bol [〜#〜] を参照する場合

データベースまたはトランザクションログのバックアップ中に実行できない操作には、次のものがあります。

•ADD FILEまたはREMOVE FILEオプションのいずれかを指定したALTER DATABASEステートメントなどのファイル管理操作。

•データベースの縮小またはファイル操作の縮小。これには自動縮小操作が含まれます。

7
Shanky