Oracle 11g検証 フラッシュバック・データ・アーカイブ その2
<Oracle 11g検証 フラッシュバック・データ・アーカイブ その2>
ペンネーム: オレンジみかん
今週も引き続きフラッシュバック・データ・アーカイブの検証を行います。
■前回のおさらい
▼フラッシュバック・データ・アーカイブ(以下、FDA)の概要
FDAとは、データベースに時間軸の概念を追加した機能です。
この機能によりリカバリ処理をすることなくテーブルの過去の状態
を参照することが出来ます。主な利用目的として監査ログ管理など
への利用が可能です。
[特徴]
FDAの特徴は以下のとおり
・データ操作の履歴管理が容易になった
・フラッシュバック問い合わせのSQL構文’AS OF’を利用した履歴データの
問い合わせをサポート
・レスポンスへの配慮
⇒フォアグラウンドで実行するSQLに配慮して履歴データは非同期で
書き込みをする。
・アプリケーションの作りこみが不要になった
⇒Oracleデータベースのシステムイベントとして履歴データを
取得するため、アプリケーションから見るとデータベースの一部と
して扱うことが出来るようになった。
それでは、実際にFDAを触ってみましょう。
■検証環境
Red Hat Enterprise Linux5 64bit
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0
■検証
▼検証環境の作成
まずはFDAを検証する環境を構築しましょう。
FDAの環境構築の流れは以下のとおりです。
(1)フラッシュバック・データ・アーカイブ領域の作成
(2)FDAの作成
(3)FDAの実行権限の設定
(4)対象テーブルをFDAの履歴管理対象として設定
(1)フラッシュバック・データ・アーカイブ領域の作成
FDAはレコード操作の履歴情報を管理するためレコード操作の履歴情報を
蓄積するための領域が必要になります。
そのため、以下のような手順でフラッシュバック・データ・アーカイブ領域
を作成します。
※SYSユーザーで操作
SQL> --表領域の作成 SQL> CREATE TABLESPACE FDA1_TS1 DATAFILE '/u01/app/oracle/oradata /insight/fda1_ts1.dbf' SIZE 1G; 表領域が作成されました。
(2)FDAの作成
利用する表領域の一部を使ってFDA1という名前のFDAを作成します。
SQL> CREATE FLASHBACK ARCHIVE FDA1 TABLESPACE FDA1_TS1 QUOTA 500M 2 RETENTION 1YEAR; フラッシュバック・アーカイブが作成されました。
ここではオプションとして1年間の保存期間を設定してFDAの領域を作成
しました。
(3)FDAの実行権限の設定
実行ユーザーのSCOTTに対して履歴データ操作の利用権限を与えます。
SQL> --権限の付与 SQL> GRANT FLASHBACK ARCHIVE ON FDA1 TO SCOTT; 権限付与が成功しました。
これでSCOTTが実行ユーザーとしてFDAを利用することが出来るようになり
ました。
(4)テーブルをFDAの履歴管理対象として設定
ここでは、EMP_MGRというテーブルを履歴対象に設定します。
※実行ユーザーで操作
SQL> CREATE TABLE EMP_MGR AS SELECT * FROM EMP WHERE JOB='MANAGER'; 表が作成されました。 SQL> SELECT * FROM EMP_MGR; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ -------- --------- ------ -------- ------ ------ ---------- 7566 JONES MANAGER 7839 81-04-02 810 20 7698 BLAKE MANAGER 7839 81-05-01 2850 30 7782 CLARK MANAGER 7839 81-06-09 2450 10
EMP_MGR表の履歴データを取得できるようにFDAを設定します。
SQL> ALTER TABLE EMP_MGR FLASHBACK ARCHIVE FDA1; 表が変更されました。
これでEMP_MGRというテーブルが履歴管理されるようになりました。
ちなみに、テーブルに履歴管理の設定がされているかどうかを確認するには
USER_FLASHBACK_ARCHIVE_TABLESを参照します。
SQL> SELECT * FROM USER_FLASHBACK_ARCHIVE_TABLES; TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NA ARCHIVE_TABLE_NAME ---------- ---------- -------------------- -------------------- EMP_MGR SCOTT FDA1 SYS_FBA_HIST_70121
USER_FLASHBACK_ARCHIVE_TABLESにEMP_MGRというレコードが格納されている
ことからこのEMP_MGRテーブルが履歴管理されていることがわかります。
この後の過去レコードの参照確認のため、履歴データが作成された今の時刻
をOSのdateコマンド確認しておきましょう。
$date 2008年 11月 17日 月曜日 18:47:46 JST
▼過去レコードの参照
これで履歴データが蓄積されるようになりました。
実際に過去レコードを参照して確かめてみましょう。
今回の検証ではEMP_MGRテーブルのデータを削除後、削除前のデータを参照してみたい
と思います。
SQL> --削除前のレコード SQL> SELECT * FROM EMP_MGR; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ -------- --------- ------ -------- ------ ------ ---------- 7566 JONES MANAGER 7839 81-04-02 810 20 7698 BLAKE MANAGER 7839 81-05-01 2850 30 7782 CLARK MANAGER 7839 81-06-09 2450 10
現在、EMP_MGRには3件のレコードが存在しています。
SQL> --レコードの更新(全データの削除) SQL> DELETE FROM EMP_MGR; 3行が削除されました。 SQL> COMMIT; コミットが完了しました。 SQL> SELECT * FROM EMP_MGR; レコードが選択されませんでした。
どこまで過去に遡れば良いか判断するため、過去レコードを参照する前に
履歴データ作成後からの経過時間を確認してみましょう。
現在の時刻をOSのdateコマンドで確認すると・・・
$date 2008年 11月 17日 月曜日 18:50:19 JST
先ほどの履歴データ作成から3分経過しているようです。
現時点で履歴データ作成から3分が経過していることから、データが存在して
いた5分前の状態を参照してみることにします。
FDAでの過去レコードの参照方法は以下になります。
[過去レコード参照時のSQL文]
SQL> SELECT [カラム名] FROM [テーブル名] AS OF [時間]
実はこの操作はフラッシュバック・クエリの場合と同じ操作です。
それでは、5分前のDELETE文実行前のデータを参照してみることにしましょう。
SQL> --5分前のレコードを参照 SQL> SELECT * FROM EMP_MGR 2 AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '5' MINUTE); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ -------- --------- ------ -------- ------ ------ ---------- 7566 JONES MANAGER 7839 81-04-02 810 20 7698 BLAKE MANAGER 7839 81-05-01 2850 30 7782 CLARK MANAGER 7839 81-06-09 2450 10 5分前の履歴データが参照出来ました。
このように、SELECT文にAS OF [時間] を追加するだけで簡単に過去データを
参照することができました。
では、既存フラッシュバック機能とFDAとの違いどんなものがあるの
でしょうか?
▼既存フラッシュバック機能とFDAの違い
以下に示す様に、履歴データの保存場所の違いから管理方法にに違いがあり
ます。
|履歴データの保存場所 | 保存期間 --------------------------+----------------------+----------------- 既存のフラッシュバック機能|UNDOデータ |UNDOデータが上書き | |されるまで --------------------------+----------------------+----------------- FDA |フラッシュバック・ |FDAで定義した期間 |データ・アーカイブ領域|(年単位で対応可能) --------------------------+----------------------------------------
既存のフラッシュバック機能ではUNDOデータを利用をするためトランザク
ションのコミット後に上書きされる可能性がありましたが、FDAでは保管場所
が別になったため、UNDOデータの管理方法を意識すること無く利用できる
ようになりました。これは一番大きな違いとなります。
今回はここまで
来週はFDAの特徴である履歴データの管理について検証します。
寒くてこの秋2回目の風邪をひきました。でも週末だけは元気です(爆)
恵比寿にて