フラッシュバッククエリーに関する検証 その1
~フラッシュバッククエリーに関する検証 その1 ~
ペンネーム ちゃむ
久々にメルマガを書く。Oracle9iに関する検証をやっていくぞー。
かんばるぞー。
これから行なう環境はすべて OS solaris7 Oracle 9.0.1.0.0で行なう。
今回から、フラッシュバッククエリーという機能に着目して検証する。フラッ
シュバッククエリーとは、その名の通り、過去のある時点に戻って検索を行な
う機能である。これを聞くと、Redoログの情報(Redo)かロールバックセグメ
ントの情報(Undo)どちらかを使用すると直感的に感じると思うが、Undo情報
で実現している機能である。
その機能を使用するために、Oracle9iから登場するUndo表領域という新しい表
領域を使用するが、その説明はまたの機会に譲って、今回は、フラッシュバッ
ククエリーを行なうための前準備を行なう。
<フラッシュバッククエリーを行なうための前準備>
1.SYSユーザでCONNECT
DBMS_FLASHBACKパッケージの実行権限をSYSユーザから実行したいユーザー与
える。Oracle9iをはじめて使用する方は、おそらくここでいきなり戸惑うは
ずだ。
ここの環境では、sysのパスワードはmanagerなので、 sys/managerで接続して
みよう。
$ sqlplus sys/manager ORA-28009: connection to sys should be as sysdba or sysoper
あれ!!エラーが発生したぞ。そうなのだ。Oracle9iからsysユーザーはsysdba
かsysoperを指定しないと接続できないのだ。
じゃあ、今度は以下のように接続しよう!!
$ sqlplus sys/manager as sysdba Usage: SQLPLUS [ [] [] [] ] where ::= -H | -V | [ [-M ] [-R ] [-S] ] ::= [/][@] | / | /NOLOG ::= @[.] [ ...] "-H" displays the SQL*Plus version banner and usage syntax "-V" displays the SQL*Plus version banner "-M " uses HTML markup options "-R " uses restricted mode "-S" uses silent mode
おいおい。今度は受け付けてくれないよ。じゃあ、これでどうだ。
$ sqlplus "sys/manager as sysdba" Connected to: Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production With the Partitioning option JServer Release 9.0.1.0.0 - Production SQL>
やっとつながったよ。空白を含むと構文エラーになってしまうので、ダブルコ
ーテーションで括ろう。以下のようにシングルコーテーションでも大丈夫だ。
$ sqlplus 'sys/manager as sysdba'
ちなみにSQL*PLUSに入った状態であれば事態は逆になるので注意!!
シングルコーテーショなしの場合
<接続可>
SQL> connect sys/manager as sysdba Connected.
シングルコーテーショありの場合
<接続不可>
SQL> connect 'sys/manager as sysdba' Enter password:
2.SYSユーザでdbms_flashbackの実行権限をscottに与える。
SQL> GRANT EXECUTE ON dbms_flashback TO scott; 権限付与が成功しました。
3.実際に、過去の戻りたい時間を指定してパッケージを実行する。
ここで、dbms_flashbackパッケージのenable_at_timeプロシージャでの時間
指定をどのような形式で書けば良いか迷う人がいるだろう。
ここの設定は、NLS_TIMESTAMP_FORMATに依存する。
SQL> SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT';
で設定は確認できるが、今回は手取り早くALTER SESSIONでNLS_TIMESTAMP_FORMAT
を変更してしまおう。
SQL> CONNECT SCOTT/TIGER Connected. SQL> alter session set NLS_TIMESTAMP_FORMAT = 'yyyy/mm/dd hh24:mi:ss'; Session altered.
次に戻りたい時間を指定する。
SQL> execute dbms_flashback.enable_at_time('2001/12/05 15:00:00'); PL/SQL procedure successfully completed.
最後に、フラッシュバッククエリーを無効にする方法を記述する。
SQL> execute dbms_flashback.disable; PL/SQL procedure successfully completed.
フラッシュバッククエリーを無効にしないとDDLやDML(更新系)で以下の
ORA-08182が発生する。
SQL> create table a as select * from emp; ORA-08182: operation not supported while in Flashback mode
次回以降に、実際に使用していくが、その前に関連する初期化パラメータの
設定などを把握しよう!!
以上 心の窓を開いてごらん。 茅ケ崎にて