none
SQL Server 2008で「BACKUP LOG」コマンドについて RRS feed

  • 質問

  • SQL Server 2008で下記のコマンドを実行したら怒られました。

    BACKUP LOG データベース名 WITH FORMAT, TRUNCATE_ONLY
    DBCC SHRINKFILE (N'ログファイル名' , 1)

    ネットで調べてみましたが私の実力不足でよくわかりませんでした。
    いろいろと検索していたらこのサイトを見つけて、皆さんのお力を借りたいと思い、投稿しました。

    SQL Server 2005では下記のコマンドを実行してログファイルを圧縮していましたと聞きました。

    上記のコマンドと同等な動きをするコマンドを作成するにはどのようにすればいいのでしょうか。
    申し訳ありませんが宜しくお願いします。

     

    2011年2月24日 2:33

回答

  • 以下のページの 例 B で説明されています。
    SQL Server 2008以降では BACKUP LOG の WITH TRUNCATE_ONLY オプションが無くなっています。
    そのため、一度データベースの復旧モデルを「単純」にしてからログファイルを圧縮し、その後復旧モデルを元に戻すということになります。

    DBCC SHRINKFILE (Transact-SQL)http://msdn.microsoft.com/ja-jp/library/ms189493.aspx

     

    TRUNCATE_ONLYオプションが無くなったことについては、以下のページに記載されています。

    BACKUP (Transact-SQL)  ([説明] - [トランザクションログの切り捨て])
    http://msdn.microsoft.com/ja-jp/library/ms186865.aspx

    • 回答としてマーク 山本春海 2011年3月3日 1:27
    2011年2月24日 4:10

すべての返信

  • 以下のページの 例 B で説明されています。
    SQL Server 2008以降では BACKUP LOG の WITH TRUNCATE_ONLY オプションが無くなっています。
    そのため、一度データベースの復旧モデルを「単純」にしてからログファイルを圧縮し、その後復旧モデルを元に戻すということになります。

    DBCC SHRINKFILE (Transact-SQL)http://msdn.microsoft.com/ja-jp/library/ms189493.aspx

     

    TRUNCATE_ONLYオプションが無くなったことについては、以下のページに記載されています。

    BACKUP (Transact-SQL)  ([説明] - [トランザクションログの切り捨て])
    http://msdn.microsoft.com/ja-jp/library/ms186865.aspx

    • 回答としてマーク 山本春海 2011年3月3日 1:27
    2011年2月24日 4:10
  • 返信が遅くなってすみません。
    yottun8さんがアドバイスいただき、下記のコマンドを実行したらログファイルが圧縮っていうか、小さくする事ができました。
    ありがとうございます。

    USE データベース名
    GO
    ALTER DATABASE データベース名 SET RECOVERY SIMPLE;
    GO
    DBCC SHRINKFILE (ログファイル名 , 1);
    GO
    ALTER DATABASE データベース名 SET RECOVERY FULL;
    GO

    最後に1つ質問があります。
    下記の「BACKUP LOG」コマンドの「TRUNCATE_ONLY」オプションが無くなったのはわかりました。
    これに変わったのが下記のコマンドなのでしょうか。

    ALTER DATABASE データベース名 SET RECOVERY SIMPLE; (単純)
    ALTER DATABASE データベース名 SET RECOVERY FULL;  (完全)

    読んだんですが・・・
    すみませんが解説していただけませんでしょうか。

     

    2011年2月28日 7:33
  • 圧縮がうまくいったようで良かったです。

    で、質問についてですが、
    トランザクションログ圧縮を行うためにTRUNCATE_ONLYではなくこちらを利用する、という意味ならそうです。
    ただ、TRUNCATE_ONLYオプションを置き換えるためにこちらの方法が導入された、ということなら違います。

    変わったというよりは、TRUNCATE_ONLYを利用する方法が廃止されたので、もう一つの方法を使うというイメージです。
    復旧モデルを変えることでトランザクションログを解放するという方法はSQL Server 2005でも利用できます。
    (2005のときに2つの方法が用意されていたものが、2008になって1つに絞られたと言ったほうがいいかもしれません。)

    復旧モデルを「単純」にすると、ログ領域を自動的に解放して再利用してくれるような運用方法になります。
    ですので、SET RECOVERY SIMPLEにて「完全」から「単純」にモデル変更してやることで、空けられるログ領域を解放させます。
    結果として、ログ領域についてはBACKUP LOG WITH TRUNCATE_ONLYをした後と同じ状態になります。

    領域を解放してくれるので、その部分についてDBCC SHRINKFILEをして圧縮します。ここはもう1つの方法と同じです。

    最後に、「完全」から「単純」にしたものを元に戻してやるためにSET RECOVERY FULLを実行しています。

     

    「単純」モデルと「完全」モデルの違いなどの話は以下のページが参考になります。

    復旧モデルの概要
    http://msdn.microsoft.com/ja-jp/library/ms189275.aspx

     また、以下のページにあるように、単純復旧モデルから完全復旧モデルへ変更した後にはDBのバックアップをするようにしてください。

    単純復旧モデルからの切り替え
    http://msdn.microsoft.com/ja-jp/library/ms178052.aspx

    2011年2月28日 10:04