PLSQL_Material View物化视图的基本概念和用法(概念)
时间:2022-03-13 22:55
2014-06-08 BaoXinjian
1. 用法
物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。
物化视图存储基于远程表的数据,也可以称为快照。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。
如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。
对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。
实现两个数据库之间的数据同步,可以存在时间差。
1. 刷新的方式
DBMS_REFRESH
DBMS_
2. 具体应用
(1).在源数据库建立mview log日志文件
create materialized view log on w_1 ;
----注:(TEST为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图
----创建物化视图语句:
(2).在统计数据建立materializad view 语法
Create materialized view MV_TEST
----MVTEST为物化视图名
Build immediate
----创建时生成数据对应的是build deferred
Refresh fast
----增量刷新
On commit
----在基表有更新时提交,这里该句对视图无效
With rowid
----这里创建基于rowid的物化视图,对应的是 primary key
As
Select * from TEST;
----生成物化视图数据语句
(3).调用时进行刷新
dbms_refresh.refresh(‘W_1‘)
3. 语法
1. 基本语法
4. 案例
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
SQL> ALTER SESSION SET NLS_DATE_FORMAT = ‘YYYY-MM-DD HH24:MI:SS‘;
会话已更改。
SQL> CREATE TABLE T1 (ID PRIMARY KEY, NAME) AS SELECT ROWNUM, TNAME FROM TAB;
表已创建。
SQL> CREATE TABLE T2 (ID PRIMARY KEY, NAME) AS SELECT ROWNUM, TNAME FROM TAB;
表已创建。
SQL> CREATE TABLE T3 (ID PRIMARY KEY, NAME) AS SELECT ROWNUM, TNAME FROM TAB;
表已创建。
SQL> CREATE MATERIALIZED VIEW LOG ON T1;
实体化视图日志已创建。
SQL> CREATE MATERIALIZED VIEW LOG ON T2;
实体化视图日志已创建。
SQL> CREATE MATERIALIZED VIEW LOG ON T3;
实体化视图日志已创建。
SQL> CREATE MATERIALIZED VIEW MV_T1 REFRESH FAST AS SELECT * FROM T1;
实体化视图已创建。
SQL> CREATE MATERIALIZED VIEW MV_T2 REFRESH FAST AS SELECT * FROM T2;
实体化视图已创建。
SQL> CREATE MATERIALIZED VIEW MV_T3 REFRESH FAST AS SELECT * FROM T3;
实体化视图已创建。
SQL> EXEC DBMS_REFRESH.MAKE(‘REP_TEST‘, ‘MV_T1,MV_T2,MV_T3‘, SYSDATE, ‘SYSDATE + 1‘)
PL/SQL 过程已成功完成。
SQL> INSERT INTO T1 VALUES (100, ‘A‘);
已创建 1 行。
SQL> INSERT INTO T2 VALUES (100, ‘A‘);
已创建 1 行。
SQL> INSERT INTO T3 VALUES (100, ‘A‘);
已创建 1 行。
SQL> EXEC DBMS_REFRESH.REFRESH(‘REP_TEST‘)
PL/SQL 过程已成功完成。
如果对表T2进行了修改:
SQL> ALTER TABLE T2 MODIFY NAME VARCHAR2(32);
表已更改。
SQL> INSERT INTO T1 VALUES (101, ‘B‘);
已创建 1 行。
SQL> INSERT INTO T2 VALUES (101, LPAD(‘B‘, 32, ‘B‘));
已创建 1 行。
SQL> INSERT INTO T3 VALUES (101, ‘B‘);
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> SELECT MVIEW_NAME, LAST_REFRESH_DATE, STALENESS FROM USER_MVIEWS;
MVIEW_NAME LAST_REFRESH_DATE STALENESS
------------------------------ ------------------- -------------------
MV_T1 2008-01-23 19:22:43 NEEDS_COMPILE
MV_T2 2008-01-23 19:22:43 NEEDS_COMPILE
MV_T3 2008-01-23 19:22:43 NEEDS_COMPILE
SQL> EXEC DBMS_REFRESH.REFRESH(‘REP_TEST‘)
BEGIN DBMS_REFRESH.REFRESH(‘REP_TEST‘); END;
Thanks and Regards
PLSQL_Material View物化视图的基本概念和用法(概念),布布扣,bubuko.com