我对oracle很新,并试图授予我创建的一些物化视图的权利。
我做了什么(全部来自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
不知道如何解决这个问题,我确信我做错了什么。非常感谢任何帮助。
答案 0 :(得分:4)
如果物化视图归SYS
所有(这是一个真的坏主意 - 你永远不应该在SYS
架构中创建对象。{{1它是特殊的。它是为Oracle保留的。它的行为经常与数据库中的每个其他模式不同。)并且没有为物化视图创建同义词,在发出查询时需要指定完全限定的名称SYS
。那是
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