1

新しいデータベースが作成され、ログファイルが非常に過去に作成されましたが、「バックアップ」が原因でログがいっぱいであるというエラーメッセージが表示されます。

このデータベースとSERVERの他のデータベースの違いを調べたところ、すべてのデータベースでlog_reuse_waitが0でlog_reuse_wait_descが何もないこと、データベースでlog_reuse_waitが0でlog_reuse_wait_descがLOG_BACKUPであることがわかりました。

データベースのこのプロパティを0に変更したいのですが、何もしません。どうやってやるの?

4

4 に答える 4

5

これは読み取り専用のステータス変数です。この時点でログを切り捨てることができない理由がわかります。

値を変更するだけでなく、その状態の原因を取り除く必要があります (これは不可能です)。

データベース ログをバックアップするか、SIMPLE回復モードに切り替えます。その意味を理解するためだけに、おそらく両方について少し読む必要があります。

于 2012-11-22T20:06:48.620 に答える
2

David W. のスクリプトは、私にとってはうまくいきませんでした。(SQL Server 2008 r2)

少し修正する必要がありました。スクリプトをそのまま使用すると、データベース [master] にそのようなファイルはありませんでしたというメッセージが表示されました。David W. が推奨するように DATABASE を変更してから、ターゲット データベースに切り替えてDBCC SHRINKFILE()コマンドを実行します。

また、最初の引数DBCC SHRINKFILE()は、データベース ログ ファイルの論理名である必要があります。これは、次のスクリプトで次のように表されます。logical_file_name_for_LOG

USE [master] 
GO  
ALTER DATABASE <db name> SET RECOVERY full  
GO
ALTER DATABASE <db name> SET RECOVERY SIMPLE WITH NO_WAIT;
GO
USE [db name]
GO
DBCC SHRINKFILE('<logical_file_name_for_LOG>', 0, TRUNCATEONLY)
于 2013-11-14T17:05:43.017 に答える
1

私は解決策を見つけました。データベースがSIMPLEモードであっても待機するBACKUP_LOGため、リカバリモードをに変更してからに戻す必要がありFULLますSIMPLEno wait

USE [master] 
GO  
ALTER DATABASE <db name> SET RECOVERY full  
GO
ALTER DATABASE <db name> SET RECOVERY SIMPLE WITH NO_WAIT;
GO
USE [db name]
GO
DBCC SHRINKFILE('<log file name>', 0, TRUNCATEONLY)
于 2012-11-25T15:33:29.953 に答える
0

私はこれが古いことを知っていますが、答えは間違っています。
データベースにリカバリ モードFULLがあり、それが意図されている場合は、それを に変更しないでくださいsimple

log_reuse_wait_desc、ログを再利用または縮小する前の状態を示しています。つまりLOG_BACKUP、トランザクション ログを圧縮するには、最初にトランザクション ログをバックアップしてから圧縮するか、ログをバックアップして SQLServer にログ領域を再利用させる必要があります。

log_reuse_wait_desc状態の説明はここにあります

于 2019-05-28T12:35:34.893 に答える