SQL Server のトランザクションログに注意

運用ネタです。
SQL ServerでもOracleでも、おおよそRDBと呼ばれるものは、「トランザクションログ」を持ちます(言い方は様々ですが)。これは、Rollbackしたり、障害からのRollforwardとかに必要です。
このトランザクションログは、基本的には、どんどん増えていくものです。ログですから、どんどん記録するのが仕事ですな。かといって、無制限に増えても困るので、ある時点で「切り捨て」が行われます。
さて、お使いのSQL Serverのデータベースで「復旧モデル」はどうなっていますか?多くの場合には「完全」になっていると思います。
復旧モデルが「完全(フル)」の場合、「切り捨て」動作は、データベースのバックアップ時に行われます。「単純(シンプル)」の場合には、自動的に行われます(正確には「チェックポイント」ごと)。
と、言うことは、「完全」になっていて、バックアップを取っていない(あるいは取れていない)状態では、トランザクションログは増え続けます。
増え続けるとどうなるかと言うと、徐々にパフォーマンスに悪影響を及ぼし始め(そりゃ巨大な物理ファイルになりますから…)、最終的には物理ディスクを使い切って、SQL Serverが Give upしてしまいます(シングルモード起動となってしまうようです)。
最近では、サーバーのバックアップも「Disk to Disk」でゴッソリ取れるようになったようですが、この辺りはウッカリ見落として悲劇が起きる元となります。
きちんとDBとしてバックアップを取りましょうと言うお話でした。
参考資料はコチラ
[INF] SQL Server でトランザクション ログが予期しない大きさになるか、いっぱいになる-KB317375 (7.0/2000向け)
SQL Server 2005 Books Online トランザクション ログ領域の管理 (2005向け)
SQL Server 2005 Books Online 満杯になったトランザクション ログの管理

SQL Server のトランザクションログに注意” への4件のコメント

  1. 昔、調べたような気がしますが忘れ去ったことをお聞きしてよろしいですか?
    オラクルのテンポラリテーブル使った場合ってトランザクションログに残りましたっけ?

  2. えーっと、Oracleのテンポラリって、"Global Temporary"のことですか?
    REDOログには残りませんよ。
    でもって、SQL Serverとの決定的な違いは、
    ・SQL Serverでは、ストアド内などで"Create #tHoge …"と、一時表を作成できる
    ・Oracleでは、DMLとDDLを混在させられないので、予めCreate Tableしなければいけない
    ということです。

  3. それって別に ver 2005 に限った話じゃないと思う。< 本文
    バックアップモデルはこのほか bulk copy/select into のオペレーションをまとめ記録するための「一括記録」モデルがあります。
    完全モデルとして、Disaster Recovery を考え、やっぱ、最低限月一度はフルを取っておいて、差分やファイル単位のバックアップも適宜拾っておくと、
    「フルバックアップ」⇒拾ったブツ⇒「トランザクションログのバックアップ」⇒「活きているトランザクションログを即座に取ったバックアップ」
    と戻す際に、トランザクションログの再生に要する時間をだいぶ減らすことが出来たんじゃないかと記憶。
    「復旧モデル」が「シンプル」だったりするとトランザクションログは意味を持たないので、フルバックアップを取る以外のオプションはないです。
    つまり、障害なりミスオペレーションなどがなんかあっても、「日付と時刻を指定した復元」などは一切出来ない。
    トランザクションログでディスクフルって実はよく耳にする話ですが、そういう悲劇を経ようと経まいと。Microsoft SQL Server 製品(少なくとも 7.0 以降。含MSDE)にて復旧モデルを選ぶ際はそこまでは検討材料に挙げておくと良いかと思います。

  4. YamaKenさん、コメントありがとうございます。
    詳細な解説まで頂きまして痛み入ります。
    その辺りの「Disaster Recovery」どころか、「トランザクションログ」なんて「聞いたこともない」とノタマウ方々が多いんですよ(私のまわり限定?)。
    そんな愚痴はともかく、頂いた内容をもとに、より一層勉強させていただきますです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree