Oracle普通视图和物化视图的区别及说明
Oracle物化视图详解:原理、创建与实战优化指南
在数据库性能优化与数据同步领域,Oracle物化视图(Materialized View)扮演着至关重要的角色。作为一种强大的物理表对象,它通过预计算和存储查询结果,有效解决了复杂查询的性能瓶颈与跨库数据同步难题。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
与普通逻辑视图不同,物化视图将数据实体化存储,形成独立的数据快照。每次查询无需重复执行底层复杂SQL,直接访问物化结果,从而大幅提升查询响应速度,是数据库优化中“以空间换时间”策略的经典实践。
四大刷新机制:FAST、COMPLETE、FORCE与NEVER详解
物化视图的数据需要与基表保持同步,刷新机制的选择直接影响系统性能与数据时效性。
FAST(快速刷新):采用增量更新策略,仅同步自上次刷新后基表发生变更的数据。此方式资源消耗低、执行效率高,是实现高性能数据同步的首选方案。
COMPLETE(完全刷新):彻底重建物化视图,执行全量数据刷新。虽然数据一致性最高,但耗时较长且系统负载大,适用于数据量变化巨大或结构变更的场景。
FORCE(强制刷新):由Oracle数据库智能决策刷新方式。系统优先尝试FAST刷新;若条件不满足(如未创建物化视图日志),则自动降级为COMPLETE刷新,兼顾效率与可靠性。
NEVER(从不刷新):创建后数据永久静态,适用于历史参考数据或统计分析快照等对实时性无要求的场景。
刷新模式选择:ON DEMAND与ON COMMIT应用场景
刷新模式决定了数据同步的触发时机:
ON DEMAND(按需刷新):通过手动执行或定时任务触发数据更新。这种方式灵活可控,适用于数据更新频率较低或允许一定延迟的报表分析场景。
以下是几种常见的创建语法示例:
/* 默认创建:未指定刷新方式与模式时,Oracle采用FORCE刷新和ON DEMAND模式 */ create materialized view mv_tb as select * from tb_name; /* 创建每日自动刷新的物化视图 */ create materialized view mv_name refresh force on demand start with sysdate next sysdate+1; /* 创建指定时间刷新的物化视图(每晚22:00执行) */ create materialized view mv_name refresh force on demand start with sysdate next to_date( concat(to_char( sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss');
ON COMMIT(提交时刷新):基表事务提交后立即触发物化视图刷新,实现近实时数据同步。适用于对数据一致性要求极高的OLAP系统或实时监控场景。
/* 创建ON COMMIT物化视图 */ create materialized view mv_tb refresh force on commit as select * from tb_name
数据初始化策略:build immediate与build deferred对比
创建物化视图时,初始数据的生成策略直接影响视图的可用时机:
- build immediate:创建视图时立即执行查询并填充数据,完成后即可直接使用。此为Oracle默认方式。
- build deferred:仅创建视图结构,暂不生成数据。待后续需要时通过手动刷新填充,适用于初始化耗时较长的超大表同步。
Oracle物化视图实战:跨库数据同步完整案例
以下通过一个典型的跨数据库同步案例,演示如何利用物化视图实现高效数据同步。假设需要从Oracle 11g的HIS系统中同步test_mz_fee表数据。
1、创建数据库链接(DB_LINK)
首先建立源数据库与目标数据库的连接通道:
/* 创建公共数据库链接 */ create public database link dblink_his connect to system identified by password using '192.168.1.73:1521/oracle'; /* 删除数据库链接(如遇连接未关闭错误需先关闭会话) */ drop database link dblink_his; /* 若报错ORA-02018,需先执行:*/ alter session close database link dblink_his;
2、创建物化视图日志
为实现FAST增量刷新,必须在源表上创建物化视图日志,用于跟踪数据变更:
create materialized view log on test_mz_fee with primary key including new values;
3、创建物化视图
创建支持增量刷新与查询重写的物化视图:
create materialized view mv_test_mz_fee /* 物化视图名称 */ build immediate /* 立即生成初始数据 */ refresh fast with primary key /* 基于主键的快速刷新 */ on demand /* 按需刷新模式 */ enable query rewrite /* 启用查询重写优化 */ as select * from test_mz_fee@dblink_his; /* 数据来源定义 */
4、执行视图刷新操作
通过DBMS_MVIEW包实现灵活刷新控制,可封装为存储过程定期执行:
/* 方式一:刷新单个物化视图 */
create or replace procedure p_mview_refresh as
begin
dbms_mview.refresh('mv_test_mz_fee','f'); -- 'f'参数指定FAST刷新
end p_mview_refresh;
/* 方式二:批量刷新多个物化视图 */
create or replace procedure p_mview_refresh as
begin
dbms_mview.refresh('mv_test_mz_fee1,mv_test_mz_fee2','ff'); -- 多个视图逗号分隔
end p_mview_refresh;
关键注意事项:
- 批量刷新时,视图名称需用逗号分隔,刷新模式参数需一一对应(f=FAST, c=COMPLETE, ?=FORCE)。
- 物化视图日志与依赖的物化视图存在绑定关系。删除日志将导致相关视图无法进行增量刷新。
- 基于主键的快速刷新要求源表必须定义主键约束,这是实现增量同步的前提条件。
5、清理操作顺序
删除物化视图及相关对象时,需遵循以下顺序以避免依赖错误:
drop materialized view mv_test_mz_fee; -- 先删除物化视图 drop materialized view log on test_mz_fee; -- 再删除物化视图日志
物化视图应用总结与最佳实践
Oracle物化视图通过持久化存储查询结果,显著提升了复杂查询性能与跨系统数据同步效率。在实际应用中,需根据业务需求合理选择刷新机制(FAST/COMPLETE)、刷新模式(ON DEMAND/ON COMMIT)与初始化策略。对于报表系统、数据仓库同步及实时性要求较高的场景,合理配置的物化视图能够成为提升数据库整体性能的关键利器。掌握其创建、刷新与维护的全流程,将帮助您构建更高效、可靠的数据架构。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
mysql如何利用Binlog过滤实现部分同步_mysql replicate-do-db设置
MySQL Binlog过滤:为什么replicate-do-db经常“失灵”及可靠替代方案 replicate-do-db 在主从复制中为什么经常失效 先说一个核心痛点:replicate-do-db 这个参数,它的工作逻辑有点“死板”。它只认执行语句时 USE 命令指定的那个“当前数据库”。一旦
mysql触发器如何防止误删关键数据_BEFORE_DELETE拦截策略
MySQL触发器防误删:BEFORE DELETE的拦截逻辑与实战策略 BEFORE DELETE 触发器能真正阻止删除吗 答案是肯定的,但有个关键前提:它必须主动“喊停”。MySQL的BEFORE DELETE触发器本身没有“静默拦截”的魔法,它不会悄悄让删除操作消失。想让删除命令真正停下来,唯一
mysql事务对磁盘IO的具体影响_优化锁开销减少IO压力
MySQL事务IO压力:机制、影响与优化 先明确一个核心观点:MySQL事务本身并不直接产生磁盘IO,但支撑事务实现的底层机制——尤其是InnoDB的redo log、undo log以及刷脏页行为——会显著放大随机写、顺序写和日志同步操作。这才是IO压力的真实来源。 innodb_flush_lo
mysql如何查看每个线程的内存消耗_performance_schema应用
MySQL线程内存消耗排查实战:从开启监控到定位元凶 排查MySQL线程内存消耗,就像给数据库做一次深度体检,performance_schema就是那台最精密的CT机。但机器没通电,一切都是空谈。所以,第一步永远是确认这台“CT机”是否已经准备就绪。 确认 Performance Schema 是
浅谈Redis批量删除的大坑
引言 Redis作为高性能的键值存储系统,早已是缓存、消息队列等场景的标配。不过,当数据规模膨胀起来,一个看似简单的操作——批量删除键(Keys)——却可能演变成一场运维噩梦。不少团队都曾在此栽过跟头,轻则服务抖动,重则引发线上故障。今天,我们就来彻底拆解这个“坑”,从问题根源到解决方案,再到背后的
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

