none
SQLサーバ データベース圧縮失敗について (Windows Server2012 R2 + Microsoft SQL Server2014) RRS feed

  • 質問

  • 質問させていただきます。

    表題についてです。

    データベースが肥大化してきたので、SQL Server Management Studioを利用し、

    画面左、[オブジェクトエクスプローラ] で [データベース] から 圧縮したいデータベースを選択し、

    右クリックで [タスク] [圧縮] [データベース] を選択し、データベースの圧縮を行ったところ、

    処理終了まで1日かかり、以下のようなエラーがでてきました。

    なにかこちらの回避方法について情報をお持ちの方、ご教示のほど、

    なにとぞよろしくお願いいたします。※圧縮作業前に100GBほど、ストレージを追加して実施しております。

    (300GBに100GB追加し作業を実施)

    ----以下エラー文-----

    ※画像のリンク貼り付けができなかったため、文字にて失礼いたします。

    データベース"○○"の圧縮に失敗しました。(Microsoft.SqlServer.Smo)

    追加情報

    →Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。

     (Microsoft.SqlServer.ConnectionInfo)

      →ロック要求がタイムアウトしました。

       DBCC SHRINKDATABASE:データベース ID 5ファイル ID2がスキップされました。ファイルに再利用する

       空き領域が不足しています。

       DBCCの実行が完了しました。DBCCがエラーメッセージを出力した場合は、システム管理者に

       相談してください。(Microsoft SQL Server、エラー:1222)

    2021年3月19日 2:12

回答

  • データベースが肥大化とありますが、圧縮したいデータベースは データベース物理ファイル(.mdf)、トランザクションログファイル (.ldf) の何れになりますでしょうか?

    仮に トランザクションログファイル (.ldf) の場合は、以下の URL が参考になるかと思います。

    https://www.nobtak.com/entry/tlogmain

    https://www.nobtak.com/entry/tlogsr

    エラー 1222 は、エラーにある通り、ロック要求のタイムアウトになりますが、エラーメッセージの詳細に「データベース ID 5 ファイル ID2 がスキップされました。ファイルに再利用する空き領域が不足しています。」

    とあるため、おそらくトランザクションログファイル (.ldf)が、トランザクションログのバックアップを実施していないなどの要因により肥大化し、空き領域が不足している状態になっているのではないかと推測しています。


    2021年3月19日 6:58
  • ゆ_07さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    データベースの縮小は良い提案ではありませんので、そうしないことをお勧めします。
    データベースを縮小すると断片化が進むため、インデックスを再構築すると、データベースがすぐに元に戻り、空のスペースが再び残り、サイクルは永続し続けます。
    詳細については、このブログを参照してください。

    データベースのサイズを縮小したい場合は、ログファイルを縮小することをお勧めします。
    トランザクションログを縮小するには、以下の手順に従ってください。

    1.データベースの完全バックアップを実行します
    2.トランザクションログのバックアップを実行します。トランザクションログを縮小する前に、マルチトランザクションログのバックアップを実行しなければならない場合があります。
    3.トランザクションログを縮小します。「データベース」->タスク->縮小->ファイル->ファイルタイプを「ログ」に変更->「未使用領域を解放する前にページを再編成」を選択します。

    トランザクションログを縮小できない場合は、次のステートメントを実行して、トランザクションログを縮小できない理由を確認してください。
    SELECT log_reuse_wait_desc FROM sys.databases WHERE name='<database name>'


    結果が「NOTHING」以外の場合は、対応する操作を行ってください。次に、手順2と3をもう一度試してください。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク ゆ_07 2021年4月10日 6:45
    2021年3月23日 6:24
    モデレータ

すべての返信

  • データベースが肥大化とありますが、圧縮したいデータベースは データベース物理ファイル(.mdf)、トランザクションログファイル (.ldf) の何れになりますでしょうか?

    仮に トランザクションログファイル (.ldf) の場合は、以下の URL が参考になるかと思います。

    https://www.nobtak.com/entry/tlogmain

    https://www.nobtak.com/entry/tlogsr

    エラー 1222 は、エラーにある通り、ロック要求のタイムアウトになりますが、エラーメッセージの詳細に「データベース ID 5 ファイル ID2 がスキップされました。ファイルに再利用する空き領域が不足しています。」

    とあるため、おそらくトランザクションログファイル (.ldf)が、トランザクションログのバックアップを実施していないなどの要因により肥大化し、空き領域が不足している状態になっているのではないかと推測しています。


    2021年3月19日 6:58
  • 素人質問で申し訳ございませんでした。

    私自身よくわかっていないため、ファイルの形式を含め、

    いただいたURLを参照させていただき、勉強させいていただいてから、

    再度実施してみたいと思います。

    ご丁寧に回答していただきありがとうございます。

    2021年3月19日 14:40
  • ゆ_07さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    データベースの縮小は良い提案ではありませんので、そうしないことをお勧めします。
    データベースを縮小すると断片化が進むため、インデックスを再構築すると、データベースがすぐに元に戻り、空のスペースが再び残り、サイクルは永続し続けます。
    詳細については、このブログを参照してください。

    データベースのサイズを縮小したい場合は、ログファイルを縮小することをお勧めします。
    トランザクションログを縮小するには、以下の手順に従ってください。

    1.データベースの完全バックアップを実行します
    2.トランザクションログのバックアップを実行します。トランザクションログを縮小する前に、マルチトランザクションログのバックアップを実行しなければならない場合があります。
    3.トランザクションログを縮小します。「データベース」->タスク->縮小->ファイル->ファイルタイプを「ログ」に変更->「未使用領域を解放する前にページを再編成」を選択します。

    トランザクションログを縮小できない場合は、次のステートメントを実行して、トランザクションログを縮小できない理由を確認してください。
    SELECT log_reuse_wait_desc FROM sys.databases WHERE name='<database name>'


    結果が「NOTHING」以外の場合は、対応する操作を行ってください。次に、手順2と3をもう一度試してください。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク ゆ_07 2021年4月10日 6:45
    2021年3月23日 6:24
    モデレータ
  • ゆ_07さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    ご質問いただいた件ですが、その後いかがでしょうか。
    NOBTAさんから寄せられた投稿はお役に立ちましたか。
    参考になった投稿には [回答としてマーク] をお願い致します。

    設定いただくことで、
    他のユーザーもお役に立つ回答を見つけやすくなります。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年3月29日 1:55
    モデレータ