【问题标题】:How to grant rights to materialized view in Oracle11gOracle11g中如何授予物化视图权限
【发布时间】:2012-08-26 02:27:31
【问题描述】:

我对 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

不知道如何解决这个问题,我确定我做错了一些事情。非常感谢任何帮助。

【问题讨论】:

    标签: oracle oracle11g materialized-views


    【解决方案1】:

    如果物化视图归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
    

    【讨论】:

    • 我知道我需要对 Oracle 进行一些阅读。我对模式有一个模糊的概念(我认为类似于 Windows venacular 中的配置文件)。有什么方法可以将 MV 移动到不同的架构?
    猜你喜欢
    • 2020-02-07
    • 2020-04-22
    • 2010-10-20
    • 2016-12-08
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多