Oracle10g フラッシュバック アゲインの巻 その4
<Oracle10g フラッシュバック アゲイン の巻 その4>
ペンネーム:びー・うぃりー
先週に引き続きフラッシュバックに関する動作確認をしてまいります。
これまで3回にわたり参照系機能を確認しました。
簡単にまとめると以下になります。
(1)フラッシュバック:過去のデータが参照できる
(2)行履歴フラッシュバック:データの変更履歴を確認できる
(3)トランザクションフラッシュバック:トランザクションのUNDOを行うSQLを
取得できる
実際どのような使い方があるでしょうか?
例題《あるテーブルにおいて直近でINSERTされたデータを見つけるには》
一般的に、業務データではテーブルの項目にtimestamp型等がありそのMAX値を
とる。または、トリガーなどを仕掛けることで簡単に取得可能、と思います。
ここではその考慮なく運用作業にてワーク的にテーブル作成した場合を想定し
ます。
VERSIONS BETWEEN句を使用することで同等の結果が求められます。
------------ テストデータ COL1 COL2 TIME_STMP ---------- ---------- ------------------------- 1 QWERTY 05-03-04 14:57:08.000000 2 ASDFGH 05-03-04 14:57:16.000000 3 ZXCVBN 05-03-04 14:57:23.000000 4 POIUYT 05-03-04 14:57:30.000000 5 LKJHGF 05-03-04 14:57:38.000000 6 MNBVCX 05-03-04 14:57:47.000000 7 123456 05-03-04 14:57:54.000000 8 098767 05-03-04 14:58:02.000000 9 QPWOEI 05-03-04 14:58:09.000000 10 ALSKDJ 05-03-04 14:58:16.000000
方法1:MAX関数を使用
SQL> SELECT * FROM FLASHBACK_TEST WHERE TIME_STMP=(SELECT MAX(TIME_STMP) FROM FLASHBACK_TEST); COL1 COL2 TIME_STMP ---------- ---------- ------------------------ 10 ALSKDJ 05-03-04 14:58:16.000000
方法2:フラッシュバックを利用
SQL> SELECT * FROM (SELECT * FROM FLASHBACK_TEST VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE WHERE VERSIONS_OPERATION='I' ORDER BY VERSIONS_ENDTIME DESC) WHERE ROWNUM=1; COL1 COL2 TIME_STMP ---------- ---------- ------------------------ 10 ALSKDJ 05-03-04 14:58:16.000000
と、少し無理やりの感が否めないですが・・・・。
気を取り直し、ここから更新系機能を確認していきます。では、まず更新系
機能の1つ目「フラッシュバック・データベース」です。
「フラッシュバック・データベース」機能は、データベース全体のデータを
過去の一時点へ戻します。Undo情報は使用せず、バックグランドプロセスの
リカバリライター(RVWR)が書き出すフラッシュバック・データベースログを
使用します。従来のリカバリー方法では、バックアップ取得時点にリストア
した後Redoを適用していく方法がありました。
まずは準備から・・・・。
■環境
Microsoft Windows XP Pro
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 – Production
With the Partitioning, OLAP and Data Mining options
■はじめ!!!
まずパラメータを確認します。
・db_recovery_file_dest :フラッシュバックデータベースログ格納場所 ・db_recovery_file_dest_size Flash Recovery Area領域のサイズ ・db_flashback_retention_target :フラッシュバックデータベースログ保有期間
NAME TYPE VALUE ------------------------------------ ----------- -------------------------------------------- db_recovery_file_dest string C:oracleproduct10.1.0flash_recovery_area db_recovery_file_dest_size big integer 2G db_flashback_retention_target integer 1440
一旦データベースシャットダウンします。
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL>
マウントモードで起動します。
SQL> startup mount ORACLE instance started. Total System Global Area 171966464 bytes Fixed Size 787988 bytes Variable Size 145750508 bytes Database Buffers 25165824 bytes Redo Buffers 262144 bytes Database mounted.
アーカイブを有効にします
SQL> alter database archivelog; Database altered.
フラッシュバックデータベースを有効にし
データベースオープンします。
SQL> alter database flashback on; Database altered. SQL> alter database open; Database altered. SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 48 Next log sequence to archive 50 Current log sequence 50
これで準備が整いました。さぁ戻します!!といきたいところですが今週はここまで。
前髪が短くなった茅ヶ崎にて