当前位置: 首页
数据库
Oracle普通视图和物化视图的区别及说明

Oracle普通视图和物化视图的区别及说明

热心网友 时间:2026-04-30
转载

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)与初始化策略。对于报表系统、数据仓库同步及实时性要求较高的场景,合理配置的物化视图能够成为提升数据库整体性能的关键利器。掌握其创建、刷新与维护的全流程,将帮助您构建更高效、可靠的数据架构。

来源:https://www.jb51.net/database/343149pim.htm

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
金仓数据库逻辑备份实战:全库导出与模式替换全流程

金仓数据库逻辑备份实战:全库导出与模式替换全流程

在长期的运维实践中,我越来越体会到,备份就像一份保险——平时看似无用,但关键时刻却是唯一的救命稻草。逻辑备份看似简单,可真正执行恢复时,各种陷阱接连浮现:表名大小写不一致、Schema 未正确切换、Owner 属性未同步修改……任何一个环节处理不当,最终恢复出的数据库就会与预期相去甚远。 本文将深入

时间:2026-07-03 07:08
金仓数据库sys_rman物理备份全流程演练与误覆盖恢复

金仓数据库sys_rman物理备份全流程演练与误覆盖恢复

干运维这行,逻辑备份和物理备份我都接触过,但说句实在话,真正能在生产环境里扛住事儿的,还得是物理备份。逻辑备份导出的是 SQL 语句,数据量一大,那速度慢得让人抓狂,而且最关键的是,它没法做时间点恢复。物理备份不一样,它直接拷贝数据文件,再配上 WAL 归档日志,想恢复到过去哪一秒都行,这是它最硬核

时间:2026-07-03 07:07
Windows下将MySQL注册为系统自启服务教程

Windows下将MySQL注册为系统自启服务教程

先说一个关键前提:务必以管理员身份运行终端,否则 mysqld --install 这条命令几乎不可能成功。问题不在于命令写错,而是 Windows 系统的用户账户控制(UAC)机制会在中途拦截——在普通 CMD 或 PowerShell 窗口执行这条命令,要么直接提示 Access is deni

时间:2026-07-03 07:07
Mac版Navicat中快速对比两个数据库的表结构异同

Mac版Navicat中快速对比两个数据库的表结构异同

直接说结论:Mac 版 Navicat 和 Windows 版在表结构比对逻辑上完全一致。但默认配置下,它确实无法承受“全库一键比对上万张表”的压力。要想避免卡死、内存溢出、进度条永远停在 0%,你必须手动将表分批处理,或者利用前缀过滤来控制扫描范围。 为什么 Mac 上点击「结构同步」后界面会卡住

时间:2026-07-03 07:07
MySQL中UNION操作推荐用UNION ALL的原因

MySQL中UNION操作推荐用UNION ALL的原因

MySQL中UNION与UNION ALL性能对比:别再被“保险”迷惑,差距远超预期 先给出核心结论:UNION ALL 的性能通常比 UNION 高出不止一个数量级。原因在于,UNION 在合并结果集后会自动触发去重操作,这往往伴随着隐式排序,进而产生临时表和文件排序。而 UNION ALL 则直

时间:2026-07-03 07:07
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜