※ ChatGPTを利用し、要約された質問です(原文:Flashback Tableで必要な権限)
Flashback Tableで必要な権限とは?
このQ&Aのポイント
テーブルの過去データを復元できるFlashback Tableを実行するためにはどのような権限が必要なのでしょうか?
自分のテーブルであれば権限は不要と思ったのですが、実際にはどのような権限が必要なのかについて調査しました。
No.5とNo.8でエラーが発生した原因についても考察しています。
OcaleMasterにむけて勉強中です。
Oracle11.2をOracleLinux5にインストールして以下を行いました。
1.ユーザー「test」を作成。権限はconnectロールのみ。
2.sqlplusにtestでログイン(sqlplus test/***)
3.テーブル「t1」を作成/行移動を有効。
4.t1に対し挿入・更新を実行する。
5.flashback tableを実施すると以下のようなエラーが発生しました。
SQL> flashback table test.t1 to scn 1015246;
flashback table test.t1 to scn 1015246
*
行1でエラーが発生しました。:
ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-01031:
権限が不足しています。
6.testにflashback any tableシステム権限/sysdba権限を付与
7.sqlplusにtestで再度ログイン(sqlplus test/***)
8.flashback tableを実施するとやはり同様のエラーが発生しました。
9.sqlplusにsysdbaでtestで再度ログイン。(sqlplus test/*** as sysdba)
10.flashback tableを実施すると成功しました。
参考書などの記載を見る限り、基本的に自分のテーブルであれば権限は不要と思ったのですが(少なくともSYSDBAでないと不可というものではないはず!?)、No5、No8でエラーとなってしまったのは、どこに問題があったものでしょうか。
何か情報ありましたら教えてください。
お礼
回答ありがとうございます。 私の方でもマニュアルの方は確認しまして、たとえば別ユーザー(FLASHBACKオブジェクト権限以外をtest.t1に付与。FLASHBACKのみない。)で以下を実行したところでは、直接エラーが発生しました。 SQL> flashback table test.t1 to scn 1015246; flashback table test.t1 to scn 1015246 * 行1でエラーが発生しました。: ORA-01031: 権限が不足しています。 対してtestでは再帰SQLにてエラーとなっています。 testユーザーはt1に対しては自所有のオブジェクトのため全オブジェクト権限を持っているはずですし、No8ではFLASHBACK ANY TABLEを付与しても発生したので、マニュアルに記載以外の条件が必要なのではと思った次第でした。 なお、その別ユーザーにFLASHBACK ANY TABLEを付与しても同様でした。 的外れかもしれませんが、ディクショナリ関連の権限が必要かと推測しています・・・。 他になにか情報ありましたら教えてください。