web-dev-qa-db-ja.com

ログファイルを縮小してもサイズは減少しない

50 MBのデータファイル(.mdf)と4.9 GBのログファイル(.ldf)を持つデータベースがあります。復旧モデルはFULLに設定されています。

ログファイルを縮小しようとしても、縮小されません。

データベースの圧縮は適切ではなく、実行すべきではないことはわかっています。しかし、それでもログファイルを縮小するためにそれをやろうとしています。

私が走ったとき

DBCC SQLPerf(logspace) 

ログのサイズは4932 MBであり、使用されるログ領域は98.76%です。

それから私はこのコマンドを試しました

USE <databasename>;
DBCC loginfo;

これで、ほとんどすべてのVLFが「ステータス2」になり、すべてが使用中であることを意味します。

ログをバックアップしてから、ログファイルを圧縮しようとしました。縮小してもサイズは小さくなりませんでした。

復旧モデルをSIMPLEに変更して、もう一度圧縮を試みましたが、これも役に立ちませんでした。

未処理のトランザクションを確認しました

DBCC opentran (database);

そして、現在トランザクションが開いていないことがわかりました。

ログファイルを圧縮できないのはなぜですか?どうすればこれを解決できますか?

24
Navaneet

ここに私自身の質問に対する答えがあります。

以下のクエリを実行して、ログファイルの再利用待機に関する情報を取得します。

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = 'DBName'

次の出力が得られました。

log_reuse_wait_desc
-------------------
REPLICATION 

レプリケーションを削除した後でも、レプリケーション関連のオブジェクトがデータベースに残っていました。

データベースから複製を削除するには、sp_removedbreplication に使える。しかし、レプリケーションはその時点ではアクティブではなく、実際にはレプリケーションはずっと前に削除されていたため、私たちにはうまくいきませんでした。

解決策は、SQL Serverのインポートオプションを使用して、データベースの内容を別のデータベースにインポートすることでした。

12
Navaneet

ログの循環的な性質が切り捨て後の縮小をどのように防ぐことができるかについては、SQL Serverログを圧縮する方法 SQLサーバーログを圧縮する方法 を参照してください。ログの最後の [〜#〜] lsn [〜#〜] がLDFの末尾にあるVLFを指す)をログに記録することは可能です。直感的には、ログの書き込みを生成して、ログを縮小できるようにログを進めます。

10
Remus Rusanu

ログを圧縮するためのステップは

SSMSまたはT-SQLのいずれかを介してトランザクションログをバックアップし、圧縮を実行する

データベース名を右クリックすると、SSMSのコマンドがタスクの下に表示されます

BACKUP LOG <Databasename> TO DISK N'<path\database_log.ldf';
GO

DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS

おそらくこれを複数回行う必要があります

アクションをブロックするトランザクションまたはジョブがある場合は、アクティビティモニターを使用してプロセスを特定し、プロセスを強制終了するか、SQLエージェントジョブアクティビティモニターを使用してジョブを終了します。

ソース: http://support.Microsoft.com/kb/907511

10
Cougar9000

データベースを圧縮する前に、データベースに設定されているバックアップモデルに応じて、最初にバックアップを作成する必要があります。

これを実行してみてください:

USE <databasename>
GO

BACKUP DATABASE <databasename> TO DISK '<absolute path goes here>\<databasename>.bak';
GO

または、SSMSからそれを実行して、利用可能なグラフィカルツールを使用することもできます(詳細については、こちらをご覧ください http://msdn.Microsoft.com/en-us/library/ms187510.aspx

データベースをバックアップしたら、圧縮できます。ただし、インデックスの断片化が頻繁に発生し、データの検索が遅くなるため、データベースを縮小することはお勧めできません。

お役に立てれば。

0
Toni Kostelac

実際にサイズを小さくするためにトランザクションログを取得するには、データベースとトランザクションログの両方のバックアップを2〜3回実行する必要があることがわかりました。完全復旧モデルで作成されたデータベースがあります。毎晩、データベースとトランザクションログのバックアップを実行しますが、トランザクションログは必然的に2〜3週間にわたって継続的に増加するようです。残りのディスク領域が1GBになると、トランザクションログが約30GBであることがわかります。私はマイクロソフトが推奨する手順に従いました。データベースとトランザクションログの両方をバックアップする4回目または5回目の反復の後、トランザクションログは最終的に余分なスペースを解放して縮小します。次に、戻って、作成した複数のバックアップを削除します。

0
SQL King