none
SQL Server 2012における復旧モデルの切り替えについて RRS feed

  • 質問

  • お世話になります。

    最近DBにSQL Server 2012を利用しているシステムの担当になりました。
    SQLは全くの素人なのですが、DB停止のトラブルに見舞われ対応が必要な状況です。
    構築時の担当者は皆いなくなってしまいました。
    過去の投稿や公開資料から対応手順を洗ってみましたが、
    一般的な手順として問題ないか確認したく存じます。
    恐縮ですが皆さまのアドバイスをいただけないでしょうか。

    【経緯】
    DBが停止しお客様へのサービスに影響が出たため調査したところ、
    トランザクションログの肥大化により自動拡張が詰まったことで
    DBが応答できなくなっておりました。
    その時はDBサーバを再起動し、自動拡張が完了しましたが、
    次回以降の自動拡張時に高確率で再発するものと見込んでおります。

    【現在の状態】
    復旧モデル:完全
    データベース容量:約12GB
    トランザクションログ容量:約340GB
    データベースバックアップ:定期スケジュール(毎日:フル)
    トランザクションログバックアップ:未スケジュール

    【希望する状態】
    復旧モデル:単純
    データベースバックアップ:定期スケジュール(毎日:フル)
    トランザクションログバックアップ:なし

    理由:
     DBに利用できるディスク容量はあまり余裕がなく、
     1日単位でリストアできれば充分であるため単純復旧モデルに切り替えたい

    【想定手順】
    ※切り戻し時以外はDBとそれを利用するシステムは稼働したまま行うことを想定しております
    ※省略しているオプションは既定値です
    ※事前にDBの完全バックアップは取得しております
    ※可能な限りManagement Studioのみで完結させたいです

    ①復旧モデル切り替え
    1.トランザクションログをバックアップする(ログの切り捨て)
     1.1.データベースを右クリックし[タスク]-[バックアップ]を選択
     1.2.[データベースのバックアップ]画面で下記の操作をする
       [ページの選択]-[全般]-[ソース]-[バックアップの種類]-[トランザクションログ]を選択
       [ページの選択]-[全般]-[ソース]-[バックアップ先]をバックアップ取得先のパスに設定
       [ページの選択]-[オプション]-[メディアに上書きします]-[既存のバックアップセットに追加する]を選択
       [ページの選択]-[オプション]-[信頼性]-[完了時にバックアップを検証する]を選択
       [OK]を押下
    2.復旧モデルを「完全」から「単純」に変更する
     2.1.データベースを右クリックし[プロパティ]を選択
     2.2.[データベースのプロパティ]画面で下記の操作をする
       [ページの選択]-[オプション]-[互換性レベル]-[単純]を選択
       [OK]を押下
    3.トランザクションログを圧縮する(未使用域の解放)
     3.1.データベースを右クリックし[タスク]-[圧縮]-[ファイル]を選択
     3.2.[ファイルの圧縮]画面で下記の操作をする
       [ページの選択]-[全般]-[データベースファイルおよびファイルグループ]-[ファイルの種類]-[ログ]を選択
       [ページの選択]-[全般]-[圧縮アクション]-[未使用領域を解放する]を選択
       [OK]を押下

    ②切り戻し(復旧モデル・DBの状態を作業前に戻す)
    1.DB利用システムを停止する
    2.復旧モデルを「単純」から「完全」に変更する
     2.1.データベースを右クリックし[プロパティ]を選択
     2.2.[データベースのプロパティ]画面で下記の操作をする
       [ページの選択]-[オプション]-[互換性レベル]-[完全]を選択
       [OK]を押下
    3.データベースを復元する
     3.1.データベースを右クリックし[タスク]-[復元]-[データベース]を選択
     3.2.[データベースの復元]画面で下記の操作をする
       [ページの選択]-[全般]-[復元プラン]-[復元するバックアップセット]が正しいことを確認
       [ページの選択]-[全般]-[転送先]-[復元先]が事前バックアップの時刻であるを確認
       [ページの選択]-[オプション]-[ログ末尾のバックアップ]-[復元前にログ末尾のバックアップを実行する]を選択
       [ページの選択]-[オプション]-[ログ末尾のバックアップ]-[復元前にログ末尾のバックアップを実行する]-
         [ソースデータベースを復元中の状態にしておく]の選択を外す
       [OK]を押下

    以上

    2015年5月25日 3:18

回答

  • 特段の問題は無いかと思います。

    1. 復旧の要件から不要かと思います。
    ①3. 記憶が確かではありませんが、不要なはずです。復旧モードを変更した際にログが削除されるはずです。
    ① の手順後に以下の URL にある「ステップ 3」を実行してください。ファイルサイズが小さくならない場合は、数時間から数日後に再度実行してください。繰り返しているうちに、じきに小さくなります。
    http://blogs.msdn.com/b/jpsql/archive/2013/07/30/manegement-studio-ldf.aspx
    ②1. 停止しなくても作業できますが、停止していけない理由は無いので業務要件に応じての判断かと思います。
    ②3. ②1. で DB を停止した場合は復元前のログ末尾のバックアップは実質的には不要ですが、実施してはいけない理由は無いのでそのままでも良いかと思います。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク casavita 2015年5月25日 6:48
    2015年5月25日 5:42

すべての返信

  • 特段の問題は無いかと思います。

    1. 復旧の要件から不要かと思います。
    ①3. 記憶が確かではありませんが、不要なはずです。復旧モードを変更した際にログが削除されるはずです。
    ① の手順後に以下の URL にある「ステップ 3」を実行してください。ファイルサイズが小さくならない場合は、数時間から数日後に再度実行してください。繰り返しているうちに、じきに小さくなります。
    http://blogs.msdn.com/b/jpsql/archive/2013/07/30/manegement-studio-ldf.aspx
    ②1. 停止しなくても作業できますが、停止していけない理由は無いので業務要件に応じての判断かと思います。
    ②3. ②1. で DB を停止した場合は復元前のログ末尾のバックアップは実質的には不要ですが、実施してはいけない理由は無いのでそのままでも良いかと思います。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク casavita 2015年5月25日 6:48
    2015年5月25日 5:42
  • とても困っていたので丁寧な回答をいただけて本当にうれしく思います。

    ご案内いただいた内容をもとに実施してみます。

    ありがとうございました。

    2015年5月25日 6:56