3

私はオラクルが初めてで、作成したマテリアライズドビューに権利を付与しようとしています。

私がやったこと(すべてsqlplusコマンドラインから):

sqlplus "/ as sysdba

>create tablespace tablespace_test datafile 'g:\tables\tablespace_test.dbf' size 20M autoextend on;

>create materialized view test_mv_1 tablespace tablespace_test parallel build immediate refresh complete on demand as select cm.* from yyy.jjj$project@externaldb p, yyy.jjj$mgmt@externaldb cm where (p.project_nbr = cm.project_nbr);

>create user dummy profile default identified by password default tablespace tablespace_test account unlock;

>grant connect to dummy;

>grant select on test_mv_1 to dummy;

>select * from test_mv_1;   <---***this works, data is there

>connect dummy

>select * from test_mv_1;
ERROR at line 1:
ORA-00942: table or view does not exist

これを修正する方法がわかりません。私はいくつか間違ったことをしたと確信しています。どんな助けでも大歓迎です。

4

1 に答える 1

4

マテリアライズド ビューが所有されている場合SYS(これは非常にSYS悪い考えです。スキーマ 内にオブジェクトを作成してはなりませんSYS。これは特別です。Oracle 用に予約されています。データベース内の他のすべてのスキーマとは異なる動作をすることがよくあります。)マテリアライズド ビューに対して作成されたシノニムはありません。クエリを として発行したときに、完全修飾名を指定する必要がありますdummy。あれは

SQL> connect dummy/password
SQL> select * from sys.test_mv_1;

ただし、実際、別のスキーマでマテリアライズド ビューを作成する必要があります。スキーマでマテリアライズド ビューを作成すると仮定するとmv_owner、クエリは次のように変わります。

select *
  from mv_owner.test_mv_1

完全修飾名を使用したくない場合は、シノニムを作成できます。パブリック シノニムを作成する場合

CREATE PUBLIC SYNONYM test_mv_1
   FOR mv_owner.test_mv_1

dummyまたは、スキーマでプライベート シノニムを作成する場合

CREATE SYNONYM test_mv_1
   FOR mv_owner.test_mv_1

次にdummy、修飾されていないオブジェクト名を指定できます

SELECT *
  FROM test_mv_1
于 2012-08-31T09:42:13.117 に答える