フラッシュバッククエリーに関する検証 その3
~フラッシュバッククエリーに関する検証 その3 ~
ペンネーム ちゃむ
前回は、フラッシュバッククエリーを使用するための初期化パラメータの設定
方法と初期化パラメータの設定自体の設定の注意点を説明した。本来であれば、
undo表領域の作成方法などもおさえる必要があるが、今回は、フラッシュバッ
ククエリーを実際に使ってみるところに重点を置く。
まずは、初期化パラメータを以下のようにして使用できる環境を整える。
undo_management=AUTOになっており、undo_tablespaceに適切なUNDO表領域が
指定されていれば使用できる。
SQL> SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE 'UNDO%' NAME VALUE -------------------- -------------------- undo_management AUTO undo_tablespace UNDOTBS undo_suppress_errors FALSE undo_retention 900
「その1」で説明したdbms_flashbackパッケージの実行権限を与えることも
重要である。
SQL> GRANT EXECUTE ON dbms_flashback TO scott;
<SCOTTでフラッシュバッククエリーを実行してみる>
1.既にテーブルaという14行のデータが存在することを確認。
SQL> select count(*) from a; COUNT(*) ---------- 14
2.テーブルaのデータを削除してコミットする。(2001/12/26 13:54:44頃)
SQL> delete from a; 14 rows deleted. SQL> commit; Commit complete. SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY ------------------- 2001/12/26 13:54:44
3.次に戻りたい時間を指定する。(2.の一時間前を指定 2001/12/26 12:54:44)
その後で、select文を実行
SQL> alter session set NLS_TIMESTAMP_FORMAT = 'yyyy/mm/dd hh24:mi:ss'; Session altered. SQL> execute dbms_flashback.enable_at_time('2001/12/26 12:54:44'); PL/SQL procedure successfully completed. SQL> select count(*) from a; COUNT(*) ---------- 14
確かに検索できる。でも、このデータを別テーブルに保存したくなるのが人情
というものだろう。
4.別テーブルに保存したい!!
<create as select>
SQL> create table b as select * from a; ORA-08182: operation not supported while in Flashback mode
<同じレイアウトのテーブルを作成してinsertでは>
SQL> insert into b select * from a; ORA-08182: operation not supported while in Flashback mode
そうなのだ。残念ながら、DDL文やselect以外のDML文(更新処理)は、フラッシュ
バッククエリー中のセッションでは、実行できないのだ。これが、できれば、リカ
バリなどの面でも役立つのに!!
実は、PL/SQLを用いれば実現できる。これに関しては、次回説明しよう。
5.今回は簡単にテキストファイルに出力!!
以下のようにspoolしておけば、sqlldrなどでローディングできるだろう。
‘,’を文字列連結しておけば、何かとローディングしやすいcsvファイルが作成で
きる。但し、カラムの値の中にカンマがあるときは、データなどを事前に整備して
おく必要があるだろう。
SQL> set pages 0 SQL> set feed off SQL> spool a.txt SQL> select empno || ',' || ename || ',' || job || ',' || mgr from a; 7369,monkey,CLERK,7902 7499,monkey,SALESMAN,7698 7521,monkey,SALESMAN,7698 7566,monkey,MANAGER,7839 7654,monkey,SALESMAN,7698 7698,monkey,MANAGER,7839 7782,monkey,MANAGER,7839 7788,monkey,ANALYST,7566 7839,monkey,PRESIDENT, 7844,monkey,SALESMAN,7698 7876,monkey,CLERK,7788 7900,monkey,CLERK,7698 7902,monkey,ANALYST,7566 7934,monkey,CLERK,7782 SQL> spool off
次回は、このフラッシュバッククエリーで検索したデータをテーブルなどに格
納する方法に迫る。
以上 さあ出かけよう。ぼくらは若者なにも恐くない 茅ケ崎にて