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

はじめに

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

詳細

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


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

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


トランザクション ログがいっぱいになった場合は、トランザクション ログ ファイルのバックアップを直ちに作成してください。トランザクション ログ ファイルのバックアップの作成中に、トランザクション ログのアクティブでない部分が SQL Server により自動的に切り捨てられます。トランザクション ログ ファイルのアクティブでない部分には、完了したトランザクションが含まれます。そのため、そのトランザクション ログ ファイルが以降の復旧処理で SQL Server によって使用されることはありません。トランザクション ログの拡張でさらに多くの領域を使用できるようにするのではなく、トランザクション ログ内の切り捨てられたアクティブでない領域を再利用します。

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

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

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

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] エラー メッセージ "ログ ファイルを圧縮できません" がトランザクション ログ ファイルを圧縮する際に表示される

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 INDEXDEFRAG ステートメントでは、DBCC DBREINDEX ステートメントと異なり、ロックが長時間維持されません。

    SQL Server 2000 でのインデックス最適化については、次のマイクロソフト Web サイトを参照してください。
トランザクション ログ ファイルに関する詳細情報
SQL Server 2000 および SQL Server 2005 では、各データベースに 1 つ以上のデータ ファイルと 1 つのトランザクション ログ ファイルが格納されています。データ ファイルには、データが物理的に格納されます。トランザクション ログ ファイルには、SQL Server データベースで行われたすべての変更の詳細と、各変更を行ったトランザクションの詳細が格納されます。トランザクションの整合性は SQL Server に本来備わっている必要不可欠な性質とされているので、SQL Server では、トランザクションの詳細のログ記録を無効にできません。

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

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

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

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


その他のリソース

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


関連情報

復旧処理の実行中にさらに多くのディスク領域が必要になった場合のトラブルシューティングについては、SQL Server Books Online の「ディスク領域の不足」を参照してください。トランザクション ログ アーキテクチャについては、SQL Server Books Online の以下のトピックを参照してください。
  • トランザクション ログ アーキテクチャ
  • トランザクション ログの論理アーキテクチャ
  • トランザクション ログの物理アーキテクチャ
SQL Server 2000 の復旧モデルの詳細については、SQL Server Books Online の以下のトピックを参照してください。
  • 復旧モデルの選択
  • 単純復旧
  • 完全復旧
  • 一括ログ復旧
  • 復旧モデルの切り替え

プロパティ

文書番号:873235 - 最終更新日: 2014/01/27 - リビジョン: 1

フィードバック