可更新的物化视图

快速刷新

可更新的物化视图

SQL> exec dbms_mview.refresh('MV_T','F');
BEGIN dbms_mview.refresh('MV_T','F'); END;
*
ERROR at line 1:
ORA-12034: materialized view log on "JEANRON"."T" younger than last refresh
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2255
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2461
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2430
ORA-06512: at line 1

create materialized view before materialized view log

exec dbms_mview.refresh('MV_T','C');

使用primary key

使用rowid.
如果使用rowid,需要考虑是否适合做快速刷新。如果有频繁的truncate之类的操作,rowid会发生变化。快速刷新就不适用了。
SQL> select rowid,object_id from t;

ROWID               OBJECT_ID
------------------ ----------
AAASx8AAGAAAi+NAAA        258
AAASx8AAGAAAi+NAAB        259
AAASx8AAGAAAi+NAAC        311
AAASx8AAGAAAi+NAAD        313
AAASx8AAGAAAi+NAAE        314
AAASx8AAGAAAi+NAAF        316
AAASx8AAGAAAi+NAAG        317
AAASx8AAGAAAi+NAAH        319
AAASx8AAGAAAi+NAAI        605

9 rows selected.

SQL> create table t2 as select *from t;
Table created.

SQL> truncate table t;
Table truncated.

SQL> insert into t select *from t2;
9 rows created.

SQL> commit;
Commit complete.

SQL> select rowid,object_id from t;
ROWID               OBJECT_ID
------------------ ----------
AAASyDAAGAAAi+aAAA        258
AAASyDAAGAAAi+aAAB        259
AAASyDAAGAAAi+aAAC        311
AAASyDAAGAAAi+aAAD        313
AAASyDAAGAAAi+aAAE        314
AAASyDAAGAAAi+aAAF        316
AAASyDAAGAAAi+aAAG        317
AAASyDAAGAAAi+aAAH        319
AAASyDAAGAAAi+aAAI        605

9 rows selected.

时间: 2024-11-28 22:14:59

可更新的物化视图的相关文章

【物化视图】使用可更新的物化视图。

创建物化视图是默认是不可更新的,要创建可以更新的物化视图必须加上for update 关键字. 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

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

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

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

物化视图日志在建立时有多种选项: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如何利用触发器对物化视图刷新进行定制

物化视图的刷新其实和普通的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语句的正确性和有效性

oracle基于COMMIT SCN的物化视图日志快速刷新的方法

11.2中物化视图日志可以指定COMMIT SCN,这时物化视图刷新就不需要时间戳了,这篇简单描述Oracle是如何实现通过COMMIT SCN来进行刷新的. 建立一个测试环境: SQL> SELECT * FROM V$VERSION; BANNER -------------------------------------------------------------------------------- Oracle Database11gEnterprise Edition Relea

什么是Oracle物化视图

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

oracle物化视图同步两个数据库间的数据

两个oracle 10g 数据库,通过物化视图同步数据的具体实施流程 源库是 192.168.1.81 目标库是192.168.1.96 统计库用的服务器是 81 在统计库81上创建只读用户snap_query,用于查询 conn /as sysdba create user snap_query identified by snap_query default tablespace users temporary tablespace temp; grant connect to snap_q