[20121101]物化视图与表(Materialized Views and Tables).txt

[20121101]物化视图与表(Materialized Views and Tables).txt
1.建立测试环境:
SQL> select * from v$version  where rownum
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
SQL> grant dba to test identified by xxxxxx;
Grant succeeded.
SQL> create table deptx as select * from scott.dept ;
Table created.
2.测试建立物化视图1:
connect test/xxxxxx;
create materialized view mv_deptx as select count(*) from deptx;

SQL> create materialized view mv_deptx as select count(*) from deptx;
Materialized view created.
SQL> desc mv_deptx
Name      Null?    Type
--------- -------- -------
COUNT(*)           NUMBER
--字段名使用count(*)不好.
SQL> drop materialized  view mv_deptx;
Materialized view dropped.
SQL> create materialized view mv_deptx as select count(*) dept_count from deptx;
Materialized view created.
SQL> select * from user_objects where object_type in ('TABLE','MATERIALIZED VIEW');
OBJECT_NAME          SUBOBJECT_NAME       OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE
-------------------- -------------------- --------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ----------
MV_DEPTX                                     117700                MATERIALIZED VIEW   2012-11-01 17:10:28 2012-11-01 17:10:28 2012-11-01:17:10:28 VALID   N N N         19
DEPTX                                        117696         117696 TABLE               2012-11-01 17:07:07 2012-11-01 17:07:07 2012-11-01:17:07:07 VALID   N N N          1
MV_DEPTX                                     117699         117699 TABLE               2012-11-01 17:10:28 2012-11-01 17:10:28 2012-11-01:17:10:28 VALID   N N N          1
--可以发现建立物化视图的同时,会建立相同名字的表.

SQL> drop materialized  view mv_deptx;
Materialized view dropped.
SQL> select * from user_objects where object_type in ('TABLE','MATERIALIZED VIEW');
OBJECT_NAME          SUBOBJECT_NAME       OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE
-------------------- -------------------- --------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ----------
DEPTX                                        117696         117696 TABLE               2012-11-01 17:07:07 2012-11-01 17:07:07 2012-11-01:17:07:07 VALID   N N N          1
--如果删除物化视图,对应的表也同时删除.
3.测试建立物化视图2:
SQL> create materialized view mv_deptx on prebuilt table as select count(*) dept_count from deptx;
create materialized view mv_deptx on prebuilt table as select count(*) dept_count from deptx
       *
ERROR at line 1:
ORA-12059: prebuilt table "TEST"."MV_DEPTX" does not exist
--如果采用on prebuilt table模式,必须先建立表.
SQL> create table mv_deptx(a number);
Table created.
SQL> create materialized view mv_deptx  as select count(*) dept_count from deptx;
create materialized view mv_deptx  as select count(*) dept_count from deptx
                                                                      *
ERROR at line 1:
ORA-00955: name is already used by an existing object
--如果存在对应的表,建立时必须加入 on prebuilt table 参数.
SQL> create materialized view mv_deptx on prebuilt table as select count(*) dept_count from deptx;
create materialized view mv_deptx on prebuilt table as select count(*) dept_count from deptx
                                                              *
ERROR at line 1:
ORA-12060: shape of prebuilt table does not match definition query
--可以发现字段命令无匹配,无法建立.
SQL> ALTER TABLE TEST.MV_DEPTX  RENAME COLUMN A TO dept_count;
Table altered.
SQL> create materialized view mv_deptx on prebuilt table as select count(*) dept_count from deptx;
Materialized view created.
SQL> select * from user_objects where object_type in ('TABLE','MATERIALIZED VIEW');
OBJECT_NAME          SUBOBJECT_NAME       OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE
-------------------- -------------------- --------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ----------
MV_DEPTX                                     117701         117701 TABLE               2012-11-01 17:18:41 2012-11-01 17:20:32 2012-11-01:17:20:32 VALID   N N N          1
DEPTX                                        117696         117696 TABLE               2012-11-01 17:07:07 2012-11-01 17:07:07 2012-11-01:17:07:07 VALID   N N N          1
MV_DEPTX                                     117702                MATERIALIZED VIEW   2012-11-01 17:20:51 2012-11-01 17:20:51 2012-11-01:17:20:51 VALID   N N N         19
--看看这个时候是否可以删除表?
SQL> drop table mv_deptx;
drop table mv_deptx
           *
ERROR at line 1:
ORA-12083: must use DROP MATERIALIZED VIEW to drop "TEST"."MV_DEPTX"
--可以发现无法删除.
SQL> drop materialized  view mv_deptx;
Materialized view dropped.
SQL> select * from user_objects where object_type in ('TABLE','MATERIALIZED VIEW');
OBJECT_NAME          SUBOBJECT_NAME       OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE
-------------------- -------------------- --------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ----------
MV_DEPTX                                     117701         117701 TABLE               2012-11-01 17:18:41 2012-11-01 17:20:32 2012-11-01:17:20:32 VALID   N N N          1
DEPTX                                        117696         117696 TABLE               2012-11-01 17:07:07 2012-11-01 17:07:07 2012-11-01:17:07:07 VALID   N N N          1
--可以发现删除物化视图,表依旧存在.
总结:
第1种方式建立物化视图,建立时同时建立表和视图.删除物化视图,同时消失.
第2种方式建立物化视图(on prebuilt table),建立物化视图前,先要建立表,才能物化视图时. 如果删除物化视图,表保持存在.

				
时间: 2024-08-02 01:42:49

[20121101]物化视图与表(Materialized Views and Tables).txt的相关文章

物化视图刷新失败导致日志表异常增大

整理自:http://blog.itpub.net/231499/viewspace-63714/ 今天在检查时,发现某个物化视图日志占用的空间超过150M,再检查看,该物化视图日志表的记录数有150W,由于其对应的物化视图没有会刷新一次,结合业务量分析可知:物化视图日志不能正常清除. 下面的解决步骤 --在源库查询物化视图对应日志条目个数SQL> select count(1) from MLOG$_ITEM_TAG; COUNT(1)----------532515 --在物化视图端刷新物化

物化视图学习笔记

物化视图 删除表后物化视图日志自动删除 SQL> CREATE MATERIALIZED VIEW LOG ON TT WITH ROWID,SEQUENCE(OBJECT_ID,OBJECT_NAME) INCLUDING NEW VALUES; Materialized view log created. SQL> EXEC DBMS_SNAPSHOT.REFRESH('MV1'); BEGIN DBMS_SNAPSHOT.REFRESH('MV1'); END; * ERROR at l

ORACLE中的物化视图

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

Oracle物化视图详解

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

详解oracle数据库的物化视图

物化视图存储基于远程表的数据,也可称为快照,是远程数据的本地副本,或者用来生成基于数据表求和的汇总表 通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中) 对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的 如果你想修改本地副本,必须用高级复制的功能.当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取 物化视图把他的物理结构存储在自己的段中,该段可以被索引和分区 查询不必完全匹配用来创建物化视图的 SQL 语句,优化程序可以动态重写一个与原定义相近的查询

创建增量同步Oracle物化视图问题

我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某个表的数据同步到另一个数据库B上. 我们常用的最简单的实现步骤是这样.首先在数据库A上确认该表有主键,然后建立在这个表上建立 物化视图日志如"CREATE MATERIALIZED VIEW LOG ON T_tablename;",再到数据库B上创建 数据库链接和快速刷新的物化视图如"create materialized view mv_tablename refresh fast on demand star

物化视图快速刷新报 ORA-12008 & ORA-01031

物化视图快速刷新报 ORA-12008 & ORA-01031 用户A创建了物化视图,物化视图里边引用了用户B的表,现在用户C执行exec dbms_mview.refresh('MV_pi_to_res_lhr', 'F');报错:ORA-12008: error in materialized view refresh pathORA-01031: insufficient privilegesORA-06512: at "SYS.DBMS_SNAPSHOT", line

物化视图prebuilt和在线重定义

数据迁移中有一种解决方案很有亮点,如果表的数据量大,迁移涉及的表不多,同时对于维护时间有要求的情况下,物化视图的prebuilt方式就是一种很不错的选择. 大体的步骤和方法如下: 假设源环境是test_source,目标环境是test_target 在源环境中test_source的操作如下: Create table test_mv as select *from all_objects  ; alter table test_mv modify(object_id primary key);

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

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