1

DBCC SHRINKFILE次のメッセージが表示された場合でも、ログ ファイルで手動で実行すると常に機能します。

'Cannot shrink log file 2 (Claim_Log) because all logical log files are in use.'

ただし、ジョブから実行すると、ログは約 3 分の 1 の時間しか圧縮されません。それ以外の場合は、大きいままです (約 150Gb)。上記以外のエラーはありません。これは私が使用するステートメントです:

DBCC SHRINKFILE (N'Claim_log' , 0, TRUNCATEONLY)

ジョブ ステップで [履歴にステップ出力を含める] を有効にしました。これが機能しない理由についてさらに情報を得るために他にできることはありますか?

編集:ログからの完全なメッセージは次のとおりです。

'Executed as user: *. Cannot shrink log file 2 (Claim_Log) because all logical
log files are in use. [SQLSTATE 01000] (Message 9008)  DBCC execution completed. 
If DBCC printed error messages, contact your system administrator. [SQLSTATE 01000]
(Message 2528).  The step succeeded.'

私はすでにユーザーをデータベースから追​​い出し、シングルユーザーモードに設定しようとしました。

4

3 に答える 3

3

最近、同様の問題を解決しました。sys.databases で、log_reuse_wait_desc が「レプリケーション」と等しいことがわかりました。どうやらこれは、ログ スペースを再利用する前に SQL Server がレプリケーション タスクの完了を待機していることを意味します。

ただし、レプリケーションは、DB でもサーバーでも使用されたことはありません。「sp_removedbreplication」を実行することで、状態をクリアできるはずです。ただし、私にとって「sp_removedbreplication」は問題を解決しませんでした。代わりに、データベースがレプリケーションの一部ではないと言って SQL が返されました...

ここで私の答えを見つけました:

基本的に、レプリケーションを作成し、すべてのレプリケーション ポインターをゼロにリセットする必要がありました。次に、作成した複製を削除します。すなわち

Execute SP_ReplicationDbOption {DBName},Publish,true,1
GO
Execute sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1
GO
DBCC ShrinkFile({LogFileName},0)
GO
Execute SP_ReplicationDbOption {DBName},Publish,false,1
GO
于 2011-07-06T04:10:53.997 に答える
2

最初にCHECKPOINTコマンドを発行してから、ログを圧縮してみてください

BOL から取得 ( http://msdn.microsoft.com/en-us/library/aa226036(SQL.80).aspx )

現在のデータベースのすべてのダーティ ページを強制的にディスクに書き込みます。ダーティ ページは、バッファ キャッシュに入力された後に変更されたデータ ページまたはログ ページですが、変更内容はまだディスクに書き込まれていません。ログの切り捨ての詳細については、トランザクション ログの切り捨てを参照してください。

于 2008-12-09T17:01:49.237 に答える