Oracle 11g検証 フラッシュバック・データ・アーカイブ その1

投稿日: 2008年11月12日

<Oracle 11g検証 フラッシュバック・データ・アーカイブ その1>
ペンネーム: オレンジみかん

今週からフラッシュバック・データ・アーカイブの検証を行います。

■概要
フラッシュバック・データ・アーカイブ(以下、FDA)とは、データベース
に時間軸の概念を追加した機能で、リカバリ処理をすることなくテーブルの
履歴を管理出来る機能です。従来のフラッシュバック機能と違い、UNDO
データよりも長い期間履歴データを保存することが出来るため、SOX法など
で注目を集めている監査ログの取得に有効です。

▼従来の機能を利用したデータ監査の実装課題
既存機能で監査ログを管理する仕組みを実現するには以下のように
いくつかの課題がありました。

(1)複雑なアプリケーションの作りこみが必要
・アプリケーションで監査ログを作成する時に、ビジネスロジックに監査
パターンを組み込むことが必要となり、全ての監査パターンを網羅する
ことが困難となります。

(2)監査ログ作成時のレスポンス悪化
・トリガーによる履歴データの作成ではフォアグラウンドで実行される
SQLに対してオーバーヘッドが大きい

(3)カスタマイズ費用がかさんでしまう
・監査ログとしてREDOログを利用した場合、サードパーティ製のアプリケ
ーションで実現することがままあります。そのような場合、アプリケー
ションは履歴情報を独自の表に対して格納されるものが多いため履歴
データを参照する時はAPIを利用する必要があります。そのため、複数の
システムのログを統合管理しようとすると、アプリケーションによる制約
により多くのカスタマイズが必要となりコストが多くかさんでしまいます。

また、履歴情報を監査ログとして利用するには以下の要件を満たす必要が
ありました。
[監査ログとしての要件]
・特定のデータに対して履歴データが取得出来る。
例)特定の時間、操作、ユーザーから過去の履歴データを取得できる。
・監査ログは改ざんされないように読み取り専用であることが保証できる。
・監査ログは必要に応じ履歴参照するため、履歴データの参照時のレスポン
スがストレスのない状態で利用出来る。

そこで、従来の方法で監査ログを取得する際の課題を意識してOracle11g
より機能提供されたのが、今回紹介するフラッシュバック・データ・
アーカイブです。

FDAは10gR2までのフラッシュバック機能と何が違うのでしょうか?
簡単に違いを見てみましょう。

▼10gR2までのフラッシュバック機能とは目的が違う
10gR2までのフラッシュバック機能では、『データベースを過去のある時点に
戻すことにより今までの状態を無かったことにする』という発想で
データ復旧を行うことが目的でした。

-フラッシュバック・データベース
フラッシュバック・データ・ログ(SCN)から指定された時点までデータ
ベースのトランザクションを戻す機能
-フラッシュバック・テーブル
特定のテーブルの更新を索引、制約、トリガーなどを保持したまま過去
の日付にリカバリを行う機能。
-フラッシュバック・ドロップ
削除してしまったテーブルをRecyclebinから元に戻す機能。
-フラッシュバック・クエリ
UNDO領域に格納されたロールバック情報などを利用して更新したレコー
ドの過去情報を取得する機能
-行履歴フラッシュバック
UNDO領域に格納されたロールバック情報などを利用してレコード単位に
変更履歴を参照する機能
-トランザクション履歴フラッシュバック
消去データを取得するために、現在の情報から過去の状態に戻すSQL文を
取得する機能

※10gR2までのフラッシュバック機能についてはこちらを参照下さい。
Oracle10g フラッシュバック アゲインの巻き その1
https://old.insight-tec.com/mailmagazine/ora3/vol234.html

以上のように以前のフラッシュバック機能とFDAを比較すると以下となります。

+--------------------------+----------------- +---------------------+
|                          |目的              |実現方法             |
+--------------------------+----------------- +---------------------+
|以前のフラッシュバック機能|データ復旧        |現在のデータをある   |
|                          |                  |時点まで巻き戻す     |
+--------------------------+------------------+---------------------+
|FDA                       |データ監査での    |特定の表に対して操作 |
|                          |監査ログとして利用|履歴を蓄積し、厳密な |
|                          |                  |履歴管理を実現する   |
+--------------------------+----------------- +---------------------+

▼Oracle11gからの監査ログ管理の実装
前述のとおり、監査ログを取得するにはいくつかの課題がありました。
11gではこれまでの課題をクリアしています。どのように実現しているので
しょうか?

以下に11gでの改善点を示します。
[複雑なアプリケーションの作りこみが不要になった]
■アプリケーション依存の軽減
10g以前)
・アプリケーションのビジネスロジックに監査パターンを組み込む必要
があるため複雑なアプリケーション実装が必要となり、アプリケーション
との依存性が高い。
11g)
・Oracleデータベースのシステムイベントとして履歴データを取得する
ため、アプリケーションから見るとデータベースの一部として扱うことが
出来るようになった。そのため、アプリケーションロジックを意識しない
柔軟なアクセスが可能になった。

[監査ログを作成する時のレスポンス悪化に対する改善]
■フォアグラウンドで実行するSQLのレスポンスに影響を与えにくい
10g以前)
・トリガーなどで履歴データを書き込みする際に、フォアグラウンドで実行
するSQLのレスポンスに影響があった。
11g)
・フォアグラウンドで実行するSQLとは非同期で書き込みを実施

■監査ログを利用するための要件対応
-履歴データの読み取り専用が保証出来る
10g以前)
・履歴データの保証は独自に作成するアプリケーションの仕様に左右される
ため、保証責任が流動的。
11g)
・Oracleデータベースの機能として読み取り専用を保証。

-履歴データの参照時にストレスのない状態で利用出来る
10g以前)
・長期保管の要件と同様に外部媒体からデータ戻しなどを行うケースが
多く、参照するまでに時間がかかっていた。
11g)
・専用の表領域を持つことにより通常の表の様にストレスの少ない
アクセスが実装出来る。

では、上記の機能はどの様な形で実現しているのでしょうか?
これらの機能を支えるアーキテクチャについて見てみましょう。

▼アーキテクチャ
FDAの更新時の動作概要は以下になります。

それでは、通常時とFDA設定時ではどのような違いがあるのか比較して確認
してみましょう。

  (1)更新処理が発生。
  (2)更新データがバッファキャッシュ上にキャッシュされる。
  (3)更新前情報はUNDO表領域内のUNDOセグメントに格納される。
  (4)更新の確定後、初期パラメータのUNDO_RETENTIONに設定された値の間、
     更新前の情報が保護される。

  +-----------+    +---------------------+    +---------------+
  |(1)DML発行 | → |(2)バッファキャッシュ| → |(3)(4)UNDO領域 |
  +-----------+    +---------------------+    +---------------+
  
  
  (1)更新処理が発生
  (2)更新データがバッファキャッシュ上にキャッシュされる。
  (3)更新前情報はUNDO表領域内のUNDOセグメントにデータが格納される。

    ※FDAが設定された表のUNDOデータはアーカイブ用に上書き禁止に設定
      された後にデータが格納される。

        [フラッシュバック・データ・アーカイバ(以下、FBDA)の動作]
        1.FBDAがUNDO表領域から更新レコードを取得し、変更前情報を
          自動的に取得し、フラッシュバック・アーカイブ専用領域に
          格納する。  
        2.履歴データ書き込み後、UNDOデータが再利用の候補に変わる。
  (4)更新の確定後、初期パラメータのUNDO_RETENTIONに設定された値の間、
     更新前の情報が保護する。
    ※FDBAへの書き込みタイミングはデフォルトで5分おきに実行され、
      フォアグラウンドのSQLとは非同期に動作します。
    ※フラッシュバック・データ・アーカイバ(FBDA)
      FDAのバックグラウンド・プロセスでUNDOデータをバッファキャッシュ、
      UNDO領域から収集してフラッシュバック・データ・アーカイブへ
      書き込みを行うバックグラウンド・プロセス

  +-----------+    +---------------------+    +---------------+
  |(1)DML発行 | → |(2)バッファキャッシュ| → |(3)(4)UNDO領域 |
  +-----------+    +---------------------+    +---------------+
                          ↓                      ↓↑
                          ↓←←←←←←←←←←←  ↑
                          ↓→→→→→→→→→→→→
                          ↓    (3)-2.書き込み完了
                          ↓(3)-1.FBDAがUNDO情報を収集しFDAへ書き込み
                          ↓ 
             +----------------------------------------+
             |フラッシュバック・データ・アーカイブ領域|
             +----------------------------------------+

FDAのバッググラウンドプロセスであるFBDAが非同期で動作することでフォア
グラウンドで実行するSQLのレスポンスに悪影響が発生しないような仕組みと
なっています。

今週は概要について説明したので、来週は実際にフラッシュバック・
データ・アーカイブを触ってみます。

今週はここまで

麻生総理の全世帯の給付金政策。出来ればほしいな~ 恵比寿にて