現在オフラインです。再接続するためにインターネットの接続を待っています

SQL Server 2005 で DBCC SHRINKFILE ステートメントを使用してトランザクション ログ ファイルを圧縮する方法

中小企業のお客様は、中小企業向けサポートサイトで問題解決コンテンツや学習リソースもご利用ください。
はじめに
Microsoft SQL Server 2005 では、データベース内のトランザクション ログ ファイルを圧縮して未使用のページを削除できます。データベース エンジンにより、領域が効率的に再利用されます。ただし、トランザクション ログ ファイルのサイズが想定していた以上に増大した場合、手動でトランザクション ログ ファイルを圧縮する必要があります。

この資料では、DBCC SHRINKFILE ステートメントを使用して、SQL Server 2005 データベースの完全復旧モデルで、トランザクション ログ ファイルを手動で圧縮する方法について説明します。SQL Server 2005 でトランザクション ログ ファイルの圧縮に使用する方法は、SQL Server 2000 でトランザクション ログ ファイルの圧縮に使用する方法と異なる場合があります。SQL Server 2000 でトランザクション ログ ファイルを圧縮する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
272318 INF: DBCC による SQL Server 2000 のログ圧縮
詳細
SQL Server 2005 で圧縮操作 (DBCC SHRINKFILE) を実行すると、指定したトランザクション ログ ファイルを必要なサイズに直ちに圧縮する処理が試行されます。完全復旧モデルでトランザクション ログ ファイルを手動で圧縮するには、最初にトランザクション ログ ファイルをバックアップしてから、DBCC SHRINKFILE ステートメントを使用して、トランザクション ログ ファイルを圧縮します。

通常、SQL Server 2005 でのトランザクション ログ ファイルの圧縮は、SQL Server 2000 でのトランザクション ログ ファイルの圧縮より高速です。それは、SQL Server 2005 のログ マネージャでは、物理ディスク記憶域の順序に従って、アクティブでない仮想ログ ファイルの作成または再利用が行われるためです。そのため、通常、トランザクション ログ ファイルのアクティブでない部分は、そのファイルの末尾に位置します。

たとえば、あるトランザクション ログ ファイルに 100 の仮想ログ ファイルがあり、2 つの仮想ログ ファイルのみが使用されているとします。SQL Server 2000 では、最初に使用された仮想ログ ファイルはトランザクション ログ ファイルの先頭に保存され、2 番目に使用された仮想ログ ファイルはトランザクション ログ ファイルの中間に保存されることがあります。トランザクション ログ ファイルを 2 つの仮想ログ ファイルのみに圧縮するため、SQL Server によって 2 番目の仮想ログ ファイルの残りの部分にダミー ログ エントリが設定されます。SQL Server は論理ログの開始位置を、ログ マネージャで指定された、次に使用可能な仮想ログ ファイルに移動します。ログ マネージャは、最後にアクティブだった仮想ログ ファイルのすぐ前、トランザクション ログ ファイルの中間に、仮想ログ ファイルを作成する場合があります。この場合、トランザクション ログ ファイルを 2 つの仮想ログ ファイルに圧縮するには、ログのバックアップ操作および圧縮操作を複数回実行する必要があります。この例で最悪の場合、トランザクション ログ ファイルを 2 つの仮想ログ ファイルに圧縮するために、50 回のログ バックアップ操作と 50 回の圧縮操作を行う必要があります。

しかし SQL Server 2005 では、DBCC SHRINKFILE ステートメントを 1 回実行するだけで、トランザクション ログ ファイルを 2 つの仮想ログ ファイルに直接圧縮できます。これが可能であるのは、SQL Server 2005 ログ マネージャが物理ディスク記憶域の順序に従って 2 つの仮想ログ ファイルを作成するためです。これらの仮想ログ ファイルは共に、トランザクション ログ ファイルの先頭に位置します。

SQL Server 2005 で空き領域のほとんどないトランザクション ログ ファイルを圧縮しようとする場合、ログのバックアップ操作を追加で実行することが必要な場合があります。追加のログ バックアップ操作により、トランザクション ログ ファイルが切り詰められ、ファイルのサイズが小さくなります。このログ バックアップ操作は、SQL Server 2000 でトランザクション ログ ファイルを圧縮するために実行する 3 つの手順とは別です。詳細については、「はじめに」に記載されている「サポート技術情報」 (Microsoft Knowledge Base) の資料を参照してください。SQL Server 2005 で空き領域のほとんどないトランザクション ログ ファイルを圧縮するには、次の手順を実行します。
  1. トランザクション ログ ファイルをバックアップしてほとんどのアクティブな仮想ログ ファイルを非アクティブにします。これにより、アクティブでない仮想ログ ファイルは後の手順で削除できます。これを行うには、次のような Transact-SQL ステートメントを実行します。
    BACKUP LOG <DatabaseName> TO DISK = '<BackupFile>'
    : このステートメント内の <DatabaseName> は、バックアップするデータベース名に置き換えます。<BackupFile> は、バックアップ ファイルの完全なパスに置き換えます。

    たとえば、次の Transact-SQL ステートメントを実行します。
    BACKUP LOG TestDB TO DISK='C:\TestDB1.bak'
  2. トランザクション ログ ファイルを圧縮します。これを行うには、次のような Transact-SQL ステートメントを実行します。
    DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS
    : このステートメント内の <FileName> は、トランザクション ログ ファイルの名前に置き換えます。<TargetSize> は、トランザクション ログ ファイルの圧縮後のサイズに置き換えます。このサイズは合理的な数値にする必要があります。たとえば、トランザクション ログ ファイルを 2 つの仮想ログ ファイルのサイズより小さいサイズに圧縮することはできません。
  3. DBCC SHRINKFILE ステートメントによりトランザクション ログ ファイルが目標のサイズに圧縮されない場合は、手順 1. に記載されている BACKUP LOG ステートメントを実行して、アクティブでない仮想ログ ファイルを増やします。
  4. 手順 2. に記載されている DBCC SHRINKFILE ステートメントを実行します。この操作後、トランザクション ログ ファイルのサイズは目標サイズに近づきます。
要約すると、次の仮想ログ ファイルを選択するログ マネージャのアルゴリズムは SQL Server 2005 で変更されました。そのため、SQL Server 2005 のトランザクション ログ ファイルの圧縮方法は、SQL Server 2000 のトランザクション ログ ファイルの圧縮方法と異なる場合があります。
  • ログ ファイルに空き領域がたくさんあれば、SQL Server 2005 でのトランザクション ログ ファイルの圧縮は、SQL Server 2000 でのトランザクション ログ ファイルの圧縮より高速です。
  • ログ ファイルに空き領域がなければ、SQL Server 2005 でのトランザクション ログ ファイルの圧縮は、SQL Server 2000 でのトランザクション ログ ファイルの圧縮と同じです。
  • ログ ファイルに空き領域がほとんどなければ、SQL Server 2005 では、SQL Server 2000 の場合より多くのログのバックアップ操作を実行することが必要な場合があります。
関連情報
詳細については、Microsoft SQL Server 2005 Books Online の以下のトピックを参照してください。
  • トランザクション ログの圧縮
  • DBCC SHRINKFILE (Transact-SQL リファレンス)
  • トランザクション ログの切り捨て
T-LOG
プロパティ

文書番号:907511 - 最終更新日: 07/16/2013 01:47:00 - リビジョン: 3.1

  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • kbsqlmanagementtools kbsql2005engine kbinfo KB907511
フィードバック
> t.com/ms.js" '="">