关于物化视图的疑问

--初始化操作,

创建两个用户一个,testo,一个test.

在testo上创建表,test上创建物化视图。

SQL> create user testo identified by testo;

User created.

SQL> create user test identified by test;

User created.

SQL> grant connect,resource to testo,test;

Grant succeeded.

SQL> grant create materialized view to test;

Grant succeeded.

SQL> grant create role to testo;

Grant succeeded.

SQL> conn testo/testo;     

Connected.

SQL> create table mv as select *from all_objects where object_id is not null and rownum

Table created.

SQL> create role t1;

Role created.

SQL> grant select on testo.mv to t1;

Grant succeeded.

SQL> grant t1 to test;

Grant succeeded.

SQL> conn test/test  --连接到test用户,准备创建物化视图。

Connected.

SQL> create materialized view test_mv as select *from testo.mv;--尝试默认的选项,可以成功创建。

Materialized view created.

SQL> drop materialized view test_mv;

Materialized view dropped.

SQL> create materialized view test_mv refresh force on demand with rowid using default local rollback segment disable query rewrite as select *from testo.mv;  -尝试指定选项创建,也可以成功创建。

Materialized view created.

SQL> drop materialized view test_mv;

Materialized view dropped.

问题 1:

SQL> conn system/unix11   --连接到system

Connected.

SQL> create materialized view test.test_mv refresh force on demand with rowid using default local rollback segment disable query rewrite as select *from testo.mv;

create materialized view test.test_mv refresh force on demand with rowid using default local rollback segment disable query rewrite as select *from testo.mv

                                                                                                                                                          *

ERROR at line 1:

ORA-00942: table or view does not exist

SQL> desc testo.mv

 Name                                      Null?    Type

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

 OWNER                                     NOT NULL VARCHAR2(30)

 OBJECT_NAME                               NOT NULL VARCHAR2(30)

 SUBOBJECT_NAME                                     VARCHAR2(30)

 OBJECT_ID                                 NOT NULL NUMBER

 DATA_OBJECT_ID                                     NUMBER

 OBJECT_TYPE                                        VARCHAR2(19)

 CREATED                                   NOT NULL DATE

 LAST_DDL_TIME                             NOT NULL DATE

 TIMESTAMP                                          VARCHAR2(19)

 STATUS                                             VARCHAR2(7)

 TEMPORARY                                          VARCHAR2(1)

 GENERATED                                          VARCHAR2(1)

 SECONDARY                                          VARCHAR2(1)

 NAMESPACE                                 NOT NULL NUMBER

 EDITION_NAME                                       VARCHAR2(30)

SQL> 

问题  2:

SQL> grant select on testo.mv to public; --赋予public权限

Grant succeeded.

SQL> create materialized view test.test_mv refresh force on demand with rowid using default local rollback segment disable query rewrite as select *from testo.mv

  2  ;

create materialized view test.test_mv refresh force on demand with rowid using default local rollback segment disable query rewrite as select *from testo.mv

                                                                                                                                                          *

ERROR at line 1:

ORA-01031: insufficient privileges

排除role的影响

SQL> grant select on testo.mv to test;

Grant succeeded.

SQL> create materialized view test.test_mv refresh force on demand with rowid using default local rollback segment disable query rewrite as select *from testo.mv

  2  ;

create materialized view test.test_mv refresh force on demand with rowid using default local rollback segment disable query rewrite as select *from testo.mv

                                                                                                                                                          *

ERROR at line 1:

ORA-01031: insufficient privileges

SQL> revoke select on testo.mv from test;

Revoke succeeded.

问题 3(已解决)

SQL> select dbms_metadata.get_ddl('MATERIALIZED VIEW','MV','TEST') from dual;

ERROR:

ORA-31600: invalid input value MATERIALIZED VIEW for parameter OBJECT_TYPE in

function GET_DDL

ORA-06512: at "SYS.DBMS_METADATA", line 3773

ORA-06512: at "SYS.DBMS_METADATA", line 3828

ORA-06512: at "SYS.DBMS_METADATA", line 5678

ORA-06512: at line 1

生成报错,

确认了下,应该得改成MATERIALIZED_VIEW

SQL> select dbms_metadata.get_ddl('MATERIALIZED_VIEW','TEST_MV','TEST')from dual;

  CREATE MATERIALIZED VIEW "TEST"."TEST_MV" ("OWNER", "OBJECT_NAME", "SUBOBJECT_

NAME", "OBJECT_ID", "DATA_OBJECT_ID", "OBJECT_TYPE", "CREATED", "LAST_DDL_TIME",

 "TIMESTAMP", "STATUS", "TEMPORARY", "GENERATED", "SECONDARY", "NAMESPACE", "EDI

TION_NAME")

  ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOG

GING........

就可以了。

阅读(7946) | 评论(0) | 转发(3) |

0

上一篇:alert日志中的一条ora警告信息的分析

下一篇:10g升级至11g需要考虑的参数优化

时间: 2024-08-30 20:06:43

关于物化视图的疑问的相关文章

物化视图相关的性能改进

今天早上开发的一个同事找到我说他早上做了一个统计查询,但是感觉速度很慢,已经过了一个小时了还没有反应.想让我看看是什么情况. 我通过v$session查到有一个会话确实已经持续了近一个小时,查看sql语句是一个create table select * from xxx这样格式的语句.也就是通过关联查询创建出一个所谓的临时表来. 语句如下: create table APP_BI_ENCRYPT_QUERY.t_result_1312 as select t1.SECURITY_PHONE as

物化视图刷新结合ADG的尝试

之前写过一篇 物化视图刷新结合ADG的尝试,想必绝大多数的朋友看完再没有深究,其实也有些朋友做了建议,让我尝试prebuilt来做.这种数据迁移方式用的比较少,但是个人感觉还是很不错的.如果迁移的表不是很多,这种迁移方式还是非常强大的. 如果一个表非常大,我目前的设想就是通过ADG备库来把数据首先同步到统计库中,然后在主库端通过物化视图日志来增量刷新. 使用物化视图 prebuilt的方式确实可以实现,我产生了几个疑问,物化视图日志该什么时候创建.创建的时间太早或者太晚,对于增量刷新是否有影响,

【物化视图】几种物化视图日志分析

物化视图日志在建立时有多种选项:ROWID.PRIMARY KEY和OBJECT ID三种类型,同时还可以指定SEQUENCE或明确指定列名. 上面这些情况产生的物化视图日志的结构都不相同. 所有物化视图都会包括的列: SNAPTIME$$:用于表示刷新时间. DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE. OLD_NEW$$:用于表示这个值是新值还是旧值.N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作. CHANGE_V

【物化视图】根据物化视图日志快速刷新物化视图的过程

先来再次分析一下物化视图日志的结构. yang@rac1>create table t (id number ,name varchar2(30),val number); Table created. yang@rac1>create materialized view log on t with rowid,sequence (id,name) including  new values; Materialized view log created. yang@rac1>desc m

ORACLE中的物化视图

oracle|视图 ORACLE中的物化视图         物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照.        物化视图可以查询表,视图和其它的物化视图.        通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中).        对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的.如果你想修改本地副本,必须用高级复制的功能.当你想从一个表或视

MySQL中海量数据统计处理及模拟物化视图

一 物化视图 物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作 的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果 . 只有大型数据库oracle10g,db2才支持这个功能,而MySQL5.1暂时还没有这个功能. 本人通过事件调度和存储过程模拟了物化视图.下面大家一起来讨论吧.^-^ 二 准备知识 1)存储过程:玩过数据库的人,都知道他是啥~,~ 2)事件调度:在 MySQL5.1开始才有的新功能.说白了就是个定时器.跟java里的timer差不多. Sq

Oracle隐式转换会影响物化视图查询重写

今天有人问我一个物化视图查询重写的问题,最后发现问题其实和物化视图的功能没有多大的关系,而是隐式转换导致的问题. 还是通过例子来说明这个问题: SQL> create table t ( 2  id number, 3  time date, 4  other varchar2(4000)) 5  partition by range (time) 6  (partition p1 values less than (to_date('2008-1-1', 'yyyy-mm-dd')), 7  

oracle如何利用触发器对物化视图刷新进行定制

物化视图的刷新其实和普通的SQL执行没有什么本质的区别,因此也可以通过在物化视图上创建触发器的方式,对刷新操作进行定制. 正好前两天有人在BLOG上问我,如果在物化视图添加一个时间戳列,并在物化视图更新的时候,自动维护这个列.其实很简单,通过触发器就可以达到这个目的: SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30)); 表已创建. SQL> INSERT INTO T SELECT ROWNUM, TNAME FROM

Oracle物化视图详解

一. 理论部分 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果.物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能:物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性