基本步骤,以备查询
原始数据表
create table mv_test(i number);
declare
i integer;
begin
for i in 1 .. 10000 loop
insert into mv_test values(i);
end loop;
commit;
end;
1. 建表
create table mv_test_2(i number); --不要使用create table.. as .. 会丢失默认值
2. 建物化视图日志
如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
所以呢,在原来的表上需要一个主键
alter table mv_test
add constraint pk_mv_test_i primary key (i)using index tablespace users;
CREATE MATERIALIZED VIEW LOG ON mv_test;
3. 创建物化视图
CREATE MATERIALIZED VIEW mv_test_2
ON PREBUILT TABLE
REFRESH FAST ON DEMAND
AS
SELECT * FROM mv_test;
4. 全刷
EXEC DBMS_MVIEW.REFRESH('mv_test_2', 'COMPLETE');5. 增量快刷
EXEC DBMS_MVIEW.REFRESH('mv_test_2','FAST');
**. 当然一般的增量快刷是放在数据库job或者crontab中滴
CREATE OR REPLACE PROCEDURE SP_REFRESH_MV AS
BEGIN
DBMS_MVIEW.REFRESH('MV_TEST_2','FAST');
END;
/
建jobs,5分钟刷新一次
variable jobno number;
variable instno number;
begin
select instance_number into :instno from v$instance;
dbms_job.submit(:jobno, 'SP_REFRESH_MV;', sysdate, 'sysdate+5/1440', TRUE, :instno);
commit;
end;
/
接下来就是建索引等等的操作,就可以将新的表mv_test_2替换mv_test,并将相应的权限还原。
完成之后把job、存储过程删除
记得分析表!!!
以前滴关于物化视图的文章
http://hi.baidu.com/dbaeyes/blog/item/9137e70a9535fe1d95ca6be6.html
http://hi.baidu.com/dbaeyes/blog/item/47ded144f6f58580b2b7dcac.html
http://hi.baidu.com/dbaeyes/blog/item/4b533fc2a0925e37e5dd3b93.html
--- http://hi.baidu.com/rublis/blog/item/e6dd514c8007f7fdd72afc56.html
-- http://hi.baidu.com/luanjy/blog/item/30a6af0fba886deaab6457e0.html
在dbms_mview.refresh中启用并行刷新 http://zhaolinjnu.blog.sohu.com/80240169.html
--EOF--
This work is licensed under a CC A-S 4.0 International License.