- 浏览: 201538 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (196)
- Git (16)
- maven (8)
- Python (20)
- linux (14)
- java (30)
- spring (5)
- javascript (4)
- oracle (15)
- jquery (4)
- jbpm4.4 (4)
- ibatis (1)
- svn (1)
- sql server (1)
- sqoop (1)
- photoshop (2)
- 日常记录 (5)
- scala (1)
- IntelliJ IDEA (7)
- mysql (2)
- Hive (1)
- visual studio code (3)
- angularjs (5)
- nodejs (4)
- gradle (1)
- springboot (4)
- jakson (1)
- hibernate (2)
- 面试 (5)
- React (2)
- Kotlin (1)
- Netty (0)
- webstorm (2)
- spring cloud (4)
- redis (1)
- PowerDesigner (1)
- Vue (4)
- easyui (1)
- activiti (2)
- httpClient4.5 (2)
- logback (3)
- ngrinder (1)
- 分库分表 (1)
最新评论
-
严东军:
学习了,谢谢
摘录--DBMS_SCHEDULER -
zwllxs:
你知道你调的是谁的代码不?
jbpm4.4+ssh2 完整请假流程
关于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同时删除,需要在实际操作中注意。
最近在工作中遇到一个问题,是关于物化视图的刷新的,对实际数据产生了比较大的影响。虽然犯得错误很低级,主要是由于对一些概念的不清晰造成的,但是仍然觉得有必要将这个问题记下来,以免悲剧再次发生。
这个错误还需要从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同时删除,需要在实际操作中注意。
发表评论
-
简历11111111111
2013-03-12 22:19 625简历的顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 -
oracle集合操作函数
2010-09-13 10:34 1007集合操作符专门用于合并多条select 语句的结果,包括:UN ... -
摘录--DBMS_SCHEDULER
2010-08-11 16:24 1789Oracle 10g新增了scheduler的功能,功能比jo ... -
oracle的case语句实例
2010-08-09 13:12 905SELECT SUM( CASE ... -
摘录:简单测试job的创建过程案例
2010-08-04 18:37 1119一:简单测试job的创建 ... -
摘录-详解 Oracle job 的使用与管理技巧
2010-08-04 18:35 1102详解 Oracle job 的使用与管理技巧 SVRMGR&g ... -
转:基于远程数据库表,建立本地数据库的物化视图
2010-05-03 14:49 1991基于远程数据库表,建立本地数据库的物化视图2008年12月28 ... -
如何用SQL返回两个日期之间的所有连续日期
2010-04-06 22:28 8955如何用SQL返回两个日期之间的所有连续日期 -------- ... -
qlsql 学习实例代码4
2010-04-03 19:57 1076---------------------------行触发器 ... -
qlsql 学习实例代码3
2010-03-31 22:26 1069------------------------------- ... -
qlsql 学习实例代码2
2010-03-31 15:09 1195------------------------------- ... -
qlsql 学习实例代码1
2010-03-30 23:11 1154准备工作: create table DEPT ( DEP ... -
PL SQL 学习笔记
2010-03-30 15:47 813PL SQL 学习笔记 见附件 作者:丁俊 PLSDE ... -
oracle pl/sql实例练习
2010-03-30 12:11 1011第一部分:oracle pl/sql实例练习(1) 一、使用s ...
相关推荐
《广东省太阳能光伏发电发展规划(2014-2020年)》摘录-太阳库.pdf
数据结构高分笔记精彩摘录---关于树数据结构高分笔记精彩摘录---关于树
不是剽窃 只为积分 不是剽窃 只为积分 不是剽窃 只为积分 不是剽窃 只为积分
源码 博文链接:https://ghost-fly.iteye.com/blog/97204
《智慧城市--大数据、互联网时代的城市治理》 中央党校金江军、郭英楼合著,2018年第四版。 读书笔记
《强化学习导论》摘录之强化学习与有监督学习、监督学习的区别; Reinforcement Learning: An Introduction; The differences between reinforcement learning and supervised learning, unsupervised learning.
部分摘录自-WhyProbabilityandSt.pptx
webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录质
FAQ:S5700-EI配置traffic policy流策略配置界面优先级问题导致流策略不生效.txt FAQ:S5700堆叠分裂后如何恢复堆叠ID为默认.txt FAQ:s5700如何通过基于ACL的简化流策略实现DHCP的offer报文过滤.txt FAQ:S交换机做...
C语言一些很迷惑人的问题的详细解释,值得一看 希望大家喜欢
关于-初夏唯美句子摘录.docx
缠论中关于MACD的记录-摘录
摘录【3-6岁儿童学习和发展指南】(中班).doc
资料-UL1598标准摘录.zip
附件D:rhee-tcpm-cubic-02草案的摘录-快速远程网络的CUBIC拥塞控制 附件E:RFC6937的摘录-TCP的比例降低 介绍 QUIC会话管理 待定 初始化 待定 客户端 待定 服务器端 待定 终止 待定 关闭 待定 走开 待
创业计划书-广东报刊地产新闻摘录
一幅三角板全等问题摘录.docx
设计模式文章摘录设计模式文章摘录设计模式文设计模式文章摘录章摘录