精华内容
下载资源
问答
  • 一般创建ON COMMIT刷新方式的物化视图都是快速刷新的,完全刷新的ON COMMIT物化视图的意义不大,因此本文例子中使用的都是REFRESH FAST ON COMMIT方式。而是否快速刷新对权限的影响不过是增加了对基表物化视图...

    这篇文章讨论以ON COMMIT模式刷新的物化视图所需权限。

    和前两篇文章一样,仍然是分为三种情况讨论:基表在当前用户下;基表不在当前用户下;在其他用户下建立物化视图。

    一般创建ON COMMIT刷新方式的物化视图都是快速刷新的,完全刷新的ON COMMIT物化视图的意义不大,因此本文例子中使用的都是REFRESH FAST ON COMMIT方式。而是否快速刷新对权限的影响不过是增加了对基表物化视图日志的查询权限。

    重新构造测试环境:

    SQL> CONN YANGTK/YANGTK@TEST4

    已连接。

    SQL> DROP USER TEST CASCADE;

    用户已丢弃

    SQL> DROP USER MVIEW_OWNER CASCADE;

    用户已丢弃

    SQL> CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE YANGTK;

    用户已创建

    SQL> GRANT CREATE SESSION TO TEST;

    授权成功。

    SQL> GRANT UNLIMITED TABLESPACE TO TEST;

    授权成功。

    SQL> GRANT CREATE TABLE TO TEST;

    授权成功。

    SQL> GRANT CREATE MATERIALIZED VIEW TO TEST;

    授权成功。

    SQL> CONN TEST/TEST@TEST4

    已连接。

    SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30));

    表已创建。

    SQL> CREATE MATERIALIZED VIEW LOG ON T;

    实体化视图日志已创建。

    SQL> CREATE MATERIALIZED VIEW MV_T REFRESH FAST ON COMMIT AS SELECT * FROM T;

    实体化视图已创建。

    第一种情况不需要额外的权限,和创建物化视图的基本权限一致。

    SQL> CONN YANGTK/YANGTK@TEST4

    已连接。

    SQL> DROP TABLE T;

    表已丢弃。

    SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30));

    表已创建。

    SQL> CREATE MATERIALIZED VIEW LOG ON T;

    实体化视图日志已创建。

    SQL> GRANT SELECT ON T TO TEST;

    授权成功。

    SQL> GRANT SELECT ON MLOG$_T TO TEST;

    授权成功。

    SQL> CONN TEST/TEST@TEST4

    已连接。

    SQL> CREATE MATERIALIZED VIEW MV_T1 REFRESH FAST AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    SQL> CREATE MATERIALIZED VIEW MV_T1 REFRESH FAST ON COMMIT AS SELECT * FROM YANGTK.T;

    CREATE MATERIALIZED VIEW MV_T1 REFRESH FAST ON COMMIT AS SELECT * FROM YANGTK.T

    *

    ERROR 位于第 1 行:

    ORA-01031: 权限不足

    第二种情况就可以看出差别了,可以建立快速刷新的物化视图,但是建立ON COMMIT的快速刷新的物化视图就缺少权限了。

    SQL> CONN YANGTK/YANGTK@TEST4

    已连接。

    SQL> GRANT ON COMMIT REFRESH ON T TO TEST;

    授权成功。

    SQL> CONN TEST/TEST@TEST4

    已连接。

    SQL> CREATE MATERIALIZED VIEW MV_T2 REFRESH FAST ON COMMIT AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    SQL> CONN YANGTK/YANGTK@TEST4

    已连接。

    SQL> GRANT ON COMMIT REFRESH TO TEST;

    授权成功。

    SQL> REVOKE ON COMMIT REFRESH ON T FROM TEST;

    撤销成功。

    SQL> CONN TEST/TEST@TEST4

    已连接。

    SQL> CREATE MATERIALIZED VIEW MV_T3 REFRESH FAST ON COMMIT AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    有两种授权方法,一个授予基表的ON COMMIT REFRESH权限,另一种是授予ON COMMIT REFRESH系统权限,不过第二种方法的权限比较大。

    SQL> CONN YANGTK/YANGTK@TEST4

    已连接。

    SQL> CREATE USER MVIEW_OWNER IDENTIFIED BY MVIEW_OWNER;

    用户已创建

    SQL> GRANT CREATE SESSION, UNLIMITED TABLESPACE, CREATE TABLE TO MVIEW_OWNER;

    授权成功。

    SQL> GRANT CREATE ANY MATERIALIZED VIEW TO TEST;

    授权成功。

    SQL> GRANT SELECT ON T TO MVIEW_OWNER;

    授权成功。

    SQL> GRANT SELECT ON MLOG$_T TO MVIEW_OWNER;

    授权成功。

    SQL> CONN TEST/TEST@TEST4

    已连接。

    SQL> CREATE MATERIALIZED VIEW MVIEW_OWNER.MV_T REFRESH FAST AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    SQL> CREATE MATERIALIZED VIEW MVIEW_OWNER.MV_T1 REFRESH FAST ON COMMIT AS SELECT * FROM YANGTK.T;

    CREATE MATERIALIZED VIEW MVIEW_OWNER.MV_T1 REFRESH FAST ON COMMIT AS SELECT * FROM YANGTK.T

    *

    ERROR 位于第 1 行:

    ORA-01031: 权限不足

    TEST用户已经具有了ON COMMIT REFRESH系统权限,但是创建物化视图仍然报错。这说明必须是物化视图的拥有者具有这个权限才可以。而创建者只需要CREATE ANY MATERIALIZED权限。

    SQL> CONN YANGTK/YANGTK@TEST4

    已连接。

    SQL> GRANT ON COMMIT REFRESH ON T TO MVIEW_OWNER;

    授权成功。

    SQL> REVOKE ON COMMIT REFRESH ON T FROM TEST;

    撤销成功。

    SQL> CONN TEST/TEST@TEST4

    已连接。

    SQL> CREATE MATERIALIZED VIEW MVIEW_OWNER.MV_T1 REFRESH FAST ON COMMIT AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    和前两篇文章相比,建立基表不在当前用户下的ON COMMIT物化视图比普通物化视图多了一个ON COMMIT REFRESH权限。

    展开全文
  • oracle创建物化视图所需权限

    千次阅读 2013-06-04 15:40:08
    ORACLE物化视图全攻略   一、------------------------------------------------------------------------------------------   物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来...

     

    ORACLE物化视图全攻略

     

    一、------------------------------------------------------------------------------------------

     

    物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。

     

           物化视图可以查询表,视图和其它的物化视图。

     

           通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

     

           对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

     

           对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

     

    本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。

     

           在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

     

    1.主键物化视图:

     

                  下面的语法在远程数据库表emp上创建主键物化视图

     

            SQL> CREATE MATERIALIZED VIEW mv_emp_pk

     

                 REFRESH FAST START WITH SYSDATE

     

                NEXT SYSDATE + 1/48

     

                WITH PRIMARY KEY

     

                AS SELECT * FROM emp@remote_db;

     

                Materialized view created.

     

                  注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:

     

                SQL> CREATE MATERIALIZED VIEW LOG ON emp;

     

                Materialized view log created.

     

    2.Rowid物化视图

     

                  下面的语法在远程数据库表emp上创建Rowid物化视图

     

          SQL> CREATE MATERIALIZED VIEW mv_emp_rowid

     

                REFRESH WITH ROWID

     

                 AS SELECT * FROM emp@remote_db;

     

                Materialized view log created.

     

    3.子查询物化视图

     

                  下面的语法在远程数据库表emp上创建基于empdept表的子查询物化视图

     

                SQL> CREATE MATERIALIZED VIEW mv_empdept

     

                AS SELECT * FROM emp@remote_db e

     

                WHERE EXISTS

     

                 (SELECT * FROM dept@remote_db d

     

                WHERE e.dept_no = d.dept_no)

     

          Materialized view log created.

     

           REFRESH 子句

     

                        [refresh [fast|complete|force]

     

                [on demand | commit]

     

                [start with date] [next date]

     

                [with {primary key|rowid}]]

     

           Refresh选项说明:

     

    a.      oracle用刷新方法在物化视图中刷新数据.

     

    b.      是基于主键还是基于rowid的物化视图

     

    c.       物化视图的刷新时间和间隔刷新时间

     

     

     

    Refresh方法-FAST子句

     

           增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志

     

                        SQL> CREATE MATERIALIZED VIEW LOG ON emp;

     

    Materialized view log created.

     

           对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

     

     

     

    Refresh方法-COMPLETE子句

     

           完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成       完全刷新即使增量刷新可用。

     

     

     

    Refresh Method – FORCE 子句

     

           当指定FORCE子句,如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项

     

     

     

    主键和ROWD子句

     

           WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.

     

           主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。

     

           Rowid物化视图只有一个单一的主表,不能包括下面任何一项:

     

    n         Distinct 或者聚合函数.

     

    n         Group by,子查询,连接和SET操作

     

     

     

    刷新时间      

     

           START WITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点, NEXT 子句说明了刷新的间隔时间.

     

                SQL> CREATE MATERIALIZED VIEW mv_emp_pk

     

                         REFRESH FAST

     

                      START WITH SYSDATE

     

                      NEXT SYSDATE + 2

     

                      WITH PRIMARY KEY

     

                      AS SELECT * FROM emp@remote_db;

     

                      Materialized view created.

     

    在上面的例子中,物化视图数据的第一个副本在创建时生成,以后每两天刷新一次.

     

     

     

    总结

     

    物化视图提供了可伸缩的基于主键或ROWID的视图,指定了刷新方法和自动刷新的时间。

     

    二、------------------------------------------------------------------------------------------

     

    Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

    物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:

    创建方式(Build Methods):包括BUILD IMMEDIATEBUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE

    查询重写(Query Rewrite):包括ENABLE QUERY REWRITEDISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE

    刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMANDON COMMITON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:FASTCOMPLETEFORCENEVE***ST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND

    在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。

    物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWIDPRIMARY KEY类型的。还可以选择是否包括SEQUENCEINCLUDING NEW VALUES以及指定列的列表。

    可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated

    物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在GROUP BY列表中使用CUBEROLLUP,来建立不同等级的聚集物化视图。

    物化视图的基本操作和使用可以查看网址:http://blog.itpub.net/post/468/13318 相关的东东。我主要说明一下使用物化视图的基本东东。如如何建立在特定的表空间上,这些在其他的物化视图上面几乎都没有任何介绍的。主要以我做的一个例子来操作,
    如果对物化视图的基本概念清楚了就比较明白在那里写特定的表空间存储了。

    创建物化视图时应先创建存储的日志空间

    CREATE MATERIALIZED VIEW LOG ON mv_lvy_levytaxbgtdiv
    tablespace ZGMV_DATA --
    日志保存在特定的表空间
    WITH ROWID ;
    CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydetaildata
    tablespace ZGMV_DATA --
    日志保存在特定的表空间
    WITH ROWID,sequence(LEVYDETAILDATAID);
    CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydata
    tablespace ZGMV_DATA --
    日志保存在特定的表空间
    WITH rowid,sequence(LEVYDATAID);
    然后创建物化视图
    --
    创建物化视图
    create materialized view MV_LVY_LEVYDETAILDATA
    TABLESPACE ZGMV_DATA --
    保存表空间
    BUILD DEFERRED --
    延迟刷新不立即刷新
    refresh force --
    如果可以快速刷新则进行快速刷新,否则完全刷新
    on demand --
    按照指定方式刷新
    start with to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh24:mi:ss') --
    第一次刷新时间
    next TRUNC(SYSDATE+1)+18/24 --
    刷新时间间隔
    as
    SELECT levydetaildataid, detaildatano, taxtermbegin, taxtermend,
    ......
    ROUND(taxdeduct * taxpercent1, 2) - ROUND(taxdeduct * taxpercent2, 2) -
    ROUND(taxdeduct * taxpercent3, 2) - ROUND(taxdeduct * taxpercent4, 2) -
    ROUND(taxdeduct * taxpercent5, 2) taxdeduct, ROUND(taxfinal * taxpercent1, 2) -
    ROUND(taxfinal * taxpercent2, 2) - ROUND(taxfinal * taxpercent3, 2) -
    ROUND(taxfinal * taxpercent4, 2) - ROUND(taxfinal * taxpercent5, 2) taxfinal,
    a.levydataid, a.budgetitemcode, taxtypecode,
    ......
    FROM tb_lvy_levydetaildata a, tb_lvy_levydata c, MV_LVY_LEVYTAXBGTDIV b
    WHERE a.levydataid = c.levydataid
    AND a.budgetdistrscalecode = b.budgetdistrscalecode
    AND a.budgetitemcode = b.budgetitemcode
    AND c.incomeresidecode = b.rcvfisccode
    AND C.TAXSTATUSCODE='08'
    AND C.NEGATIVEFLAG!='9'
    删除物化视图日志
    --
    删除物化视图:
    --
    删除日志: DROP materialized view log on mv_lvy_levytaxbgtdiv;
    DROP materialized view log on tb_lvy_levydetaildata;
    DROP materialized view log on tb_lvy_levydata;
    --
    删除物化视图 drop materialized view MV_LVY_LEVYDETAILDATA;
    --
    基本和对表的操作一致 --物化视图由于是物理真实存在的,故可以创建索引。
    创建方式和对普通表创建方式相同,就不在重复写了。

     

    三、------------------------------------------------------------------------------------------

     

    物化视图对于前台数据库使用者来说如同一个实际的表,具有和一般表相通的如select等操作,而其实际上是一个视图,一个由系统实现定期刷新其数据的视图(具体刷新时间在定义物化视图的时候已有定义),使用物化视图更可以实现视图的所有功能,而物化视图确不是在使用时才读取,大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用.具体语法如下:

    物化视图对于前台数据库使用者来说如同一个实际的表,具有和表相通的一般select操作,而其实际上是一个视图,一个定期刷新数据的视图(具体刷新时间在定义物化视图的时候已有定义),使用物化视图可以实现视图的所有功能,而物化视图确不是在使用时才读取,大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用.具体语法如下:
    CREATE MATERIALIZED VIEW an_user_base_file_no_charge
                 REFRESH COMPLETE START WITH SYSDATE
                NEXT TRUNC(SYSDATE+29)+5.5/24
       as
    select distinct user_no
    from cw_arrearage t
    where (t.mon = dbms_tianjin.getLastMonth or
           t.mon = add_months(dbms_tianjin.getLastMonth, -1))
    drop materialized view an_user_base_file_no_charge;

     --------------------------------------------------------------------------------------------

        建立物化视图所需权限(一):http://blog.itpub.net/post/468/50672

    建立物化视图所需权限(二):http://blog.itpub.net/post/468/50707

    建立物化视图所需权限(三):http://blog.itpub.net/post/468/50838

    建立物化视图所需权限(四):http://blog.itpub.net/post/468/51163

     

    展开全文
  • 数据库初级教程:第六...前提条件:要求有创建物化视图权限,和创建表,查询表的权限。 如果是一个提交时更新的视图,还要有提交时更新的系统权限。 如果启用了查询重写的选项,还有要查询重写的权限。 示例如下:

    数据库初级教程:第六讲 创建物化视图

    一个物化视图的创建的主要的作用是实现数据库之间的数据复制和数据仓库中使用。

    在数据复制的环境中,物化视图要创建主键,行ID,对象和子查询物化视图

    在数据仓库中的环境中,物化视图要创建有物化的聚合视图,单表的物化的聚合视图,和
    物化的联接视图。所有的这三种视图都使用了查询重写技术。

    前提条件:要求有创建物化视图的权限,和创建表,查询表的权限。
    如果是一个提交时更新的视图,还要有提交时更新的系统权限。
    如果启用了查询重写的选项,还有要查询重写的权限。


    示例如下:这是一个最简单的物化视图,以hr.employees为主表。
    默认是一个主键的物化视图,以要求时进行数据更新。
    CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM hr.employees;

    示例如下:这个一个以远程数据库上的主表,创建的带子查询的物化视图。
    CREATE MATERIALIZED VIEW foreign_customers FOR UPDATE
     AS SELECT * FROM sh.customers@remote cu
     WHERE EXISTS
     (SELECT * FROM sh.countries@remote co
     WHERE co.country_id = cu.country_id);

    示例如下:这个一个物化的联接视图。它启用了查询重写选项。指定了表空间和并行度。
    表空间的内容,之后再描述。

    CREATE MATERIALIZED VIEW sales_by_month_by_state
     TABLESPACE example
     PARALLEL 4
     BUILD IMMEDIATE
     REFRESH COMPLETE
     ENABLE QUERY REWRITE
     AS SELECT t.calendar_month_desc, c.cust_state_province,
     SUM(s.amount_sold) AS sum_sales
     FROM times t, sales s, customers c
     WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id
     GROUP BY t.calendar_month_desc, c.cust_state_province;

    展开全文
  • 创建物化视图所需权限(1)

    千次阅读 2010-10-26 11:44:00
    http://www.betalog.com/post/410<br /><br /><br />... <br />打算通过几篇文章综合描述建立普通的物化视图和建立各种选项的物化视图所需的权限,这篇文章主要介绍物化视图所需的最基本的权限。主要会分为

    http://www.betalog.com/post/410


    建立物化视图的选项很多,比如刷新方式,刷新模式和是否支持查询重写等。由此涉及到的权限也比较多。而如果在建立物化视图的时候由于缺少权限而报错,ORACLE给出的错误信息仅仅是ORA-01031: 权限不足,而没有清楚的给出是由于缺少哪种权限造成的。

    打算通过几篇文章综合描述建立普通的物化视图和建立各种选项的物化视图所需的权限,这篇文章主要介绍物化视图所需的最基本的权限。主要会分为三个不同的情况:基表和物化视图都是当前用户下;基表不在当前用户下;建立其他用户下的物化视图。

    首先,建立一个新的测试用户,只给CREATE SESSION(保证用户可以登陆到Oracle)和UNLIMITED TABLESPACE(保证用户有足够的空间)权限进行测试。

    SQL> CONN YANGTK/YANGTK@TEST4已连接。
    SQL> CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE YANGTK;

    用户已创建

    SQL> GRANT CREATE SESSION TO TEST;

    授权成功。

    SQL> GRANT UNLIMITED TABLESPACE TO TEST;

    授权成功。

    由于需要建立物化视图的基表,因此先给TEST用户CREATE TABLE的权限。

    SQL> GRANT CREATE TABLE TO TEST;

    授权成功。

    SQL> CONN TEST/TEST@TEST4已连接。
    SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30));

    表已创建。

    SQL> CREATE MATERIALIZED VIEW MV_T AS SELECT * FROM T;
    CREATE MATERIALIZED VIEW MV_T AS SELECT * FROM T
    *
    ERROR 位于第 1 行:
    ORA-01031: 权限不足


    SQL> CONN YANGTK/YANGTK@TEST4已连接。
    SQL> GRANT CREATE MATERIALIZED VIEW TO TEST;

    授权成功。

    SQL> CONN TEST/TEST@TEST4已连接。
    SQL> CREATE MATERIALIZED VIEW MV_T AS SELECT * FROM T;

    实体化视图已创建。

    建立物化视图必然需要CREATE MATERIALIZED VIEW权限(在8i及以前版本中,权限的名称是CREATE SNAPSHOT,9i中SNAPSHOT和MATERIALIZED VIEW是同义词)。在上面的例子中,通过授予了CREATE MATERIALIZED VIEW权限,已经建立了最简单的物化视图。但是,是不是仅仅包含CREATE MATERIALIZED VIEW权限就足够了?我们注意到,在开始的时候为了建立基表,还给了CREATE TABLE权限,下面回收这个权限,然后重建物化视图:

    SQL> CONN YANGTK/YANGTK@TEST4已连接。
    SQL> REVOKE CREATE MATERIALIZED VIEW FROM TEST;

    撤销成功。

    SQL> CONN TEST/TEST@TEST4已连接。
    SQL> CREATE MATERIALIZED VIEW MV_T1 AS SELECT * FROM T;
    CREATE MATERIALIZED VIEW MV_T1 AS SELECT * FROM T
    *
    ERROR 位于第 1 行:
    ORA-01031: 权限不足

    通过测试可以看到,建立物化视图,除了CREATE MATERIALIZED VIEW权限,还需要CREATE TABLE权限。其实,这个并不奇怪,查询一下USER_OBJECTS就明白了。

    SQL> COL OBJECT_NAME FORMAT A30
    SQL> SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS;

    OBJECT_NAME OBJECT_TYPE
    ------------------------------ ------------------
    MV_T TABLE
    MV_T MATERIALIZED VIEW
    SYS_C003877 INDEX
    SYS_C003878 INDEX
    T TABLE

    Oracle建立了同名的表和物化视图MV_T,这就是需要CREATE TABLE权限的原因。

    第二种情况基表不在当前用户下:这种情况比较简单,除了第一种情况需要的权限以外,还需要对基表的SELECT权限(当然SELECT ANY TABLE权限也可以,不过这里的原则是讨论最小权限)

    SQL> CONN YANGTK/YANGTK@TEST4已连接。
    SQL> GRANT CREATE MATERIALIZED VIEW TO TEST;

    授权成功。

    SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30));

    表已创建。

    SQL> CONN TEST/TEST@TEST4已连接。
    SQL> CREATE MATERIALIZED VIEW MV_T1 AS SELECT * FROM YANGTK.T;
    CREATE MATERIALIZED VIEW MV_T1 AS SELECT * FROM YANGTK.T
    *
    ERROR 位于第 1 行:
    ORA-00942: 表或视图不存在


    SQL> CONN YANGTK/YANGTK@TEST4已连接。
    SQL> GRANT SELECT ON T TO TEST;

    授权成功。

    SQL> CONN TEST/TEST@TEST4已连接。
    SQL> CREATE MATERIALIZED VIEW MV_T1 AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    对于第三种情况,创建用户由于要在别的方案中创建物化视图,因此很明显需要CREATE ANY MATERIALIZED VIEW权限,另外物化视图的拥有者必须具有CREATE TABLE权限。当然,如果基表不在物化视图拥有者方案内,则物化视图的拥有者必须有基表的查询权限。

    SQL> CONN YANGTK/YANGTK@TEST4已连接。
    SQL> CREATE USER MVIEW_OWNER IDENTIFIED BY MVIEW_OWNER;

    用户已创建

    SQL> GRANT CREATE SESSION, UNLIMITED TABLESPACE, CREATE TABLE TO MVIEW_OWNER;

    授权成功。

    SQL> GRANT CREATE ANY MATERIALIZED VIEW TO TEST;

    授权成功。

    SQL> GRANT SELECT ON T TO MVIEW_OWNER;

    授权成功。

    SQL> CONN TEST/TEST@TEST4已连接。
    SQL> CREATE MATERIALIZED VIEW MVIEW_OWNER.MV_T AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    上面列出了需要成功创建这种类型的物化视图的基本权限,需要说明的是,TEST用户的CREATE TABLE, CREATE MATERIALIZED和对基表的查询权限是不必要的。

    SQL> CONN YANGTK/YANGTK@TEST4已连接。
    SQL> REVOKE SELECT ON T FROM TEST;

    撤销成功。

    SQL> CONN TEST/TEST@TEST4已连接。
    SQL> CREATE MATERIALIZED VIEW MVIEW_OWNER.MV_T1 AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    SQL> CONN YANGTK/YANGTK@TEST4已连接。
    SQL> REVOKE CREATE TABLE, CREATE MATERIALIZED VIEW FROM TEST;

    撤销成功。

    SQL> CONN TEST/TEST@TEST4已连接。
    SQL> CREATE MATERIALIZED VIEW MVIEW_OWNER.MV_T2 AS SELECT * FROM YANGTK.T;

    实体化视图已创建。

    根据上面的测试可以看出,第三种情况其实是前两种情况的组合。作为物化视图的创建者需要CREATE ANY MATERIALIZED VIEW权限,而物化视图的拥有者需要CREATE TABLE和对基表的查询权限。

    展开全文
  • 创建物化视图需要的权限

    千次阅读 2014-05-29 15:12:19
    13349212345
  • 如果要创建基表是其它用户表的实体化视图,那么需要给实体化视图的owner赋予以下权限:grant CREATE ANY MATERIALIZED VIEW to username;grant SELECT ANY TABLE to username;如果要创建refresh on commit的视图,...
  • 在oracle上创建物化视图日志,使用以下语句: CREATE MATERIALIZED VIEW LOG ON TABLE_NAME 结果报错ORA-01031,没有足够的权限 请问最少需要为当前账户分配那些权限才能创建物化视图日志: 请注意:1、是创建...
  • oracle创建物化视图

    2012-09-17 16:41:05
    ----- 需要 创建 权限视图 CREATE MATERIALIZED VIEW V_INTER_ORG_CSA_GRANT TABLESPACE TBS_LDC --保存表空间 BUILD DEFERRED --延迟刷新不立即刷新 REFRESH FORCE --如果可以快速刷新则进行快速刷新,...
  • grant create snapshot to user; grant query rewrite to user; grant create materialized view to user; ...
  • 创建物化视图ora-01031

    2016-06-01 17:01:34
    创建物化视图报ora-01031 经过和system用户比较发现缺少如下权限 grant global query rewrite to username; grant advisor to usernam...
  • 原文Oracle® Database SQL Reference 10g Release 2(10.2) B14200-02 P924-925 创建物化视图权限应当直接赋予而非通过角色 在你自己的schema中创建物化视图: . 必须赋予了CREATE MATERIALIZED VIEW的系统权限...
  • 我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是...于是决定使用物化视图,把对方数据库中的数据拿过来,虽然
  • 建立物化视图的选项很多,比如刷新方式,刷新模式...打算通过几篇文章综合描述建立普通的物化视图和建立各种选项的物化视图所需的权限,这篇文章主要介绍物化视图所需的最基本的权限。主要会分为三个不同的情况:基...
  • 如上创建物化视图, 大家都知道目标用户需要给创建用户 CREATE MATERIALIZED VIEW 权限 但是只是这样还是会报权限错误 如何处理: REFRESH FORCE ON COMMIT ENABLE QUERY REWRITE 因为在创建该物化...
  • 权限已经加好 GRANT CREATE SESSION, UNLIMITED TABLESPACE, CREATE TABLE TO TEST; GRANT CREATE ANY ...但创物化视图报错: ORA-00942: TABLE OR VIEW does NOT existORA-06512: AT "SYS.DBMS_SNAP...
  • oracle物化视图创建

    2015-07-16 14:11:00
    我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库...现在记录下物化视图创建过程(以一张表为例)。 一、准备条件以及备注 假设双方...
  • Oracle 物化视图创建

    2012-11-28 11:24:29
    开始学习物化视图,想知道物化视图怎么建立的,就找了点资料,进行实践,操作如下: 以DBA权限用户登录; SQL> grant create materialized view to study; ...
  • 物化视图创建

    2014-11-27 11:52:03
    我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库...现在记录下物化视图创建过程(以一张表为例)。 一、准备条件以及备注 假设双方
  • 物化视图

    千次阅读 2013-07-13 17:31:39
    一、创建物化视图权限 在当前用户下建立物化视图所需要的权限:  CREATE MATERIALIZED VIEW、 http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_6002.htm#SQLRF01302 ...
  • Oracle物化视图

    2019-05-02 10:25:00
    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性...创建物化视图需要的权限: grantcreatematerializedviewtouser_name; 创建语句: create mater...
  • oracle物化视图

    2017-11-21 14:01:00
    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性...创建物化视图需要的权限: grantcreatematerializedviewtouser_name; 创建语句: create mater...
  • 我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的...现在记录下物化视图创建过程(以一张表为例)。一、准备条件以及备注假设双方数据库都是O...
  • 我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有...现在记录下物化视图创建过程(以一张表为例)。 一、...
  • ORACLE物化视图创建实例

    万次阅读 2010-04-29 17:25:00
    公司的项目中遇到需要从其它系统的数据库中取数据进行统计分析的问题,初步选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下...现在记录下物化视图创建过程(以一张表为例)。 一、准备条件以及备注 
  • 原文地址:Oracle物化视图创建及管理作者:于士博 一、前言: 在Oracle文档中,物化视图作为数据仓库的一个技术,但是实际上在OLTP系统中,用来进行数据同步,使用查询重写优化SQL语句都是相当方便的。 二、物化视图...

空空如也

空空如也

1 2 3 4 5
收藏数 86
精华内容 34
关键字:

创建物化视图权限