建立物化视图的选项很多,比如刷新方式,刷新模式和是否支持查询重写等。由此涉及到的权限也比较多。而如果在建立物化视图的时候由于缺少权限而报错,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 物化视图创建和使用 Oracle 物化视图是一种预先计算并保存表连接或聚集等耗时较多的操作的结果,以提高查询性能。物化视图对应用程序透明,不会影响应用程序的正确性和有效性,但需要占用存储空间。基表发生...
物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建
3. **嵌套物化视图**:物化视图中包含了其他物化视图。 对于快速刷新,不同类型的物化视图有不同的要求。例如,只包含连接的物化视图可以使用`REFRESH FAST`,但需要物化视图日志。物化视图日志是用于跟踪基表更改...
6. **使用其他方法创建物化视图**: - 如果无法解决ROWID的问题,可以考虑创建不包含ROWID的物化视图。 - 或者采用其他优化策略来提高查询性能。 #### 实际操作示例 假设我们尝试创建如下的物化视图: ```sql ...
1. **ONDEMAND**:默认情况下,物化视图采用的是ONDEMAND模式,即只有当用户显式地请求刷新时,Oracle才会更新物化视图中的数据。这是一种最简单的创建方式,适用于数据变化不频繁或者对数据新鲜度要求不高的场景。 ...
本文将详细介绍如何创建和管理物化视图以及如何利用查询重写功能来透明地重写 SQL 查询,从而利用物化视图提高查询响应时间,让数据库用户完全不必了解哪些物化视图存在。 #### 汇总管理的重要性 汇总管理提供了一...
输出的脚本可能包括创建物化视图日志(Materialized View Log)的命令,物化视图日志是快速刷新机制的关键组成部分,它们记录源表的变化,以便物化视图能够追踪和更新。 总之,Oracle数据库中的物化视图是一种强大...
物化视图可以分为四种类型:快照物化视图、积极物化视图、消极物化视图和非常消极物化视图。 为什么使用物化视图?在执行某些查询时,效率较低,传统方法(例如,索引或查询优化)无法显著提高效率。这时使用的方法...
1. ON DEMAND物化视图:这种类型的物化视图只有在用户显式请求刷新时,或者根据预定义的调度(例如通过DBMS_JOB包创建的定时任务)才会更新,以保持与基表数据的一致性。默认情况下,如果在创建物化视图时未指定刷新...
真正值得一看的mysql知识。MySQL中实现物化视图(中文版)翻译于外文。
物化视图创建
Oracle物化视图是一种在数据库中预先计算并存储视图查询结果的数据对象,它与普通的视图不同,普通视图在查询时动态地基于基表数据生成结果,而物化视图则拥有自己的物理存储,提供了对数据的快速访问。在本篇循序渐...
物化视图可以查询表、视图和其他物化视图。通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。 创建物化视图的目的: 1. 在本地维护远程数据的副本,提高查询效率。 2. 生成基于数据表的...
此外,物化视图的快速刷新还需要满足一些其他的限制条件,如基表的结构、数据类型、索引等。只有当物化视图满足了所有的限制条件时,才能进行快速刷新,否则就需要进行完全刷新,影响了物化视图的性能。 物化视图的...
手动更新需要用户触发更新操作,而自动更新则需要数据库管理系统支持物化视图的自动刷新功能。自动刷新通常有立即刷新和增量刷新两种策略,立即刷新会重新执行整个查询,而增量刷新则只更新自上次刷新以来改变的数据...
- **创建物化视图**:使用CREATE MATERIALIZED VIEW语句创建物化视图。 - **刷新物化视图**:定期或按需刷新物化视图以保持数据的最新状态。 - **查询物化视图**:通过简单的SELECT语句直接查询物化视图。 - **维护...
Oracle物化视图是数据库管理系统中的一个重要特性,尤其在处理大量数据和复杂查询的场景下,它可以极大地提升查询性能和数据一致性。物化视图与普通的视图不同,后者是逻辑上的虚表,其内容在查询时动态计算,而物化...
oralce创建物化视图,基本语法,基本操作
orace表分区及物化视图 进一步了解oracle表分区技术及物化视图技术应用
Doris 是一个开源的分布式分析型数据库,旨在帮助用户快速处理海量数据,提供了物化视图和索引等功能,以提高查询性能和数据的一致性。下面将详细介绍 Doris 的物化视图和索引的概念、应用场景和使用方法。 物化...