物化视图在同步数据方案中处于中低级的方案,但对有有些针对报表统计的分析系统,物化视图通过提前生成实际的物理数据,可以为报表统计提供更加快捷的查询效率,能够配合高效的快速刷新模式,它还是一种非常好的解决方案。
创建
物化视图(把
test
用户下的
T1
同步到
test1
用户下的
MV_T1
)
1
:创建源表
SQL> create table t1(id number primary key);
Table created.
2
:创建物化日志(
test
用户下的
T1
源表)
CREATE MATERIALIZED VIEW LOG ON T1
WITH PRIMARY KEY
INCLUDING NEW VALUES;
3
:创建物化视图(
test1
用户下的
MV_T1
物化视图)
CREATE MATERIALIZED VIEW MV_T1
BUILD IMMEDIATE
REFRESH FAST WITH PRIMARY KEY ------
根据表主键增量
refresh
ON DEMAND
ENABLE QUERY REWRITE ------
物化视图允许可读写
SELECT * FROM TEST.T1; ------
查询的
sql
语句
4
:插入数据测试
SQL> insert into t1 values(1);
1 row created.
SQL> commit;
5
:增量刷新并测试同步
SQL> BEGIN
2 DBMS_MVIEW.REFRESH('MV_T1','f');
3 END;
PL/SQL procedure successfully completed.
SQL> SELECT * FROM MV_T1;
----------
Note
:如果需要同时刷新多个物化视图,必须用逗号把各个物化视图名称连接起来,并对
每个视图都要指明刷新方式:
f
:增量刷新,
c
:完全刷新,
?
:强制刷新
Eg:
多个物化视图同时刷新
DBMS_MVIEW.REFRESH('MV_T1,MV_T2,MV_T3','fcf');
6:
测试如果物化视图数据清空,能否使用增量的刷新的方式?(类似迁移历史数据)
6.1
:插入数据
SQL> insert into t1 values(2);
1 row created.
SQL> insert into t1 values(3);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t1;
----------
6.2
:增量刷新
SQL> BEGIN
2 DBMS_MVIEW.REFRESH('MV_T1','f');
3 END;
BEGIN
ERROR at line 1:
ORA-32320: REFRESH FAST of "SYS"."MV_T1" unsupported after container table
PMOPs
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2809
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 3025
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2994
ORA-06512: at line 2
6.3
:强制刷新
/
完全刷新
SQL> BEGIN
2 DBMS_MVIEW.REFRESH('MV_T1','?');
3 END;
PL/SQL procedure successfully completed.
SQL> SELECT * FROM MV_T1;
----------
SQL> truncate table MV_T1;
Table truncated.
SQL> BEGIN
2 DBMS_MVIEW.REFRESH('MV_T1','C');
3 END;
PL/SQL procedure successfully completed.
SQL> sELECT * FROM MV_T1;
----------
Note
:不支持这种清空历史数据,增量刷新的方式。
7
:删除物化视图
SQL> drop MATERIALIZED VIEW LOG ON T1;
Materialized view log dropped.
SQL> drop MATERIALIZED VIEW MV_T1;
Materialized view dropped.
一、
主键
物化视图
1、删除
物化视图
时,基于基表的
物化视图
日志会被清空
2、
创建
物化视图
时,提示未
创建
物化视图
日志,但
物化视图
创建
后,删除
物化视图
日志不会影响
物化视图
的查询,两者是独立的,只有在复制数据的时候才会相关。
在oracle数据库里边,
创建
物化视图
之后,
物化视图
带有定时器的功能,每一分钟执行一次,系统在DBMS_jobs文件夹下,会自动
创建
相应的job,右键执行job的时候报错如下:
问题:ORA-12012: 自动执行作业 198 出错
ORA-12008: 实体化视图的刷新路径中存在错误ORA-00942: 表或视图不存在ORA-06512: 在 "SYS.DBMS_SNAPSHOT", lin...
一、
物化视图
作用
1)起源于数据仓库,早先用于预先计算,并保存表连接或表聚集等耗时较多操作的结果。以便于在执行查询时,避免在基表上进行这些耗时的操作(基表上进行耗时操作是不是会影响其他用户使用这个基表的效率,毕竟基表查询肯定很频繁?或者单纯从Oracle性能角度出发,希望利用
物化视图
减少基表非常耗时的操作,从而提升数据库性能?),从而快速得到结果。
2)
物化视图
和表一样可以进行查询。
物化视图
还用于复制、移动计算等方面。
二、
物化视图
创建
时的权限问题
基于
主键
的
物化视图
:访问主表,访问主表的日志,cr
物化视图
概述
物化视图
(
Mat
e
ria
lized
View
)在9i以前的版本叫做快照(SNAPSHOT),从9i开始改名叫做
物化视图
。Oracle的
物化视图
是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。
物化视图
可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。
物化视图
有很多方面
[size=small][align=center][b][color=red]关于物化刷新视图
创建
以及过程遇到的一些错误分析记录(偏重于增量刷新视图)[/color][/b][/align][/size]
[color=red][b]1、视图能添
加
多个约束吗?[/b][/color]
普通视图在
创建
过程中,不能设置多个约束 即 with read only和with check opti...
各位大虾,我在数据中建立了一个JOB,执行任务是每隔10分钟刷新一次
物化视图
数据,但是刷新报错,通过查看alter.log和对应的TRC文件,发现错误如下:Errors in file /oratest/oracle/oradata/testdb/9.2.0/admin/TEST_erp/bdump/test_j001_524314.trc:ORA-12012: 自动执行作业 7799 出错ORA...
Doc ID: Note:254593.1 Type: BULLETIN Last Revision Date: 18-JAN-2005 Status: PUBLISHEDDifferences Between Rowi...
Oracle的
物化视图
提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。
物化视图
有很多方面和索引很相似:使用
物化视图
的目的是为了提高查询性能;
物化视图
对应用透明,增
加
和删除
物化视图
不会影响应用程序中SQL语句的正确性和有效性;
物化视图
需要占用存储空间;当基表发生变化时,
物化视图
也应当刷新。
物化视图
可以