建立物化视图的选项很多,比如刷新方式,刷新模式和是否支持查询重写等。由此涉及到的权限也比较多。而如果在建立物化视图的时候由于缺少权限而报错,ORACLE给出的错误信息仅仅是ORA-01031: 权限不足,而没有清楚的给出是由于缺少哪种权限造成的。
打算通过几篇文章综合描述建立普通的物化视图和建立各种选项的物化视图所需的权限,这篇文章主要介绍物化视图所需的最基本的权限。主要会分为三个不同的情况:基表和物化视图都是当前用户下;基表不在当前用户下;建立其他用户下的物化视图。
相关文章:
建立物化视图所需权限(二):http://blog.itpub.net/post/468/50707
建立物化视图所需权限(三):http://blog.itpub.net/post/468/50838
建立物化视图所需权限(四):http://blog.itpub.net/post/468/51163
首先,建立一个新的测试用户,只给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 TABLE 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 TABLE 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和对基表的查询权限。
转自: http://yangtingkun.itpub.net/post/468/50672
分享到:
相关推荐
物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建
Oracle物化视图创建和使用,设置物化视图的自动刷新时间
物化视图创建
真正值得一看的mysql知识。MySQL中实现物化视图(中文版)翻译于外文。
物化视图 (MV)在一个段中存储查询结果,并且能够在提交查询时将结果返回给用户,从而不再需要重新执行查询 — 在查询要执行几次时,这是一个很大的好处。物化视图可以利用一个快速刷新机制从基础表中全部或增量刷新...
oralce创建物化视图,基本语法,基本操作
Oracle物化视图应用详,有实例和各属性介绍
里面详细讲述物化视图的种种创建,物化日志的结构,group by 语句创建物化视图的处理
orace表分区及物化视图 进一步了解oracle表分区技术及物化视图技术应用
创建物化视图ORA-12014错误解决方法 创建物化视图ORA-12014错误解决方法
Oracle中物化视图很重要,物化视图优秀论文. 在数据仓库中物化视图是非常重要的。Oracle中物化视图很重要,物化视图优秀论文. 在数据仓库中物化视图是非常重要的。Oracle中物化视图很重要,物化视图优秀论文. 在数据...
在scott用户下创建视图的时候,报错:权限不足,遇到这个问题,我也是束手无策,于是网上搜集整理了一下,晒出来和大家分享,希望可以帮助你们
ORACLE9I物化视图
物化视图的两种实现,直接在物化视图中设置设计和通过定时任务触发存储过程来更新物化视图
物化视图普通视图区别.doc,很不错的资料
物化视图的快速刷新
物化视图学习笔记 错误问题分析总结 详细讲解了物化视图的内部构造,从零基础开始学习 重点说明ORA-12034的错误解决方案
数据仓库,数据挖掘,物化视图 数据仓库,数据挖掘,物化视图 数据仓库,数据挖掘,物化视图
MongoDB视图测试创建脚本及测试数据创建脚本;创建物化视图的基本方式及进阶方式。如:用$unwind 、$replaceRoot分解$lookup中的as数组,使之扁平化返回;使用$project 重命名字段;使用$merge输出物化视图等
Oracle怎么根据物化视图日志快速刷新物化视图