物化视图日志简介

合集下载

基于Oracle物化视图日志的数据同步技术研究

基于Oracle物化视图日志的数据同步技术研究
物 化 视 图 日志 进 行 介 绍 。
作机制 的深入研 究 , 本文分析 了 Orc al e数据库物化视 图 日志对
数 据 操 作 的 记 录 方 式 , 此基 础 上 提 出 了一 种 基 于 Orc 在 al 据 e数
库 物化视图 H志 的数 据同步方法 , 为解决分布 式应用系统 中数
软件 2 1 0 2年第 3 3卷 第 l 期
S F ⅥAR 0T , E
国际 I T传媒 品牌
基于O a 物化视 图 日志 的数据 同步技术研 究 rce l
刘静涛 吴伊萌 张 明安
(15 部 队 ,北京 ,103 ) 96息系统的开发 中, 在 分布 式数据 库和分布 式应 用系统 问的数据 同步 问题是 一个较为常 见且 较难解决 的问
O al 数 据 表 建 立 的 物 化 视 图 日志 主 要 有 两 种 刷 新 类 rce为 型 : 标 识 ( wi)或 主 键 ( r r Ke )3 在 同 一 数 据 库 行 Ro d Pi y y [ ma J 中数 据 表 中 某 条 记 录 的 行标 识 唯 一 且 由 系统 自动 指 定 , 在 不 但 同数 据 库 中 同 一 行 标 识 对 应 的数 据 记 录 可 能 毫 无 关 系 , 此 不 因 适 合 用 于 不 同 节 点 间 表 的 数 据 同 步 。 下 面 对 主 键 刷 新 方 式 的
题 。现有 的各种解决方案存在反映源数据频繁变化比较困难 和数据同步效率低 等问题 。本文通过对 Orc al e数据库的物化视图 日志
机 制的研 究 , 要介 绍 Orc 数据库 物化视 图 日志的数据结构、 数据库记录操作的记录方 式, 出了一种基于 Or l 简 al e 对 提 a e数据库物化 c

物化视图

物化视图

ORACLE中的物化(实体)视图物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

物化视图可以查询表,视图和其它的物化视图。

通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。

在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

1.主键物化视图:下面的语法在远程数据库表emp上创建主键物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_pkREFRESH FAST START WITH SYSDATE1/48+NEXT SYSDATEWITH PRIMARY KEYAS SELECT * FROM emp@remote_db;created.viewMaterialized注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:SQL> CREATE MATERIALIZED VIEW LOG ON emp;Materialized view log created.2.Rowid物化视图下面的语法在远程数据库表emp上创建Rowid物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_rowidWITHROWIDREFRESHAS SELECT * FROM emp@remote_db;Materialized view log created.3.子查询物化视图下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图SQL> CREATE MATERIALIZED VIEW mv_empdeptAS SELECT * FROM emp@remote_db eEXISTSWHERE(SELECT * FROM dept@remote_db dWHERE e.dept_no = d.dept_no)Materialized view log created.REFRESH 子句[refresh[fast|complete|force][on demand | commit][start with date] [next date][with {primary key|rowid}]]Refresh选项说明:a. oracle用刷新方法在物化视图中刷新数据.b. 是基于主键还是基于rowid的物化视图c. 物化视图的刷新时间和间隔刷新时间Refresh方法-FAST子句增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志SQL> CREATE MATERIALIZED VIEW LOG ON emp; Materialized view log created.对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

Oracle 物化视图使用教程

Oracle 物化视图使用教程

Oracle 物化视图使用教程一. 理论部分Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。

物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

物化视图可以查询表,视图和其它的物化视图。

通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

REFRESH 子句[refresh [fast|complete|force][on demand | commit][start with date] [next date][with {primary key|rowid}]]默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。

物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。

三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。

创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。

物化视图的创建和快速刷新

物化视图的创建和快速刷新

物化视图的创建和快速刷新1.物化视图简介物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果。

物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

其中物化视图有三种:聚集物化视图、包含连接物化视图、嵌套物化视图。

但三种物化视图的快速刷新的限制条件有很大区别,而其他方面则区别不大。

2.物化视图的创建和参数说明2.1 物化视图实例南昌营运数据为5000万条左右,每日新增20w条左右。

根据报表的实际需求,在物化视图中按照车牌,车队,天汇总统计后的数据为80万条。

这样大大提高了查询的效率。

创建物化视图的语句如下:create materialized view BUSINESS_DATA_CAR_MVBUILD DEFERRED –在创建时不刷新,按照用户设定的时间刷新refresh force –如果可以快速刷新则进行快速刷新,否则进行完全刷新on demand –按照指定的方式刷新start with to_date('14-07-2011 13:41:16', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间next TRUNC(SYSDA TE+1)+ 2/24 --刷新时间间隔asselectto_char(date_up,'yyyy-MM-dd') as day,taxi_group,taxi_company,dispatch_car_no,service_no,sum(decode(sign(OYSTER_CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM),1,1,-1,0)) as cardTime,count(*) as times,sum(decode(sign(OYSTER_CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM),1,OYSTER_ CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM,-1,0)) as cardSum,sum(sum) as sum,sum(distance+free_distance)as total_distance,sum(decode(sign(distance),1,distance,-1,0,distance)) as distance,sum(free_distance) as free_distance,sum(decode(sign(date_down-date_up),1,(date_down-date_up)*24,-1,0)) as workTime,sum(waiting_hour*60+waiting_second)as waiting_time,sum(decode(to_char(date_up,'HH24'),'02',1,'03',1,'04',1,0))as overTimeTimes,from SINGLE_BUSINESS_DA TA_BS buswhere date_up <= date_down and(date_down -date_up ) <0.5 and distance>=0 and distance<100 and free_distance<500group by service_no,dispatch_car_no,to_char(date_up,'yyyy-MM-dd'),taxi_group,taxi_company;, 2.2参数介绍2.2.1 BUILDBUILD IMMEDIATE :是在创建物化视图的时候就生成数据,。

物化视图普通视图区别

物化视图普通视图区别

物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。

普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。

这样对整体查询性能的提高,并没有实质上的好处。

1、物化视图的类型:ON DEMAND、ON COMMIT二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

2、ON DEMAND物化视图物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。

但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。

也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。

物化视图的特点:(1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;(2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;(3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;创建语句:create materialized view mv_name as select * from table_name默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。

物化视图的数据怎么随着基表而更新?Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。

也就是说,通过我们手工的执行某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据一致性。

这是最基本的刷新办法了。

自动刷新,其实也就是Oracle会建立一个job,通过这个job来调用相同的存储过程或包,加以实现。

Oracle物化视图详解

Oracle物化视图详解

物化视图详解物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

物化视图可以查询表,视图和其它的物化视图。

一、关于物化视图日志:查询物化视图日志文件格式:desc mlog$_lzwmvtest;创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错Demo:对一个表test创建日志:create materialized view log on test;那么会报:表'LZWMVTEST'不包含主键约束条件这种情况下,就必须指定日志文件结构比如:create materialized view log on test with rowid(具体的针对日志内容方面的在另外一个专题里说明,这里就简述到此)二、关于生成数据和刷新:1>生成数据两大选项:build immediate build deferredBuild immediate:在创建物化视图的同时根据主表生成数据Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以采取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’),注意必须使用全量刷新,默认是增量刷新,所以这里参数必须是C,因为之前都没有生成数据,所以必须全量。

2>关于刷新²刷新方式:complete fast forceComplete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新ØFast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”)ØForce:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致fast刷新不可用,有待总结…..)²刷新时间:on demand on commit start with/ nextOn demand:在需要刷新时进行刷新(人工判断)On commit:在基表上有提交操作时,进行更新Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)Next:刷新的周期时间三、基于主键的物化视图和ROWID的物化视图的说明创建物化视图日志时,指定了记录更新的原则即with 后面的primary 或者rowid 或者object id等等,后面,默认是以primary key为记录更新,在物化视图内也是以此为更新的原则。

学习王二暖oracle笔记(25-31)

学习王二暖oracle笔记(25-31)

学习oracle笔记一、临时表空间 (3)1.目标 (3)2.临时表空间的作用 (3)3.临时表空间组 (3)4.临时表空间的操作 (3)二、UNDO表空间(undo撤销,redo重做) (5)1.目标 (5)2.UNDO管理方式的改变 (5)3.Undo表空间概念 (5)4.Undo相关的重要的参数 (6)5.Undo表空间的操作 (7)6.Oracle11G undo表空间的新特性 (8)三、逻辑备份与恢复 (8)1.目标 (8)2.备份与恢复简介 (8)3.故障类型 (9)4.传统的导出与导入实用程序 (9)5.导出 (11)6.导入 (12)7.导出导入三种方式 (14)8.可传输表空间 (14)9.oracle11G的数据泵 (15)10.Expdp重要的参数 (15)11.inmdp的重要参数 (19)四、数据装载 (20)1.目标 (20)2.数据的装载 (20)3.SQL*LOADER (21)4.外部表 (23)五、闪回flashback (25)1.目标 (25)2.9I的闪回查询 (25)3.10G中的闪回版本查询 (26)4.10G的闪回事务查询 (27)5.10G的闪回表 (27)6.闪回删除 (28)7.10G的闪回数据库 (29)六、物化视图 (30)1.目标 (30)2.问题的提出 (30)3.物化视图的简介 (31)4.物化视图的作用 (32)5.创建物化视图时需要的权限 (33)6.创建物化视图时的选项 (33)7.基于主键的物化视图 (34)8.基于rowid的物化视图 (36)七、使用物化视图和exp实现生产库的逻辑备份的例子 (37)1.问题的提出 (37)2.问题的解决 (37)一、临时表空间1.目标2.临时表空间的作用临时表空间在硬盘上3.临时表空间组4.临时表空间的操作查看表空间:Select * from v$tablespace;Select * from dba_tablespaces;查看数据文件:Select * from dba_data_files;查看临时数据文件:Select * from dba_temp_files;Select * from v$tempfile;查看默认的临时表空间:Select * from database_propertieswhere property_name=’DEFAULT_TEMP_TABLESPACE’;创建临时表空间,不属于组:Create temporary tablespace temp2 tempfile’F:\data\orcl\tem2a.dbf’ size 10M autoextend on;创建临时表空间,属于组:Create temporary tablespace temp3tempfile’F:\data\orcl\tem3a.dbf’size 10M autoextend ontablespace group temp_grp;查看临时表空间组:Select * from dba_tablespace_groups;把temp2加入到temp_grp组内:Alter tablespace temp2 tablespace group temp_grp;把temp2移出temp_grp组:Alter tablespace temp2 tablespace group ’’;给temp2表空间添加一个临时文件:Alter tablespacetemp2 addtempfile’F:\data\orcl\tem2b.dbf’size 10m autoextend on;修改系统默认的临时表空间为另一个临时表空间:Alter database default temporary tablespace temp2;修改系统默认的临时表空间为一个临时表空间组:Alter database default temporary tablespacetemp_grp;二、UNDO表空间(undo撤销,redo重做)1.目标2.UNDO管理方式的改变3.Undo表空间概念4.Undo相关的重要的参数查看undo相关信息:Show parameter undo;5.Undo表空间的操作增加一个undo表空间:Create undo tablespace undotbs2 datafile’F:\DATA\ORCL\undotbs201.dbf’ size 10m autoextend on;给undotbs2表空间增加一个undo数据文件:Alter tablespace undotbs2 add datafile’F:\DATA\ORCL\undotbs202.dbf’ size 10m;查看系统默认undo表空间:Show parameter undo;切换undo表空间:Alter system set undo_tablespace=undotbs2;启用rententiongarentee:Alter tablespace undotbs1 retention guarantee;查看表空间是否启用了rententiongarentee:Select * from dba_tablespaces;取消启用rententiongarentee:Alter tablespace undotbs1 retention no guarantee;查看undo表空间使用情况:Select * from v$undostat;Select to_char(begin_time,’yyyymmdd hh24:mi:ss’),to_char(end_time,’yyyymmdd hh24:mi:ss’),undoblks,txncount from v$undostat;6.Oracle11G undo表空间的新特性三、逻辑备份与恢复1.目标2.备份与恢复简介3.故障类型语句故障:不需要人工处理。

ORACLE物化视图

ORACLE物化视图

ORACLE物化视图
MView重要视图在源数据库端的相关视图
DBA_BASE_TABLE_MVIEWSDBA_REGISTERED_MVIE WSDBA_MVIEW_LOGS在MView数据库端的相关视图DBA_MVIEWSDBA_MVIEW_REFRESH_TIMESDBA_REF RESH和DBA_REFRESH_CHILDRENMView相关包一些MView维护的相关问题SNAPSHOT vs. Materialized View清理无效的MView Log查询MView Log的大小检查MV的刷新兼容性查询MView刷新延时参考文档MView重要视图Oracle文档中MView相关视图的链接Materialized View and Refresh Group Views。

在源数据库端的相关视图
DBA_BASE_TABLE_MVIEWS
此视图与系统视图SYS.SLOG$相对应。

视图DBA_BASE_TABLE_MVIEWS记录了使用MView Log 访问基表的相关刷新的信息。

换句话说就是记录了使用了MView Log并且做过快速刷新的MView的信息,必须同时满足有MView Log以及做过快速刷新这两个条件,缺一不可。

列名描述OWNER
基表的OWNER
MASTER
基表的名称
MVIEW_LAST_REFRESH_TIME
基于这个基表的MView最后的快速刷新的时间
MVIEW_ID
基于这个基表的MView在数据库中的ID,这个可以和DBA_REGISTERED_MVIEWS关联找出相应的MView的名称。

物化视图

物化视图

首先,创建测试环境:SQL> create table dim_a (id number primary key, name varchar2(30));表已创建。

SQL> create table dim_b (id number primary key, name varchar2(30));表已创建。

SQL> create table fact (id number, aid number, bid number, num number);表已创建。

SQL> alter table fact add constraint fk_fact_aid foreign key (aid) references dim_a(id);表已更改。

SQL> alter table fact add constraint fk_fact_bid foreign key (bid) references dim_b(id);表已更改。

SQL> insert into dim_a select rownum, 'a'||rownum from user_objects;已创建48行。

SQL> insert into dim_b select rownum, 'b'||rownum from user_objects;已创建48行。

SQL> insert into fact select rownum, mod(rownum, 6) + 1, mod(rownum, 5 ) + 1, rownum *22 from user_objects;已创建48行。

SQL> commit;提交完成。

建立可以成功快速刷新的例子,这个物化视图只包含聚集:SQL> create materialized view log on fact with rowid, sequence (aid, num) 2 including new values;实体化视图日志已创建。

oceanbase分布式事务原理

oceanbase分布式事务原理

oceanbase分布式事务原理OceanBase是阿里巴巴集团自主研发的一款高可用分布式关系型数据库系统。

在高并发情况下,传统的单机数据库往往面临性能瓶颈,通过使用OceanBase可以水平扩展数据库,提高系统的可用性和性能。

分布式事务是OceanBase的核心功能之一,下面将详细介绍OceanBase分布式事务的原理。

一、分布式事务概述分布式事务是指涉及多个独立的数据库、服务或者应用程序的事务被同时提交或者回滚。

在分布式系统中,由于存在网络延迟、节点故障等问题,保证多节点之间的一致性成为了一项重大挑战。

OceanBase通过实现分布式事务来解决这一问题。

二、分布式事务的实现原理1.两阶段提交协议在准备阶段,事务协调者(即主节点)向所有参与者(即从节点)发送准备请求,并等待参与者确认准备就绪。

如果所有参与者都回复可准备,事务协调者则进入提交阶段;否则,事务协调者发送中止请求,使所有参与者回滚。

在提交阶段,事务协调者向所有参与者发送提交请求,并等待参与者提交完成的回复。

如果所有参与者都回复已提交,事务协调者将提交事务;否则,事务协调者发送中止请求,使所有参与者回滚。

2.分布式锁为了保证在分布式环境中的数据一致性,OceanBase引入了分布式锁机制来协调并发事务的执行。

分布式锁通过在事务操作之前,获取对应的资源锁,来保证只有一个事务能够修改资源的数据。

3.分布式日志在分布式事务中,日志起到了至关重要的作用。

OceanBase通过使用分布式日志系统,将所有节点上的事务操作进行异步复制和持久化,从而保证数据的一致性和可恢复性。

在分布式事务中,每个参与者通过向事务协调者发送消息来完成自己的操作。

事务协调者将这些操作写入分布式日志,并在事务提交时,将操作应用到各参与者的本地存储中。

这样即使一些节点发生故障,可以通过重新应用日志快速恢复数据。

三、分布式事务的优化策略为了提高分布式事务的性能和效率,OceanBase采用了如下优化策略:1. 并发控制:OceanBase通过合理地使用锁机制,来减少锁冲突的概率,提高并发性能。

【IT专家】创建Oracle物化视图,每5分钟刷新一次使用物化视图日志

【IT专家】创建Oracle物化视图,每5分钟刷新一次使用物化视图日志

【IT专家】创建Oracle物化视图,每5分钟刷新一次使用物化视图日志本文由我司收集整编,推荐下载,如有疑问,请与我司联系创建Oracle物化视图,每5分钟刷新一次使用物化视图日志创建Oracle物化视图,每5分钟刷新一次使用物化视图日志[英]Create Oracle Materialized View to be refreshed every 5 minute Using materialized view log I’m Trying to create Materialized View which will be updated every 5 minute automatically, I need update based on Mview log table.我正在尝试创建物化视图,它将每5分钟自动更新一次,我需要基于Mview日志表进行更新。

I have created Materialized view log on TABLE1 TABLE1.SQL Script我在TABLE1 TABLE1.SQL脚本上创建了Materialized视图日志CREATE MATERIALIZED VIEW LOG ON TABLE1; -- MLOG$_TABLE1 Then I’ve created Materialized View 然后我创建了物化视图CREATE MATERIALIZED VIEW JIBO_MVIEW REFRESH START WITH SYSDATE NEXT SYSDATE +5/24/60 ENABLE QUERY REWRITE AS SELECT O.ID ,O.DATETIME_CREATED ,O.ORIGINATOR ,O.DETAILS ,O.PAY MENT_REF FROM TABLE1 O WHERE O.ORIGINATOR LIKE ‘53%’; after changing some value In TABLE1, new Record is inserted MLOG$_TABLE1 log table更改一些值后在TABLE1中,新的Record插入了MLOG $ _TABLE1日志表but changed value is not updated in Materialized view (JIBO_MVIEW). (even after one day :) )但在物化视图(JIBO_MVIEW)中未更新更改的值。

Oracle物化视图的用法与总结

Oracle物化视图的用法与总结

Oracle物化视图的⽤法与总结物化视图(material view)是什么?物化视图是包括⼀个查询结果的数据库对象,它是远程数据的的本地副本,或者⽤来⽣成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照(类似于MSSQL Server中的snapshot,静态快照)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须⽤⾼级复制的功能。

当你想从⼀个表或视图中抽取数据时,你可以⽤从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单⼀表聚合视图和连接视图。

(这个是基于本地的基表或者视图的聚合)。

物化视图,说⽩了,就是物理表,只不过这张表通过oracle的内部机制可以定期更新,将⼀些⼤的耗时的表连接⽤物化视图实现,会提⾼查询的效率。

当然要打开查询重写选项;Material View的主要作⽤1. 实现两个数据库之间的数据同步,可以存在时间差。

2. 如果是远程链接数据库的场景时,提⾼查询速度。

(由于查询逻辑复杂,数据量⽐较⼤,导致每次查询视图的时候,查询速度慢,效率低下)物化视图的刷新⽅式和⽅法1. 刷新的⽅式FastCompleteFource2. 刷新的⽅法DBMS_REFRESH.RefreshDBMS_MVIEW.RefreshEXEC DBMS_MVIEW.refresh('BXJ_OBJECTS_MV_T1','C');EXEC DBMS_REFRESH.refresh('REP_MVIEWGROUP');物化视图的刷新⽅式和⽅法(1).在源数据库建⽴mview log⽇志⽂件create materialized view log on w_1 ;----注:(TEST为表名或者视图名,关于视图上建⽴物化视图,见基于视图的物化视图----创建物化视图语句:(2).在统计数据建⽴materializad view 语法Create materialized view MV_TEST----MVTEST为物化视图名Build immediate----创建时⽣成数据对应的是build deferredRefresh fast----增量刷新On commit----在基表有更新时提交,这⾥该句对视图⽆效With rowid----这⾥创建基于rowid的物化视图,对应的是 primary keyAsSelect * from TEST;----⽣成物化视图数据语句或者 CREATE MATERIALIZED VIEW MV_TableNameBUILD IMMEDIATE --创建时⽴即刷新REFRESH FORCE --如果可以快速刷新则进⾏快速刷新,否则完全刷新ON DEMAND --刷新⽅式START WITH SYSDATE --第⼀次刷新时间NEXT SYSDATE+1/12 --刷新时间间隔AS SELECT 1 id ‘A’ name FROM dual;(3).调⽤时进⾏刷新dbms_refresh.refresh('W_1')创建物化视图CREATE MATERIALIZED VIEW bxj_objects_mv_t1 REFRESH FAST AS SELECT * FROM apps.bxj_objects_t1;CREATE MATERIALIZED VIEW bxj_objects_mv_t2 REFRESH FORCE AS SELECT * FROM bxj_objects_t2;CREATE MATERIALIZED VIEW bxj_objects_mv_t3 REFRESH COMPLETE AS SELECT * FROM bxj_objects_t3;ON DEMAND和ON COMMIT物化视图的区别ON DEMAND和ON COMMIT物化视图的区别在于其刷新⽅法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进⾏刷新(REFRESH),即更新物化视图,以保证和基表数据的⼀致性;⽽ON COMMIT是说,⼀旦基表有了COMMIT,即事务提交,则⽴刻刷新,⽴刻更新物化视图,使得数据和基表⼀致。

Oracle物化视图,物化视图日志,增量刷新同步远程数据库

Oracle物化视图,物化视图日志,增量刷新同步远程数据库

Oracle物化视图,物化视图⽇志,增量刷新同步远程数据库1.创建DBLINK-- Drop existing database linkdrop public database link LQPVPUB;-- Create database linkCREATE DATABASE LINK LQPVPUB 6CONNECT TO "INTEPDM" identified by "password" 8using "LQPVPUB"2.创建物化视图⽇志(远程主机操作)CREATE MATERIALIZED VIEW LOG ON dm_basicmodelWITH PRIMARY KEYINCLUDING NEW VALUES;3.创建物化视图CREATE MATERIALIZED VIEW mv_model --创建物化视图BUILD IMMEDIATE --在视图编写好后创建REFRESH FAST WITH PRIMARY KEY--根据主表主键增量刷新(FAST,增量)ON DEMAND -- 在⽤户需要时,由⽤户刷新ENABLE QUERY REWRITE --可读写ASSELECT bm_id,bm_partid,bm_code from dm_basicmodel@LQPVPUB t --查询语句4.删除物化视图和⽇志⽇志和物化视图要分开删除DROP MATERIALIZED VIEW LOG ON GG_ZLX_ZHU@TOCPEES;DROP MATERIALIZED VIEW GG_ZLX_ZHU;5.物化视图更新CREATE OR REPLACE PROCDURE P_MVIEW_REFRESH ASBEGINDBMS_MVIEW.REFRESH('GG_ZLX_ZHU,GG_ZLX_FU','ff');END P_MVIEW_REFRESH;注意:5.1、如果需要同时刷新多个物化视图,必须⽤逗号把各个物化视图名称连接起来,并对每个视图都要指明刷新⽅式(f、增量刷新,c、完全刷新,?、强制刷新)。

【IT专家】创建Oracle物化视图,每5分钟刷新一次使用物化视图日志

【IT专家】创建Oracle物化视图,每5分钟刷新一次使用物化视图日志

本文由我司收集整编,推荐下载,如有疑问,请与我司联系创建Oracle物化视图,每5分钟刷新一次使用物化视图日志创建Oracle物化视图,每5分钟刷新一次使用物化视图日志[英]Create Oracle Materialized View to be refreshed every 5 minute Using materialized view log I’m Trying to create Materialized View which will be updated every 5 minute automatically, I need update based on Mview log table. 我正在尝试创建物化视图,它将每5分钟自动更新一次,我需要基于Mview日志表进行更新。

I have created Materialized view log on TABLE1 TABLE1.SQL Script 我在TABLE1 TABLE1.SQL脚本上创建了Materialized视图日志 CREATE MATERIALIZED VIEW LOG ON TABLE1; -- MLOG$_TABLE1 Then I’ve created Materialized View 然后我创建了物化视图 CREATE MATERIALIZED VIEW JIBO_MVIEW REFRESH START WITH SYSDATE NEXT SYSDATE +5/24/60 ENABLE QUERY REWRITE AS SELECT O.ID ,O.DATETIME_CREATED ,O.ORIGINATOR ,O.DETAILS ,O.PAYMENT_REF FROM TABLE1 O WHERE O.ORIGINATOR LIKE ‘53%’; after changing some value In TABLE1, new Record is inserted MLOG$_TABLE1 log table 更改一些值后在TABLE1中,新的Record插入了MLOG $ _TABLE1日志表 but changed value is not updated in Materialized view (JIBO_MVIEW). (even after one day :) ) 但在物化视图(JIBO_MVIEW)中未更新更改的值。

meterial view 详解

meterial view 详解

ORACLE 物化视图详解以下内容源于网络,经整理后如下:相关视图:SELECT * FROM dba_base_table_mviewsSELECT * FROM dba_mviewsSELECT * FROM dba_mview_commentsSELECT * FROM dba_registered_mviewsSELECT * FROM dba_mview_logsSELECT * FROM dba_mview_refresh_timesSELECT * FROM dba_mview_analysisSELECT * FROM dba_mview_aggregatesSELECT * FROM dba_mview_keysOracle提供物化视图的主要目的是提高查询性能,可以避免执行复杂SQL所需要的耗时操作(当然,这部分工作还是必须的,它是在物化视图刷新时进行的而非查询时。

),物化视图需要占用存储空间(相当于真是存在的数据表,不像VIEW只是个声明或定义),当基表发生变化时,物化视图会根据用户设定的条件进行刷新。

物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。

三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。

创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。

BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILDDEFERRED则在创建时不生成数据,以后根据需要在生成数据。

默认为BUILD IMMEDIATE。

查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。

分别指出创建的物化视图是否支持查询重写。

查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。

Oracle性能调优之物化视图用法简介

Oracle性能调优之物化视图用法简介

Oracle性能调优之物化视图⽤法简介⽬录⼀、物化视图简介物化视图分类物化视图分类,物化视图语法和as后⾯的sql分为:(1) 基于主键的物化视图(主键物化视图)(2)基于Rowid的物化视图(Rowid物化视图)本博客介绍⼀下Oracle的物化视图,物化视图(Materialized view)是相对与普通视图⽽已的,普通视图是伪表,功能没那么多,⽽物化视图创建是需要占⽤⼀定的存储空间的,物化视图常被应⽤与调优⼀些列表SQL查询,物化视图的基本语法:create materialized view [视图名称]build immediate | deferredrefresh fase | complete | forceon demand | commitstart with [start time]next [next time]with primary key | rowid //可以省略,⼀般默认是主键物化视图as [要执⾏的SQL]ok,解释⼀下这些语法⽤意:build immediate | deferred (视图创建的⽅式):(1) immediate:表⽰创建物化视图的时候是⽣成数据的;(2) deferre:就相反了,只创建物化视图,不⽣成数据refresh fase | complete | force (视图刷新的⽅式):(1) fase:增量刷新,也就是距离上次刷新时间到当前时间所有改变的数据都刷新到物化视图,注意,fase模式必须创建视图⽇志(2) complete:全量更新的,complete⽅式相当于创建视图重新全部查⼀遍(3) force:视图刷新⽅式的默认⽅式,当增量刷新可⽤则增量刷新,当增量刷新不可⽤,则全量刷新,⼀般不要⽤默认⽅式on demand | commit start with ... next ...(视图刷新时间):(1) demand:根据⽤户需要刷新时间,也就是说⽤户要⼿动刷新(2) commit:事务⼀提交,就⾃动刷新视图(3) start with:指定⾸次刷新的时间,⼀般⽤当前时间(4) next:物化视图刷新数据的周期,格式⼀般为“startTime+时间间隔”⼆、实践:创建物化视图上⾯是物化视图主要语法的简介,下⾯可以实践⼀下,创建⼀个主键物化视图ps:创建⼀个名称为MV_T的物化视图,视图创建完成是⽣成数据的,增量刷新,根据⽤户需要刷新,每隔两天刷新⼀次视图create materialized view MV_Tbuild immediaterefresh faston demandstart with sysdatenext sysdate + 2as select * from sys_user;可能遇到问题:(1)、ORA-12014: 表不包含主键约束条件SQL> create materialized view mv_t2 build immediate3 refresh fast4 on demand5 start with sysdate6 next sysdate + 27 as select * from sys_user;as select * from sys_user;第 7 ⾏出现错误:ORA-12014: 表 'SYS_USER' 不包含主键约束条件这是因为as SQL语句的表没创建主键,⽽是使⽤的是基于表的物化视图,解决⽅法是新建主键(2)、ORA-23413: 表不带实体化视图⽇志SQL> create materialized view mv_t2 build immediate3 refresh fast4 on demand5 start with sysdate6 next sysdate + 27 as select * from sys_user;as select * from sys_user;第 7 ⾏出现错误:ORA-23413: 表 "T_BASE"."SYS_USER" 不带实体化视图⽇志这是因为refresh⽅式⽤fast⽅式,fast增量⽅式必须创建视图⽇志create materialized view log on [表名];删除视图⽇志:drop materialized view log on [表名]假如是基于Rowid的物化视图,就可以⽤这种⽅法:create materialized view log on [表名] with rowid;附录:物化视图常⽤SQL删除物化视图:drop materialized view [视图名称];查看物化视图:select mv.* from user_mviews mv where mv.MVIEW_NAME = [视图名称];查看物化视图列:select sg.segment_name, sg.bytes, sg.blocks from user_segments sg where sg.segment_name = [视图名称];⼿动刷新物化视图:exec dbms_mview.refresh([视图名称]);。

create materialized view log on参数

create materialized view log on参数

create materialized view log on参数在Oracle 数据库中,`CREATE MATERIALIZED VIEW LOG` 语句用于为一个表创建一个物化视图日志,以便支持物化视图的快速刷新。

`CREATE MATERIALIZED VIEW LOG` 语句的语法如下:```sqlCREATE MATERIALIZED VIEW LOGON [schema.]master_table[WITH [PRIMARY KEY] | [ROWID] | [OBJECT ID][INCLUDING NEW VALUES] | [EXCLUDING NEW VALUES] ][INCLUDING OLD VALUES | EXCLUDING OLD VALUES][FOR UPDATE [WAIT n] | [NOWAIT] ][USING INDEX [schema.]index][COMMIT SCN scn | TIMESTAMP expr];```以下是`CREATE MATERIALIZED VIEW LOG` 语句中常用的参数:- ON [schema.]master_table:指定要为其创建物化视图日志的主表。

- WITH [PRIMARY KEY] | [ROWID] | [OBJECT ID]:指定用于识别表中行的唯一键。

可以选择使用主键(PRIMARY KEY)、行标识符(ROWID)或对象标识符(OBJECT ID)。

-INCLUDING NEW VALUES | EXCLUDING NEW VALUES:指定是否记录新值。

如果选择`INCLUDING NEW VALUES`,则物化视图日志将包括主表上的新值;如果选择`EXCLUDING NEW VALUES`,则只包括旧值。

-INCLUDING OLD VALUES | EXCLUDING OLD VALUES:指定是否记录旧值。

create materialized view log sequence

create materialized view log sequence

create materialized view log sequence
在Oracle数据库中,要为某个物化视图创建日志序列,你可以使用以下语句:
sql复制代码
CREATE MATERIALIZED VIEW LOG ON
your_table_name
WITH PRIMARY KEY,
INCLUDING NEW VALUES;
其中,your_table_name是你要为其创建日志序列的表名。

这个语句将创建一个物化视图日志,并使用主键约束来唯一标识记录。

INCLUDING NEW VALUES子句用于包含新插入和更新操作所涉及的行。

创建了物化视图日志后,你可以使用它来跟踪对表的更改,并在需要时重新生成物化视图。

是的,物化视图日志可以与数据库归档一起使用。

数据库归档是指将重做日志文件(redo log files)存档起来,以便在数据恢复或备份时使用。

当数据库运行在归档模式下时,重做日志文件会被连续地记录并保存在归档日志文件中。

物化视图日志记录了对基表的更改,这些更改可以用于重新生成物化视图。

如果数据库处于归档模式下,并且启用了物化视图日志,
那么在发生故障时,你可以使用归档日志和物化视图日志来恢复数据和物化视图的状态。

需要注意的是,物化视图日志和归档日志是为了不同的目的而使用的。

归档日志是为了保证数据的持久性和可恢复性,而物化视图日志是为了跟踪对基表的更改并重新生成物化视图。

虽然它们可以一起使用,但它们的功能和用途是不同的。

物化视图日志简介

物化视图日志简介

oracle物化视图日志结构物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途。

物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle会自动在物化视图日志名称后面加上数字作为序号。

物化视图日志在建立时有多种选项:可以指定为ROWID、PRIMARY KEY和OBJECT ID 几种类型,同时还可以指定SEQUENCE或明确指定列名。

上面这些情况产生的物化视图日志的结构都不相同。

任何物化视图都会包括的4列:SNAPTIME$$:用于表示刷新时间。

DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE。

OLD_NEW$$:用于表示这个值是新值还是旧值。

N(EW)表示新值,O(LD)表示旧值,U 表示UPDATE操作。

CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。

如果WITH后面跟了ROWID,则物化视图日志中会包含:M_ROW$$:用来存储发生变化的记录的ROWID。

如果WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。

如果WITH后面跟了OBJECT ID,则物化视图日志中会包含:SYS_NC_OID$:用来记录每个变化对象的对象ID。

如果WITH后面跟了SEQUENCE,则物化视图日子中会包含:SEQUENCE$$:给每个操作一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。

如果WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些列。

下面通过例子进行详细说明:SQL> create table t_rowid (id number, name varchar2(30), num number);表已创建。

SQL> create materialized view log on t_rowid with rowid, sequence (name, num) including new values;实体化视图日志已创建。

数据分发技术

数据分发技术

动态SQL
Oracle中动态SQL可以通过本地动态SQL 来执行,也可以通过DBMS_SQL包来执 行
本地动态SQL 本地动态
本地动态SQL是使用EXECUTE IMMEDIATE语句来实现的. create or replace procedure proc_insert ( id in number, --输入序号 name in varchar2 --输入姓名 ) as str_sql varchar2(500); begin str_sql:='insert into dinya_test values(:1,:2)'; execute immediate str_sql using id,name; --动态执行插入操作 exception when others then null; end ; 执行存储过程,插入数据到测试表中. SQL> execute proc_insert(1,'dinya');
物化视图日志结构
物化视图日志的名称为MLOG$_后面跟基表的名称,如 果表名的长度超过20位,则只取前20位,当截短后出 现名称重复时,Oracle会自动在物化视图日志名称后 面加上数字作为序号. SNAPTIME$$:用于表示刷新时间. DMLTYPE$$:用于表示DML操作类型,I表示INSERT, D表示DELETE,U表示UPDATE. OLD_NEW$$:用于表示这个值是新值还是旧值.N (EW)表示新值,O(LD)表示旧值,U表示UPDATE 操作. CHANGE_VECTOR$$表示修改矢量,用来表示被修改 的是哪个或哪几个字段.
数据分发技术
物化视图
物化视图是包括一个查询结果的数据库 对像,它是远程数据的的本地副本,或 者用来生成基于数据表求和的汇总表. 物化视图存储基于远程表的数据,也可 以称为快照. 物化视图可以查询表,视图和其它的物 化视图.
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

oracle物化视图日志结构物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途。

物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle会自动在物化视图日志名称后面加上数字作为序号。

物化视图日志在建立时有多种选项:可以指定为ROWID、PRIMARY KEY和OBJECT ID 几种类型,同时还可以指定SEQUENCE或明确指定列名。

上面这些情况产生的物化视图日志的结构都不相同。

任何物化视图都会包括的4列:SNAPTIME$$:用于表示刷新时间。

DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE。

OLD_NEW$$:用于表示这个值是新值还是旧值。

N(EW)表示新值,O(LD)表示旧值,U 表示UPDATE操作。

CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。

如果WITH后面跟了ROWID,则物化视图日志中会包含:M_ROW$$:用来存储发生变化的记录的ROWID。

如果WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。

如果WITH后面跟了OBJECT ID,则物化视图日志中会包含:SYS_NC_OID$:用来记录每个变化对象的对象ID。

如果WITH后面跟了SEQUENCE,则物化视图日子中会包含:SEQUENCE$$:给每个操作一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。

如果WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些列。

下面通过例子进行详细说明:SQL> create table t_rowid (id number, name varchar2(30), num number);表已创建。

SQL> create materialized view log on t_rowid with rowid, sequence (name, num) including new values;实体化视图日志已创建。

SQL> create table t_pk (id number primary key, name varchar2(30), num number); 表已创建。

SQL> create materialized view log on t_pk with primary key;实体化视图日志已创建。

SQL> create type t_object as object (id number, name varchar2(30), num number);/类型已创建SQL> create table t_oid of t_object;表已创建。

SQL> desc t_oid;名称是否为空? 类型----------------------------------------- -------- ---------------ID NUMBERNAME VARCHAR2(30)NUM NUMBERSQL> create materialized view log on t_oid with object id;实体化视图日志已创建。

建立环境后来看看物化视图日志中包含的字段:SQL> desc mlog$_t_rowid;名称是否为空? 类型----------------------------------------- -------- -------------NAME VARCHAR2(30)NUM NUMBERM_ROW$$ VARCHAR2(255)SEQUENCE$$ NUMBERSNAPTIME$$ DATEDMLTYPE$$ VARCHAR2(1)OLD_NEW$$ VARCHAR2(1)CHANGE_VECTOR$$ RAW(255)除了最基本的4列之外,由于指定了ROWID、SEQUENCE和NAME、NUM列,因此物化视图日志中包含了相对应的列。

SQL> desc mlog$_t_pk;名称是否为空? 类型----------------------------------------- -------- ------------ID NUMBERSNAPTIME$$ DATEDMLTYPE$$ VARCHAR2(1)OLD_NEW$$ VARCHAR2(1)CHANGE_VECTOR$$ RAW(255)对象表的物化视图日志建立后包含系统对象标识列。

一、主键列、ROWID列、OBJECT ID列、SEQUENCE列和建立物化视图时指明的列。

主键、ROWID或OBJECT ID用来唯一表示物化视图日志中的记录。

SEQUENCE会根据操作发生的顺序对物化视图日志中的记录编号。

建立物化视图时指明的列会在物化视图日志中进行记录。

SQL> insert into t_pk values (1, 'a', 5);已创建 1 行。

SQL> update t_pk set name = 'c' where id = 1;已更新 1 行。

SQL> delete t_pk;已删除 1 行。

SQL> select id, dmltype$$ from mlog$_t_pk;ID D---------- -1 I1 U1 DSQL> insert into t_oid values (1, 'a', 5);已创建 1 行。

SQL> update t_oid set name = 'c' where id = 1;已更新 1 行。

SQL> delete t_oid;已删除 1 行。

SQL> select sys_nc_oid$, dmltype$$ from mlog$_t_oid;SYS_NC_OID$ D-------------------------------- -18DCFDE5D65B4D5A88602D6C09E5CE20 I18DCFDE5D65B4D5A88602D6C09E5CE20 U18DCFDE5D65B4D5A88602D6C09E5CE20 DSQL> rollback;回退已完成。

二、时间列当基本发生DML操作时,会记录到物化视图日志中,这时指定的时间4000年1月1日0时0分0秒。

如果物化视图日志供多个物化视图使用,则一个物化视图刷新后会将它刷新的记录的时间更新为它刷新的时间。

下面建立快速刷新的两个物化视图来演示时间列的变化。

(只有建立快速刷新的物化视图才能使用物化视图日志,如果只建立一个物化视图,则物化视图刷新完会将物化视图日志清除掉。

SQL> create materialized view mv_t_rowid refresh fast on commit as select name, count(*) from t_rowid group by name;实体化视图已创建。

SQL> create materialized view mv_t_rowid1 refresh fast as select name, count(*) from t_rowid group by name;实体化视图已创建。

SQL> insert into t_rowid values (1, 'a', 5);已创建 1 行。

SQL> update t_rowid set name = 'c' where id = 1;已更新 1 行。

SQL> delete t_rowid;已删除 1 行。

SQL> select snaptime$$ from mlog$_t_rowid;SNAPTIME$$-------------------4000-01-01 00:00:004000-01-01 00:00:004000-01-01 00:00:004000-01-01 00:00:00SQL> commit;提交完成。

SQL> select snaptime$$ from mlog$_t_rowid;SNAPTIME$$-------------------2012/5/23 15:41:412012/5/23 15:41:412012/5/23 15:41:412012/5/23 15:41:41COMMIT后,物化视图mv_t_rowid刷新,将SNAPTIME$$列更新成自己的刷新时间。

三、操作类型和新旧值操作类型比较简单:只包括I(INSERT)、D(DELETE)和U(UPDATE)三种。

新旧值也包括三种:O表示旧值(一般对应的操作时DELETE)、N表示新值(一般对应的操作是INSERT),还有一种U(对应UPDATE操作)。

SQL> insert into t_pk values (1, 'a', 5);已创建 1 行。

SQL> insert into t_pk values (2, 'b', 7);已创建 1 行。

SQL> insert into t_pk values (3, 'c', 9);已创建 1 行。

SQL> update t_pk set name = 'c' where id = 1;已更新 1 行。

SQL> update t_pk set id = 4 where id = 2;已更新 1 行。

SQL> delete t_pk where id = 3;已删除 1 行。

SQL> select id, dmltype$$, old_new$$ from mlog$_t_pk;ID D O---------- - -1 I N2 I N3 I N1 U U2 D O4 I N3 D O已选择7行。

开始是插入三条记录,接着是UPDATE操作。

需要注意,对于基于主键的物化视图日志,如果更新了主键,则UPDATE操作转化为一条DELETE操作,一条INSERT操作。

最后是DELETE 操作。

SQL> drop materialized view log on t_rowid;实体化视图日志已删除。

SQL> create materialized view log on t_rowid with rowid, sequence (name, num) including new values;实体化视图日志已创建。

相关文档
最新文档