本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、データベース管理システムの重要機能であり、それだけにトラブル事例も多い「トランザクションログの仕組み」をおさらいします。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
トランザクションログは、SQL Server(などのリレーショナルデータベース管理システム)が稼働中に行ったデータベースごとに発生したトランザクションと、加えられた変更が全て記録される重要なログファイルです。ロールバック処理や障害発生時にバックアップからのリストアを行う際に利用され、データの一貫性を保つために利用されます。
SQL Serverでは、全ての復旧モデルでトランザクションログに変更履歴を記録します。実はこちら、皆さんがよく勘違いをしてしまうところのようです。
完全復旧モデルや一括ログ復旧モデルならば、トランザクションログが必須なのはご存じと思います。しかし、単純復旧モデルもトランザクションログに履歴を記録します。単純復旧モデルであっても、トランザクションが中断された場合やROLLBACK指令があった場合はロールバック処理が必要であり、途中まで記録した内容を参照する必要があるからです。単純復旧モデルでは、トランザクションログのバックアップまでは必要ありませんが、トランザクションログそのものは必要なのです。
トランザクションログは少なくとも1つのファイルで構成され、循環利用されます。複数のファイルで構成されている場合でも、1ファイルずつ利用します。同時に2つ以上使うことはありません。ファイルの拡張子は一般的に、「.ldf」となります。
トランザクションログの内部は、仮想ログファイルと呼ばれる複数のセグメントで構成され、サイズはSQL Serverが内部で自動管理します。また、仮想ログファイルごとに、使用中/再利用可能/未使用の3つのステータスがあります。
変更履歴の記録時に、仮想ログのステータスが「全て使用中」になっていたら、ログファイルを拡張して空き領域を確保してから記録します。使用中のステータスを「再利用可能」に変えるには、トランザクションログの「切り捨て」処理が必要となります。
単純復旧モデルの場合は、切り捨て処理をトランザクションが終了した時点で自動的に実行します。一方の完全復旧モデルや一括ログ復旧モデルでは、トランザクションログのバックアップを実行することで切り捨て処理が行われます。
トランザクションログファイルはデータベース管理システムの重要機能に関連しています。それだけに、ここにトラブルが発生するとサービスが全て動作停止状態となるほどの危機的な状況に陥ることもあります。次回から数回にわたって、トランザクションログに関連する具体的なトラブル例と解決方法を紹介します。
ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。
ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
Copyright © ITmedia, Inc. All Rights Reserved.