`

摘录--关于MV刷新的问题

阅读更多
关于MV刷新的问题

    最近在工作中遇到一个问题,是关于物化视图的刷新的,对实际数据产生了比较大的影响。虽然犯得错误很低级,主要是由于对一些概念的不清晰造成的,但是仍然觉得有必要将这个问题记下来,以免悲剧再次发生。




    这个错误还需要从materialized view的创建开始追溯,因为如果在create materialized view语句中加入start with 和 next 子句的话,创建MV的过程中会自动创建一个job,制定定期刷新计划,例如:

create materialized view t1_mv refresh fast
start with to_date('21-07-2009 17:15:00', 'dd-mm-yyyy hh24:mi:ss')
  next TRUNC(SYSDATE,'HH')+375/1440
  with primary key
    as select * from t1;

SQL> select job, schema_user, interval, what from all_jobs;

       JOB SCHEMA_USER        INTERVAL                            WHAT
---------- ------------------ ----------------------------------- ----------------------------------------------
        21 WANGXIAOQI         TRUNC(SYSDATE,'HH')+375/1440        dbms_refresh.refresh('"WANGXIAOQI"."T1_MV"');

SQL>

    可以看到,这个job中的执行内容是:dbms_refresh.refresh('"WANGXIAOQI"."T1_MV"'); 而不是我们普通手动刷新MV时用的 dbms_mview.refresh 。






    再来研究一下dbms_refresh这个数据包,这个包是用于产生一个刷新组以方便MV一组为单位统一刷新的。而当MV被制定刷新策略的方式指定时,会自动创建一个刷新组,并将该MV添加至这个刷新组中,所以job可以使用dbms_refresh.refresh来进行刷新。可以来看一下:

SQL> select rowner, rname, job, interval from all_refresh where rname = 'T1_MV';

ROWNER               RNAME                   JOB INTERVAL
-------------------- ---------------- ---------- ----------------------------------------
WANGXIAOQI           T1_MV                    21 TRUNC(SYSDATE,'HH')+375/1440

    再看这个组的成员:

SQL> select rowner, rname, job, interval from all_refresh_children where rname = 'T1_MV';

ROWNER               RNAME                   JOB INTERVAL
-------------------- ---------------- ---------- ----------------------------------------
WANGXIAOQI           T1_MV                    21 TRUNC(SYSDATE,'HH')+375/1440

    可以看到只有这个物化视图本身。

    所以当物化视图刷新脚本自动执行时,刷新的是你所创建的MV的名字命名的刷新组,而不是单纯得刷新这个MV。 注:关于具体如何使用dbms_refresh来创建刷新组、添加成员、进行刷新等操作,可以参见以下地址:http://www.lansz.com/html/2009/06/mview_step_by_step_05.html





    这新一次的物化视图创建中,没有指定执行时间,而是单纯得创建,所以Oracle不会创建刷新组,如下:

SQL>
SQL> create materialized view t1_mv_2 refresh fast
  2      as select * from t1;

Materialized view created

SQL> select rowner, rname, job, interval from all_refresh_children where rname = 'T1_MV_2';

ROWNER               RNAME                   JOB INTERVAL
-------------------- ---------------- ---------- ----------------------------------------

SQL>

    所以,如果对dbms_refresh了解不清的情况下,会造成无法刷新的情况,如果对没有创建刷新组的对象进行刷新就报错:

SQL> exec dbms_refresh.refresh('T1_MV_2');

begin dbms_refresh.refresh('T1_MV_2'); end;

ORA-23404: refresh group "WANGXIAOQI"."T1_MV_2" does not exist
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.DBMS_REFRESH", line 23
ORA-06512: at "SYS.DBMS_REFRESH", line 195
ORA-06512: at line 2

SQL> exec dbms_mview.refresh('T1_MV_2');

PL/SQL procedure successfully completed




    另外还需要注意一点,如果删除了某个MV,则会连同创建的fresh group同时删除,需要在实际操作中注意。

分享到:
评论

相关推荐

    《广东省太阳能光伏发电发展规划(2014-2020年)》摘录-太阳库.pdf

    《广东省太阳能光伏发电发展规划(2014-2020年)》摘录-太阳库.pdf

    摘录--提高SQL性能5中方法

    - **合理使用子查询**:有时候可以通过改写查询语句,将`LEFT JOIN`转换成内连接(`INNER JOIN`)加上一个外层查询的方式实现相同的功能,这样可以避免因`NULL`值而导致的性能问题。 例如: ```sql -- 不优化版本 ...

    实现拖动(网上摘录-存档)

    【标题】:“实现拖动(网上摘录-存档)” 在计算机编程中,实现拖放功能是一项常见的任务,尤其在开发用户界面丰富的应用程序时。拖放操作允许用户通过鼠标或其他输入设备将一个对象从一个位置移动到另一个位置,...

    智慧城市读书笔记摘录 - 排版后1008.docx

    ### 智慧城市及其发展概述 #### 中国城市信息化发展历程 中国城市信息化经历了三个重要阶段:数字城市、信息城市以及智慧城市。 - **数字城市阶段(1998年起)**:这一时期主要关注计算机技术在城市规划中的应用,...

    Reinforcement Learning An Introduction引言部分摘录-强化学习与监督学习无监督学习的区别.pdf

    《强化学习导论》摘录之强化学习与有监督学习、监督学习的区别; Reinforcement Learning: An Introduction; The differences between reinforcement learning and supervised learning, unsupervised learning.

    个人网上文档摘录合集-DIR-2024123-END

    FAQ:S5700-EI配置traffic policy流策略配置界面优先级问题导致流策略不生效.txt FAQ:S5700堆叠分裂后如何恢复堆叠ID为默认.txt FAQ:s5700如何通过基于ACL的简化流策略实现DHCP的offer报文过滤.txt FAQ:S交换机做...

    webservice摘录webservice摘录

    webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录质

    关于-初夏唯美句子摘录.docx

    【初夏唯美句子摘录】这篇文档主要收集了关于初夏时节自然景象的优美描绘,通过对初夏的各种感官体验进行诗意的表达,展现了初夏的生机与活力。以下是对其中蕴含知识点的详细解读: 1. **色彩描绘**:文档通过丰富...

    硬件十记-摘录

    电源设计不当可能会导致系统不稳定、信号干扰以及其他一系列问题。因此,在进行硬件设计时,必须对电源部分给予足够的重视。 ### 2. 电源去耦电容的选择 #### 1.0μH去耦电感与10μF电容 在电源设计中,通常会...

    缠论中关于MACD的记录-摘录.docx

    【缠论中的MACD应用】 缠论是一种股票市场分析理论,由缠中说缠提出,其核心在于通过观察和分析股票价格的波动形态,找出买卖点。在缠论中,MACD(移动平均收敛发散指标)是一个重要的辅助工具。...

    创业计划书-广东报刊地产新闻摘录

    标题中的“创业计划书-广东报刊地产新闻摘录”表明这是一份与房地产行业相关的创业计划,其中可能包含了从广东地区各类报刊中收集的房地产新闻摘要。这些摘要可能被用来作为市场分析、行业趋势研究以及制定商业策略...

    C++学习摘录

    在这个学习摘录中,你可能会接触以下主题: - 模板实例化和编译期多态 - 依赖类型推导(SFINAE)和模板元编程 - 异常安全编程,包括异常规范(nothrow) - STL容器的内部结构和操作(如容量管理和内存管理) - 迭代...

    quic:Go语言的QUIC协议

    附件D:rhee-tcpm-cubic-02草案的摘录-快速远程网络的CUBIC拥塞控制 附件E:RFC6937的摘录-TCP的比例降低 介绍 QUIC会话管理 待定 初始化 待定 客户端 待定 服务器端 待定 终止 待定 关闭 待定 走开 待

    背包问题(网页摘录)

    背包问题是一种经典的优化问题,在计算机科学,特别是在运筹学和算法设计中有着广泛的应用。它主要探讨如何在有限的资源约束下,最大化某种目标。在这个特定的问题中,我们面临的是一个01背包问题,其中“01”表示每...

    cvsnt-2.5.03安装及教程

    文章摘录如下 -------------------------- 这是去年秋天利用工作至于空暇时间写的一篇关于CVS的文章,因为是word格式的文章,发布不方便,今日放上来,希望对所有想了解和学习CVS的朋友有所帮助。 文章以CVSNT+...

    Linux摘录入门基础

    常用的基本命令包括`cd`(切换目录)、`ls`(列出目录内容)、`mkdir`(创建目录)、`rm`(删除文件或目录)、`cp`(复制文件或目录)、`mv`(移动或重命名文件或目录)以及`man`(查看命令手册页)。 3. **文件...

    全国各个软件公司面试题---DOTNET笔试题集(摘录)

    根据给定文件的信息,本文将围绕“全国各个软件公司面试题——DOTNET笔试题集(摘录)”这一主题展开,深入分析与C#相关的面试知识点,并基于标题、描述及部分给定内容进行详细的阐述。 ### 一、C#基础知识 #### ...

    excerpt-html:解析给定的html文本以获得良好的摘录

    摘录-html 解析给定的html文本以获得良好的摘录。 安装 $ npm i excerpt-html --save API使用 var htmlCode = '<p>Hello world</p>' ; var excerptHtml = require ( 'excerpt-html' ) ; var excerpt = excerptHtml ...

Global site tag (gtag.js) - Google Analytics