はじめに
データベース用語である物理ログと論理ログの違いについてイメージとして理解すべく簡単に説明しました。
概要イメージ
物理ログ
- 変更対象のデータ領域のイメージ
- 大きい
論理ログ
- SQL文などによる変更の手順を記したログ
- 小さい
以下、解説です。
二つのログの違いを解説
データベースは更新が発生した際、高速なメモリで処理を行いディスクへの書き込みを後回しにしています。これは応答速度を優先するための施策で、実際以下記事のようにディスクとメモリとではアクセス速度には大きな差があります。
一方、インスタンスが異常終了したりサーバに障害が発生した場合はメモリ部分にのみ存在してディスクへ反映されていないトランザクションが発生します。
そのような場合の復旧にて活躍するのがこれらのログです。
ポイントは「変更が確定されていたデータは反映して未確定のデータは取り消す」点です
論理ログ
OracleDBではREDOログと呼ばれているログにあたり、このログにはDBに対して発行されたSQLが格納されています。
一般的に、データベースを更新は高速性の都合上メモリで行われますが、その更新はREDOログへの書き込み完了を持って初めてデータ更新が完了したことになります。つまり、データベースの更新とREDOログへの書き込みは同期がとられているわけです。
この論理ログを利用することで、ディスクには反映されていないDB更新をSQLから行うことができ、バックアップデータを直近まで戻すことが可能です。
ちなみに、高速化を優先してREDOログへの書き込みを待たずに更新完了とする設計もあります。このような場合、SQL自体残っていないので復旧は不可能です。
物理ログ
一般的にデータベースに更新が発生した場合に、その更新前のデータと更新後のデータをディスクに保持します。
これが物理ログで、まさにデータベースのパックアップと呼べるデータです。
ちなみにこの更新前データをUNDOデータと呼び、データ復旧時はこのUNDOデータを起点としてデータ復旧が行われます。
終わりに
これらの用語が登場した際は、命令だけをログにした軽いログを論理ログ、
変更するデータの前後をログにした重いログを物理ログ、とイメージすると話についていけると思います。
以上、ご参考ください。