`
weitao1026
  • 浏览: 1054177 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle物化视图的两个典型应用场景

 
阅读更多

物化视图是oracle一个比较有特色的东西,自oracle9i起,应用非常广泛,不像mysql,不支持原生物化视图,要借助flexviews去实现。物化视图到底有什么用呢?要回答这个问题,必须先搞清楚物化视图与普通视图的区别:

物化视图是有一个与之对应的容器表的。容器表是一个跟物化视图同名的“规则”的表,用于存储查询返回的结果集。这是物化视图与普通视图的根本区别,它是有储存结果集的“物理存在”的,而普通视图则没有这个物理存在,只是一个虚表,每访问一次,查询就要执行一次基表访问(不考虑cache)。

 

物化视图的应用场景有两种:1、用于查询优化 2、用于高级复制,下面分别举一些实际工作中的case来进行说明。

1、查询优化。

某电信增值业务,在进程启动的时候,需要加载一些重要的业务初始化数据(比如全球运营商的networkid、cc、ndc等基础数据),这些业务初始化数据要从四个表中查询获取。为了提高这部分数据的access性能,加快进程启动速度,可以将这四个表的数据组合为一个物化视图,定义如下:

CREATE MATERIALIZED VIEW IRDB_NETWORKLIST
REFRESH FORCE ON COMMIT
AS
SELECT
   A.NETWORKID AS NETWORKID,
   A.NETWORKNAME AS NAME,
   C.CC AS CC,
   C.NDC AS NDC,
   B.MCC AS MCC,
   B.MNC AS MNC,
   A.NEWVISITINTERVAL AS NEWVISITINTERVAL,
   A.OUTNEWVISITINTERVAL AS OUTNEWVISITINTERVAL,
   D.MNP_ENABLED AS HASMNP,
   A.BRANDNAME AS BRANDNAME,
   A.LANGUAGECODE AS DEFAULTLANGUAGECODE,
   C.TIMEZONE AS TIMEZONE,
   A.NDD AS NDD,
   A.ZONEID AS ZONEID
FROM
IRDB_NETWORK_MASTER A, IRDB_NETWORK_GSM_DETAIL B, IRDB_NETWORK_CODES C, IRDB_COUNTRY_MASTER D
WHERE
A.NETWORKID = B.NETWORKID AND A.NETWORKID = C.NETWORKID AND A.COUNTRYID = D.COUNTRYID AND A.STATUS = '1' AND C.STATUS = '1'

 

后续当我们对IRDB_NETWORK_MASTERIRDB_NETWORK_GSM_DETAILIRDB_NETWORK_CODESIRDB_COUNTRY_MASTER这四个业务基表中的任何一个或者多个进行DML commit的时候,物化视图IRDB_NETWORKLIST就能自动更新了。当然了,基表与物化视图的同步也是有一定代价的,但如果不建立物化视图,那么每次外部调用都会去查询基表,而物化视图会将这种压力分散,将基表查询、基表连接与外部业务接口访问错开,有利于降低数据库负载的peak值,这也是数据库性能优化的核心思想之一。

 

2、高级复制

很多业务场景,我们不需要对整个数据库进行同步,只需要对部分表的部分字段进行同步,这个时候,物化视图可以派上用场。下面是某直辖市移动彩铃业务数据库结构图:

wKioL1WC9wWi9kjfAAF0aiD-Lls713.jpg

 

 

这里,一台P650小机作为管理节点,负责业务开销户、业务话单等数据处理,其余5台P650小机作为呼叫节点使用,只提供用户数据的查询功能。这里不需要用DG等全库同步的技术,因为呼叫节点只需要同步部分与呼叫业务相关的数据。管理节点建立物化视图,这里以t_userinfo用户表为例:

CREATE MATERIALIZED VIEW                     

usdptemp.T_USERINFO_MV

REFRESH  FAST                                

AS                                           

selectPHONENUMBER,LOCALID,BRANDID,PAYKIND from usdp604.T_USERINFO@admin_node

 

在呼叫节点建立一个同义词:

create or replace synonym T_USERINFO
 for T_USERINFO_mv;

这样子可以保持和管理节点完全一样的对象名称。

然后建立一个刷新组,每10秒刷新一次物化视图:

--create a refresh group

BEGIN   

   DBMS_REFRESH.MAKE(   

   name => 'usdpsync',   

    list => 'T_USERINFO_mv',   

    next_date=> sysdate,   

    interval => 'sysdate + 10/86400'   

);   

END;   

/

在初始化同步的时候,首先用临时用户从管理节点导出数据,注意表后跟上管理节点的global_name(与呼叫节点上建的dblink名称一致),然后在呼叫节点上impdp数据,也就是说,呼叫节点上的物化视图T_USERINFO_mv是基于管理节点上的基表物化视图日志建立的,这样子就可以跟随管理节点基表更新了。

 

物化视图在使用过程中,还有几点需要留意,在此罗列一下:

1、物化视图有两种刷新模式ON DEMAND和ON COMMIT,前者需要调用dbms_mview手工刷新,后者在基表提交的时候会自动刷新。如果建立物化视图的时候不指定刷新方式,默认是ON DEMAND,此时一般需要建立一个job,在job里按照某个固定周期调用dbms_mview进行刷新。

2、物化视图日志在建立时有多种选项:可以指定为ROWID、PRIMARY KEY和OBJECT ID几种类型,同时还可以指定SEQUENCE或明确指定列名。上面这些情况产生的物化视图日志的结构都不相同。

3、刷新方法有四种:fast、complete、force和never。
fast是增量刷新,只刷新上次刷新以后进行的修改。
complete是对整个物化视图进行完全的刷新。
force,oracle在刷新时会判断是否可以进行快速刷新,如果可以进行fast,否则进行complete
never,物化视图不进行任何刷新。

如果要进行快速刷新,必须建立物化视图日志。物化视图日志命名规则为mlog$_+基表名称。
查看当前系统的物化视图日志表:
select * from dba_mview_logs;

force方式刷新则不需要建立物化视图日志。

 

4、如果物化视图遇到同步问题,紧急情况下,可以执行手动刷新:

SQL> exec dbms_mview.refresh('IRDB_NETWORKLIST');
PL/SQL procedure successfully completed

此时会根据基表对IRDB_NETWORKLIST物化视图进行刷新。

 

5、物化视图日志优化:

对于物化视图日志,我们可以建立索引提高性能。同时在排查同步慢等性能问题的时候也需要检查看是否出现高水位,物化视图日志表的高水位会影响刷新性能,处理高水位的方法,在此省略。

分享到:
评论

相关推荐

    oracle 物化视图详解(内含例子)

    ### Oracle 物化视图详解 #### 一、物化视图的概念与作用 物化视图是Oracle数据库中一种特殊的数据对象,它保存的是基于一个或多个表(称为基表)的查询结果集,并且这些结果集是物理上存在的。与普通的视图不同,...

    Oracle物化视图使用[文].pdf

    Oracle物化视图是数据库管理系统中的一个重要特性,尤其在处理大量数据和复杂查询的场景下,它可以极大地提升查询性能和数据一致性。物化视图与普通的视图不同,后者是逻辑上的虚表,其内容在查询时动态计算,而物化...

    Oracle物化视图介绍

    ### Oracle物化视图介绍及应用详解 #### 一、物化视图概念与作用 在Oracle数据库中,物化...总之,Oracle物化视图是提高查询性能的有效工具之一,但其设计和使用需要根据具体的应用场景和需求进行仔细考虑和规划。

    ORACLE物化视图

    ### ORACLE物化视图详解 #### 执行概要与简介 在当今的数据密集型世界中,无论是数据仓库、数据中心还是在线事务处理(OLTP)系统,都面临着一个共同的挑战:如何高效地检索和展示庞大的信息量。Oracle物化视图作为...

    物化视图的两种实现

    在实际应用中,物化视图通常用于数据仓库、报表生成以及需要快速访问聚合数据的场景。本篇将详细介绍物化视图的两种实现方式:直接设计和定时任务触发存储过程。 首先,我们来看看直接在物化视图中设置设计的实现...

    使用Oracle物化视图实现数据同步复制的研究与实现.pdf

    在实现Oracle物化视图的数据同步复制时,通常涉及以下几个关键步骤: 1. **环境准备**:确保两台数据库服务器(如文中提到的TESTMAIN和TESTREP)安装了相同版本的Oracle数据库,并且操作系统兼容。配置监听器...

    oracle物化视图

    物化视图的应用主要集中在两个方面:数据复制和预计算查询。在数据复制场景中,物化视图可以用来同步远程数据库的数据,提供近实时的数据访问。例如,在分布式系统中,通过物化视图可以在本地数据库上获取远程数据库...

    活用ORACLE物化视图实现系统容灾方案.pdf

    Oracle物化视图是数据库管理系统中的一个重要特性,尤其在实现高效的数据复制和系统容灾方案中扮演着关键角色。在Oracle数据库中,物化视图是预先计算并存储查询结果的一种方式,它允许用户快速访问汇总或特定时点的...

    ORACLE中的物化视图

    ### ORACLE中的物化视图详解 物化视图,作为ORACLE数据库中的一种特殊对象,其实质上是预先计算并存储的查询结果集。它不仅能够提高查询效率,还能在分布式环境中提供本地数据副本,简化远程数据访问,以及在数据...

    一个物化视图的简单例子

    本文将通过一个具体的Oracle数据库环境下的物化视图创建与管理的例子,深入解析物化视图的工作原理及其在实际应用中的优势。 ### 物化视图的基本概念 物化视图是数据库系统中一种特殊类型的表,它存储的是基于源表...

    Oracle数据库中物化视图的原理剖析.pdf

    Oracle数据库中的物化视图(Materialized View, MV)是一种数据对象,它预先计算并存储了一个查询的结果,以便后续查询可以更快地访问这些数据,而无需每次请求时都执行原始查询。物化视图在数据仓库和数据分析场景...

    oracle 视图、索引(自用)

    视图和索引是Oracle数据库中两个非常关键的概念,它们对于优化查询性能、管理数据以及提高数据安全性都至关重要。以下是对这两个概念的详细解释: 一、Oracle视图 1. 定义:视图是从一个或多个表中创建的虚拟表,它...

    使用物化视图和exp实现生产库的逻辑实时备份

    本文提到的是由两个计算机组成的DG(Data Guard)环境:一个是生产库,另一个是备份库。生产库的数据量相对较小,并且更新频率较低。因此,在这种情况下,仅依赖DG机制可能不足以满足数据实时备份的需求。为了进一步...

    学习分区表,索引,物化视图的使用

    ### 学习分区表、索引、物化视图的使用 #### ORACLE分区表分类及应用场景 在Oracle数据库中,分区技术是一项重要的优化手段,主要用于处理大型表以提高查询性能和管理效率。分区表根据数据分布的不同特性分为几种...

    Oracle2Oracle数据同步

    在这个场景中,我们关注的是如何在两个不同的Oracle数据库之间实现数据表的同步。 Oracle提供了多种方法来实现数据同步,下面我们将详细探讨这些方法: 1. **GoldenGate**:Oracle GoldenGate 是一个高级的数据...

    ORACLE多表查询优化

    开发者可以使用不同的统计方法,例如使用索引、分区表、物化视图等来提高数据统计的速度。 7. 选择合适的索引 索引是数据库性能的关键。开发者可以选择合适的索引类型,例如 B-Tree 索引、哈希索引等,来提高数据...

    Oracle 9i数据复制技术在教务系统中的应用.pdf

    Oracle高级复制包括多种策略,如多主控站点复制、物化视图复制和混合复制。多主控站点复制允许每个站点作为主站点进行双向通信,所有站点都可以进行数据更新,提高了系统的可用性和容错性。物化视图复制则有一主多从...

    Abp项目模板使用Oracle数据库

    同时,Oracle 11g提供的高级特性,如物化视图、分区表、存储过程等,可以帮助优化查询性能和数据管理。 总的来说,这个项目模板展示了如何将Abp框架与Oracle 11g数据库相结合,以构建具有完整权限管理和多租户支持...

    oracle数据库同步交换的方法-我收集的常见

    1. **物化视图(Materialized Views)**:物化视图是Oracle数据库提供的一种数据同步机制,允许将一个或多个表的数据复制到另一个数据库的物化视图中。通过在物化视图上添加触发器,可以实现实时或定期的数据更新,...

Global site tag (gtag.js) - Google Analytics