フラッシュバック・データ・アーカイブにより、その存続期間中、表に対するすべてのトランザクションによる変更を追跡および格納できます。
監査対応などで1年前のデータを出せと言われたときに出せる仕組み。
使うテーブルとか、とりあえずメモ。
(マニュアルより抜粋)
*_FLASHBACK_ARCHIVE
フラッシュバック・データ・アーカイブ・ファイルに関する情報
*_FLASHBACK_ARCHIVE_TS
フラッシュバック・データ・アーカイブ・ファイルの表領域
*_FLASHBACK_ARCHIVE_TABLES
データ・フラッシュバック・アーカイブ・ファイルが有効になっている表
#専用の表領域を作成する
create tablespace fla_da_tbs1 datafile '/u01/app/oracle/oradata/PROD1/fla_da.dbf' size 10M reuse autoextend on;
SYS@PROD1 > conn hr/hr
接続されました。
HR@PROD1 > select default_tablespace from user_users;
DEFAULT_TABLESPACE
------------------------------
USERS
HR@PROD1 > conn / as sysdba
接続されました。
SYS@PROD1 > alter user hr default tablespace fla_da_tbs1 quota unlimited on fla_da_tbs1;
ユーザーが変更されました。
#権限付与
#既存の表に対して使用するフラッシュバック・データ・アーカイブのFLASHBACK ARCHIVEオブジェクト権限が持っているとアーカイブ有効化が可能。
SYS@PROD1 > grant flashback archive on fla_1year to hr;
権限付与が成功しました。
#データアーカイブを作成する
SYS@PROD1 > CREATE FLASHBACK ARCHIVE DEFAULT fla_1year TABLESPACE fla_da_tbs1 QUOTA 10M RETENTION 1 YEAR;
フラッシュバック・アーカイブが作成されました。
HR@PROD1 > ALTER TABLE employees FLASHBACK ARCHIVE fla_1year;
#ここから実験データを入れる----------------------
・vishneyさんの給料は10500。これをupdate文によって12000までにあげる。
HR@PROD1 > select employee_id,last_name,salary from employees where last_name='Vishney';
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
162 Vishney 10500
HR@PROD1 > update employees set salary=salary+500 where last_name='Vishney';
1行が更新されました。
HR@PROD1 > r
1* update employees set salary=salary+500 where last_name='Vishney'
1行が更新されました。
HR@PROD1 > r
1* update employees set salary=salary+500 where last_name='Vishney'
1行が更新されました。
HR@PROD1 > select employee_id,last_name,salary from employees where last_name='Vishney';
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
162 Vishney 12000★
-------------------------------------------------
#内部表を確認。ちゃんとアーカイブされていることがわかった。
HR@PROD1 > r
1 select * from user_FLASHBACK_ARCHIVE_TABLES
2*
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME STATUS
------------------------------ ------------------------------ -------------------------------------------------- ----------------------------------------------------- -------------
EMPLOYEES HR FLA_1YEAR SYS_FBA_HIST_76257★ ENABLED
#昔のデータアクセスする。
HR@PROD1 > SELECT SALARY, LAST_NAME FROM employees AS OF
2 TIMESTAMP ★TO_TIMESTAMP ('2014-03-09 23:40:00', 'YYYY-MM-DD HH24:MI:SS') where last_name='Vishney';
SALARY LAST_NAME
---------- -------------------------
12000 Vishney
#もとに戻せと言われたので、元に戻す。
HR@PROD1 > update employees set salary=(SELECT SALARY FROM employees AS OF TIMESTAMP TO_TIMESTAMP ('2014-03-09 23:35:00', 'YYYY-MM-DD HH24:MI:SS') where last_name='Vishney') where last_name='Vishney';
1行が更新されました。
HR@PROD1 > commit;
コミットが完了しました。
HR@PROD1 > SELECT SALARY, LAST_NAME FROM employees where last_name='Vishney';
SALARY LAST_NAME
---------- -------------------------
10500 Vishney
#データのアーカイブ期間を変更する
HR@PROD1 > select FLASHBACK_ARCHIVE_NAME,RETENTION_IN_DAYS from user_FLASHBACK_ARCHIVE;
FLASHBACK_ARCHIVE_NAME RETENTION_IN_DAYS
-------------------------------------------------- -----------------
FLA_1YEAR 365
フラッシュバック・データ・アーカイブfla1の保有時間を2年に変更します。
HR@PROD1 > conn / as sysdba
接続されました。
SYS@PROD1 > ALTER FLASHBACK ARCHIVE FLA_1YEAR MODIFY RETENTION 2 YEAR;
フラッシュバック・アーカイブが変更されました。
#削除。
SYS@PROD1 > DROP FLASHBACK ARCHIVE FLA_1YEAR;
フラッシュバック・アーカイブが削除されました。
SYS@PROD1 > select FLASHBACK_ARCHIVE_NAME,RETENTION_IN_DAYS from user_FLASHBACK_ARCHIVE;
レコードが選択されませんでした。
<参考手順>
Oracle® Databaseアドバンスト・アプリケーション開発者ガイド
http://docs.oracle.com/cd/E16338_01/appdev.112/b56259/toc.htm
0 件のコメント:
コメントを投稿