SQL Server データベースのいっぱいになったトランザクション ログからの回復

適用対象: Microsoft SQL Server 2005 Standard EditionMicrosoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise Edition

はじめに


トランザクション ログがいっぱいになると、 Microsoft SQL Server データベースが使用不能になる場合があります。 この資料では、トランザクション ログが大きくなりすぎた場合に、トランザクション ログを切り捨てて縮小する方法について説明します。 トランザクション ログが予期せず増加しないようにする方法についても説明します。

詳細情報


手順 1: トランザクション ログのサイズを縮小する


トランザクション ログがいっぱいになったら、トランザクション ログのサイズを縮小する必要があります。 これを行うには、トランザクション ログ内の非アクティブなトランザクションを切り捨ててから、トランザクション ログ ファイルを縮小する必要があります。

:トランザクション ログは、データベースのトランザクションの整合性を維持するために非常に重要です。 データベースとトランザクション ログのバックアップを作成した後でも、トランザクション ログ ファイルを削除しないでください手順 2: トランザクション ログ内のアクティブでないトランザクションを切り捨てる方法


トランザクション ログがいっぱいになったら、直ちにトランザクション ログ ファイルをバックアップします。 トランザクション ログ ファイルのバックアップ中に、SQL Server はトランザクション ログ ファイルの非アクティブな部分を自動的に切り捨てます。 トランザクション ログ ファイルの非アクティブな部分には完了したトランザクションが含まれているため、回復処理中にトランザクション ログ ファイルが SQL Server によって使用されなくなります。 SQL Server は、トランザクション ログの拡張を継続して領域を使用する代わりに、この切り捨てられた非アクティブな領域をトランザクション ログで再利用します。

トランザクション ログのバックアップ作成時、およびトランザクション ログのバックアップ復元時に考慮する必要がある問題の詳細については、 SQL Server Books Online の以下のトピックを参照してください。
  • トランザクション ログのバックアップ
  • トランザクション ログ バックアップと復元
Truncate メソッドを使用して、トランザクション ログ ファイルから非アクティブなトランザクションを削除することもできます。 トランザクション ログの切り捨てに関する詳細については、SQL Server Books Online の「Truncating the transaction log」トピックを参照してください。

重要> : トランザクション ログ ファイルを手動で切り捨てた場合は、トランザクション ログのバックアップを作成する前にデータベース全体のバックアップを作成する必要があります。

トランザクション ログ ファイルを切り捨てる際に発生する可能性のある問題の詳細については、以下のサポート技術情報番号をクリックしてください。

62866 SQL トランザクション ログが切り捨てられない原因

手順 3: トランザクション ログ ファイルを圧縮する方法


バックアップ操作または Truncateメソッドを使用しても、ログ ファイルのサイズは小さくなります。 トランザクション ログ ファイルのサイズを小さくするには、トランザクション ログ ファイルを縮小する必要があります。 トランザクション ログ ファイルを要求されたサイズに縮小し、未使用のページを削除するには、DBCC SHRINKFILE 操作を使用する必要があります。 DBCC SHRINKFILE Transact-SQL ステートメントは、ログ ファイルの非アクティブな部分のみを縮小できます。

: ログの切り捨てとログ ファイルの使用されていない領域の縮小を DBCC SHRINKFILE Transact-SQL ステートメントのみで実行することはできません。

トランザクション ログ ファイルの縮小の詳細については、SQL Server Books Online の以下のトピックを参照してください。
  • トランザクション ログの圧縮
  • DBCC SHRINKFILE
SQL Server 2000 でトランザクション ログ ファイルを圧縮する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

272318 DBCC SHRINKFILE による SQL Server 2000 のトランザクション ログの圧縮

トランザクション ログ ファイルを圧縮する際に発生する可能性のある問題の詳細については、以下のサポート技術情報番号をクリックしてください。

814574 PRB: Error message (エラー メッセージ): 「ログ ファイルを州苦笑できません」がトランザクション ログ ファイルを縮小する際に表示される

324432 PRB: text 列、ntext 列、または image 列にデータがまばらに入力されていると、DBCC SHRINKFILE コマンドと SHRINKDATABASE コマンドが機能しないことがある


手順 4: トランザクション ログ ファイルが突然拡張されないようにする方法


トランザクション ログ ファイルが突然拡張されないようにするには、以下のいずれかの方法を使用します。
  • トランザクション ログ ファイルのサイズを大きな値に設定して、トランザクション ログ ファイルが自動的に拡張されるのを回避します。
  • 最適なメモリ サイズを綿密に検討した後、パーセンテージではなく MB 単位で、トランザクション ログ ファイルを自動的に拡張するように構成します。

    自動拡張オプションを構成する際の注意事項の詳細については、以下のサポート技術情報番号をクリックしてください。

    315512 自動拡張と自動縮小を設定するときの注意事項

  • 復旧モデルを変更します。 障害やデータの破損が発生した場合は、データベースを回復し、データベースのデータ整合性とトランザクションの整合性が維持されるようにする必要があります。 データベース内のデータの重要度に基づいて、次のいずれかの復旧モデルを使用して、データのバックアップ方法とデータ損失の危険性を判断できます。
    • 単純復旧モデル (シンプル)
    • 完全復旧モデル (フル)
    • 一括ログ復旧モデル (一括ログ記録)

    単純復旧モデルを使用することにより、データベースの最新のバックアップにデータベースを復旧できます。 もしくは、完全復旧モデル、または一括ログ復旧モデルを使用して、障害が発生した時点までデータベースを復旧することもできます。 これを行うには、トランザクション ログ ファイルのバックアップを使用してデータベースを復元します。

    既定では、SQL Server 2000 および SQL Server 2005 では、SQL Server データベースの復旧モデルは完全復旧モデルに設定されています。 完全復旧モデルでは、トランザクション ログの定期的なバックアップを使用して、トランザクション ログ ファイルのサイズがデータベース のサイズに比例して増加するのを防ぎます。 ただし、トランザクション ログの定期的なバックアップを実行しないと、トランザクション ログ ファイルがディスクがいっぱいになり、SQL Server データベースでデータ変更操作を実行できない場合があります。

    障害復旧操作の実行中にトランザクション ログ ファイルを使用しない場合は、復旧モデルを完全復旧モデルから単純復旧モデルに変更できます。
  • トランザクション ログ ファイルのバックアップを定期的に作成して、トランザクション ログ内のアクティブでないトランザクションを削除します。
  • トランザクションのサイズが小さくなるように設計します。
  • コミットされていないトランザクションの実行が無限に継続されないようにします。
  • 統計の自動更新が毎日実行されるように構成します。
  • 運用環境でワークロードのパフォーマンスを向上させるためにインデックスを最適化するには、DBCC DBREINDEX Transact-SQL ステートメントの代わりに DBCC INDEXDEFRAG Transact-SQL ステートメントを使用します。 DBCC DBREINDEX ステートメントを実行すると、SQL Server データベースが完全復旧モードのときにトランザクション ログが大幅に拡張されることがあります。 さらに、DBCC INDEXDEGRAG ステートメントでは、DBCC DBREINDEX ステートメントとは異なり、長期間にわたってロックを保持することはありません。

    SQL Server 2000 でのインデックスの最適化の詳細については、下記マイクロソフト Web サイトを参照してください。
トランザクション ログ ファイルに関する詳細情報
SQL Server 2000 および SQL Server 2005 では、各データベースに少なくとも 1 つのデータ ファイルと 1 つのトランザクション ログ ファイルが含まれています。 SQL Server は、データファイルにデータを物理的に格納します。 トランザクション ログ ファイルには、SQL Server データベースで実行したすべての変更の詳細と、各変更を実行したトランザクションの詳細が格納されます。 トランザクションの整合性は SQL Serverの基本的な固有の特性と見なされるため、SQL Server では、トランザクションの詳細のログ記録をオフにすることはできません。

トランザクション ログ ファイルは、仮想ログ ファイルと呼ばれる小さなセグメントに論理的に分割されます。 SQL Server 2000 では、必要に応じて拡張するようにトランザクション ログ ファイルを構成できます。 トランザクション ログの拡張は、ユーザーが管理することも、使用可能なすべてのディスク領域を使用するように構成することもできます。 トランザクション ログ ファイルの切り捨てやトランザクション ログ ファイルの拡張など、SQL Server がトランザクション ログ ファイルのサイズに加えた変更は、仮想ログ ファイルの単位で実行されます。

SQL Server データベースに対応するトランザクション ログ ファイルがいっぱいになり、トランザクション ログ ファイルが自動的に拡張されるようにオプションを設定した場合、トランザクション ログ ファイルは仮想ログ ファイルの単位で拡張されます。 トランザクション ログ ファイルが非常に大きくなり、ディスク領域が不足することがあります。 ログ ファイルが使用可能なディスク領域をすべて使用し、それ以上拡張できないまでトランザクション ログ ファイルが大きくなると、データベースに対してデータ変更操作を実行できなくなります。 また、トランザクション ログを拡張するための領域が不足しているため、SQL Server がデータベースを疑わしいとマークすることがあります。

トランザクション ログ ファイルが予期しない大きさになる状況の詳細については、以下のサポート技術情報番号をクリックしてください。

317375 SQL Server でトランザクション ログが予期しない大きさになるか、いっぱいになる


その他のリソース


トランザクション ログのサイズを縮小する方法の詳細については、以下のマイクロソフト Web サイトを参照してください。


関連情報


回復処理中の追加のディスク領域要件のトラブルシューティングの詳細については、SQL Server オンライン ブックの「ディスク領域が不足しています」を参照してください。 トランザクション ログ ファイルの圧縮の詳細については、SQL Server Books Online の以下のトピックを参照してください。
  • トランザクション ログ アーキテクチャ
  • トランザクション ログの論理アーキテクチャ
  • トランザクション ログの物理アーキテクチャ
SQL Server 2000 の復旧モデルの詳細については、SQL Server Books Online の以下のトピックを参照してください。
  • 復旧モデルの選択
  • 単純復旧
  • 完全復旧
  • 一括ログ復旧
  • 復旧モデルの切り替え