test,测试物化视图分区

物化视图真是个好东西, 能同步源端数据。对于同构数据库来说,简直是ETL避免dblink的利器。

今天有一个场景,需要使用分区的物化视图。主要是查询会基于分区键,能提高性能。

  • 数据库版本 Oracle 11.2.0.4

1. 创建原表与物化视图日志

Create Table EMP_SOURCE As select * from EMP; 
ALTER TABLE EMP_SOURCE ADD CONSTRAINT pk_empsource_empno PRIMARY KEY (empno); 

CREATE MATERIALIZED VIEW LOG ON emp_source WITH PRIMARY KEY; 

2. 创建基于list分区的物化视图

维护的时候就像普通的分区表一样。


CREATE MATERIALIZED VIEW MV_EMP_SOURCE_PART
PARTITION BY LIST(DEPTNO)(
PARTITION P10 VALUES(10) TABLESPACE USERS,
PARTITION P20 VALUES(20) TABLESPACE USERS,
PARTITION P30 VALUES(30) TABLESPACE USERS, 
PARTITION PDEFAULT VALUES(DEFAULT) TABLESPACE USERS
)
BUILD IMMEDIATE REFRESH FAST 
ON DEMAND 
AS SELECT * FROM EMP_SOURCE; 

3. 创建基于range分区的物化视图

创建基于range 分区的物化视图,如果分区键是日期,应该写全,日月年。不能只写年。

  • 正确: TO_DATE('1990-01-01','YYYY-MM-DD')
  • 错误: TO_DATE('1990','YYYY')

CREATE MATERIALIZED VIEW MV_EMP_SOURCE_PART
PARTITION BY RANGE(HIREDATE)
(
PARTITION P1980 VALUES LESS THAN (TO_DATE('1981-01-01','YYYY-MM-DD')),
PARTITION P1981 VALUES LESS THAN (TO_DATE('1982-01-01','YYYY-MM-DD')),
PARTITION P1982 VALUES LESS THAN (TO_DATE('1983-01-01','YYYY-MM-DD')),
PARTITION P1983 VALUES LESS THAN (TO_DATE('1984-01-01','YYYY-MM-DD')),
PARTITION P1984 VALUES LESS THAN (TO_DATE('1985-01-01','YYYY-MM-DD')),
PARTITION P1985 VALUES LESS THAN (TO_DATE('1986-01-01','YYYY-MM-DD')),
PARTITION P1986 VALUES LESS THAN (TO_DATE('1987-01-01','YYYY-MM-DD')),
PARTITION P1987 VALUES LESS THAN (TO_DATE('1988-01-01','YYYY-MM-DD')),
partition pMAX values less than(maxvalue)
)
BUILD IMMEDIATE REFRESH FAST 
ON DEMAND 
AS SELECT * FROM EMP_SOURCE; 
posted on 2021-01-09 21:49  我是一只胖子  阅读(227)  评论(0编辑  收藏  举报