• ベストアンサー

異なるスキーマのビューを元にしたマテリアライズドビューの作成

「所有していないマテリアライズド・ビューのマスター表にアクセスする場合は、各表に対するSELECTオブジェクト権限またはSELECT ANY TABLEシステム権限が必要です。」 ということから、selectオブジェクト権限をつけた『ビュー』をもとに、マテリアライズドビューの作成はできないのでしょうか? 例)Aスキーマが所有するTESTビュー表をもとに、Bスキーマでマテリアライズドビューを作成する。 create materialized view mview as select * from A.TESTビュー; create materialized view 権限は付与しました。 A.TESTビューに対するSELECTオブジェクト権限は付与しました。 結果としては、表またはビューがありません。とエラーがでます。 しかし、Aスキーマが所有するテーブルに対しては、問題なくマテリアライズドビューの作成はできます。 異なるスキーマの『ビュー』を元にマテリアライズドビューの作成は できない。といった記述はないのですが、実際に作成ができません。 ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

マテリアライズド・ビューの作成以前に・・ ビューにselect権限があっても、ビューが必要とするテーブルやビューに、オブジェクト権限がないのであれば ビューを使えないと思いますが? select権限を与えたビューが検索できるか確認してください。 ロールがあると確認が難しくなるので、小さなプロシジャでも書いて確認すると良いかと。 create or replace procedure a is c number; begin select count(*) into c from ビュー; end; / execute a; たぶん、オブジェクト権限なしでコンパイルエラーになるか、ビューの検索でエラーになると思いますよ。

mic2005
質問者

お礼

korochanさんありがとうございます。 プロシージャで確認する。という手法ありがとうございます。 結果としては、プロシージャ実行結果は件数がかえってきました。 プロシージャでは正常であるのに、 create materialized view mview builc defferd refresh force with rowid on demand as select * from A.TESTビュー では、エラーが以下のように出力されます。 ORA-00942:表またはビューが存在しません。 ORA-06512:"SYS.DBMS_SNAPSHOT_UTL" 行1543 ORA-06512:行1 ためしに、select * from A.TESTビューをもとに、create view ~ を実行すると、正常に作成できます。 どうもマテリアライズドビューはできないようなのです。 SYS.DBMS_SNAPSHOT_UTL は、暗号化されたパッケージで、 行1に何が書いてあるのかはわかりませんでした。

その他の回答 (1)

  • entree
  • ベストアンサー率55% (405/735)
回答No.2

どこまで確認されたかは分かりませんが・・・ 1. MVIEW を作成したいユーザで SQL> SELECT * FROM A.TESTビュー OK ==> VIEW に対する MVIEW は作成できない NG ==> →2 へ 2. TESTビューの元表にもA ユーザがアクセスできるように権限付与して1 の内容が成功するか確認してみる。。 SQL> GRANT SELECT ON 元表A TO SCOTT; OK ==> 元表に対するSELECT 権限も必要 →MVIEW 作成へ NG ==> コマンドのどこかに問題がある こんな感じで切り分けできるのでは?

mic2005
質問者

補足

1 の結果は、実行できたので、OKです。 ということは、VIEWに対するMVIEWは作成できない。ということになるのでしょうか? エラー内容としては、 ORA-00942:表またはビューが存在しません ORA-06512:"SYS.DBMS_SNAPSHOT_UTL" 行1543 ORA-06512:行1 という内容で、権限っぽいのですが、権限は満たしているようなのです。 VIEWをもとにしてマテリアライズドビューを作成する場合、 MVIEWを作成したいユーザが元表のビューを所有していないとだめなようです。