数据仓库项目中使用物化视图推送数据,现记录一下相关方面的知识。
物化视图需要有基表,基表可以在本地库,也可以在远程库。可以在本地通过数据库链接访问远程库的基表
基表:hr.departments@orcl
物化视图:scott.departments@orcl1
1.快速刷新的物化视图需要在基表上建立物化视图日志
在orcl库hr用户上的departments上创建物化视图日志
CREATE MATERIALIZED VIEW LOG ON DEPARTMENTS;
SELECT * FROM ALL_MVIEW_LOGS;
查询数据字典发现生成了一个基于主键的物化视图日志MLOG$_DEPARTMENTS
,结构如下
NAME | TYPE |
---|---|
DEPARTMENT_ID | NUMBER(4) |
SNAPTIME$$ | DATE |
DMLTYPE$$ | VARCHAR2(1) |
OLD_NEW$$ | VARCHAR2(1) |
CHANGE_VECTOR$$ | RAW(255) |
XID$$ | NUMBER |
DEPARTMENT_ID:基表的主键,默认创建的物化视图日志为子句 with primar key,日志表会包含基表的主键列;
SNAPTIME$$:填充刷新时间;
DMLTYPE$$:填充DML操作的类型,I表示插入、D表示删除、U表示更新;
OLD_NEW$$:表示值的新旧,N表示新值,对应插入操作;O表示旧值,对应删除操作;U表示更新值,对应更新操作;
CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段 ;
XID$$:基于current scn类型的物化视图日志会用到XID列,该列与current scn 的对应关系存储在视图ALL_SUMMAP中;
创建物化视图日志的标准语句为:
create_materialized_vw_log::=
CREATE MATERIALIZED VIEW LOG
ON [ schema. ] table
[ physical_attributes_clause
| TABLESPACE tablespace
| logging_clause
| { CACHE | NOCACHE }
[ physical_attributes_clause
| TABLESPACE tablespace
| logging_clause
| { CACHE | NOCACHE }
]...
]
[ parallel_clause ]
[ table_partitioning_clauses ]
[ WITH { OBJECT ID
| PRIMARY KEY
| ROWID
| SEQUENCE
| (column [, column ]...)
}
[, { OBJECT ID
| PRIMARY KEY
| ROWID
| SEQUENCE
| (column [, column ]...)
}
]...
[ new_values_clause ]
] ;
physical_attributes_clause::=
[ { PCTFREE integer
| PCTUSED integer
| INITRANS integer
| storage_clause
}
[ PCTFREE integer
| PCTUSED integer
| INITRANS integer
| storage_clause
]...
]
logging_clause::=
{ LOGGING | NOLOGGING }
parallel_clause::=
{ NOPARALLEL | PARALLEL [ integer ] }
new_values_clause::=
{ INCLUDING | EXCLUDING } NEW VALUES
关键字解读
OBJECT ID:则物化视图日志中会包含SYS_NC_OID$,用来记录每个变化行的对象标识符;
PRIMARY KEY:则物化视图日志中会包含主键列;
ROWID:则物化视图日志中会包含M_ROW$$,用来存储发生变化所有行的ROWID;
SEQUENCE:物化视图日志中会包含SEQUENCE$$,用来记录DML操作顺序的编号,保证刷新按顺序刷新,由于无法唯一定位记录,一般不单独使用&#