创建任何物化视图都会包含的列:
snaptime$$:用于表示刷新时间。
dmltype$$:用于表示dml操作类型,i表示insert,d表示delete,u表示update。
old_new$$:用于表示这个值是新值还是旧值。n(ew)表示新值,o(ld)表示旧值,u表示update操作。
change_vector$$表示修改矢量,用来表示被修改的是哪个或哪几个字段。 如果with后面跟了primary key,则物化视图日志中会包含主键列。 如果with后面跟了rowid,则物化视图日志中会包含:
m_row$$:用来存储发生变化的记录的rowid。 如果with后面跟了object id,则物化视图日志中会包含:
sys_nc_oid$:用来记录每个变化对象的对象id。 如果with后面跟了sequence,则物化视图日子中会包含:
sequence$$:给每个操作一个sequence号,从而保证刷新时按照顺序进行刷新。 如果with后面跟了一个或多个column名称,则物化视图日志中会包含这些列。 -先删除表再建立新的MV -
查询物化视图更新时间
SELECT mview_name, last_refresh_date, fullrefreshtim, increfreshtim FROM dba_mview_analysis;
exec dbms_mview.refresh('MV_T1_PK','c');
BEGIN DBMS_MVIEW.REFRESH ( list => 'A3_GUANLI_DATE', Method =>'COMPLETE', refresh_after_errors => True); end;
在SOURCE DB 上建立日志
create materialized view log on HR_PAY_TYPE tablespace USERS with primary key including new values;
create materialized view log on test_rowid with rowid, sequence (id, name) including new values ;
create materialized view log on test_objid with object id;
create materialized view log on test_sq tablespace ttts with sequence;
依据sequence创建物化视图日志
create materialized view log on test_sq with sequence (id, name,num) including new values;
包含基础表的所有列
create materialized view log on HR_CHANGE_SHIFT with rowid including new values;
create materialized view HR_PERSONNEL_OUT refresh fast start with sysdate next sysdate +12/24 with rowid as select * from hcp.HR_PERSONNEL_OUT@LINKHCP;
drop materialized view GL_SEGMENT_HIS_MV;
错误提示
--ORA-32401: "TT"."TEST_ROWID" 上的实体化视图日志没有新值
alter materialized view log on test_rowid add including new values;
--ORA-12033: 不能使用 "TT"."TEST_ROWID" 上实体化视图日志中的过滤器列
alter materialized view log on test_rowid add (name);
--ORA-12014: 表 'TEST_OBJID' 不包含主键约束条件
alter table test_objid add constraint pk_test_objid primary key (id);
--增加主键
--ORA-23415: "TT"."TEST_OBJID" 的实体化视图日志不记录主键
drop materialized view log on test_objid;
create materialized view log on test_objid tablespace ttts with primary key including new values;