特殊的物化视图刷新 (r4笔记第77天)

现在有一个需求,某个环境中存在两个用户,一个用户中存在物化视图,另一个用户中存在源表,根据业务的需要,需要做一种特别的物化视图刷新。

物化视图用户中的物化视图为CORP_NAME 源数据用户中的表为ADD_CORP_NAME 可能数据刷新是没有问题,关键就是在于CORP_NAME中的字段要比ADD_CORP_NAME多一些。 CORP_NAME ADD_CORP_NAME CORP_ID | CORP_ID SYS_CREATION_DATE | SYS_CREATION_DATE SYS_UPDATE_DATE | SYS_UPDATE_DATE OPERATOR_ID | OPERATOR_ID APPLICATION_ID | APPLICATION_ID DL_SERVICE_CODE | DL_SERVICE_CODE DL_UPDATE_STAMP | DL_UPDATE_STAMP CORP_NAME | CORP_NAME FUTURE1 | FUTURE2 | FUTURE3 |

根据开发的反馈,FUTURE1,FUTURE2,FUTURE3这三个字段的值是dummy字段,只是纯粹业务需要,但是没有实际的值。根据业务的需求,这三个字段的数据类型需要为VARCHAR2(10),VARCHAR2(20),VARCHAR2(30) 明白了大体的需求,因为表数据量很小,所以没有做特别的处理,采用全表刷新。 CREATE MATERIALIZED VIEW CORP_NAME AS SELECT CORP_ID , SYS_CREATION_DATE , SYS_UPDATE_DATE , OPERATOR_ID , APPLICATION_ID , DL_SERVICE_CODE , DL_UPDATE_STAMP , CORP_NAME , ' ' FUTURE1 , ' ' FUTURE2 , ' ' FUTURE3 FROM XXXX.ADD_CORP_NAME; 但是创建好之后,查看,FUTURE1,2,3的数据类型为CHAR(1),明显和需求不符。 如果这个时候做全表刷新还可以,但是刷新就会报错,

和开发做了确认,虽然这几个字段是dummy字段,但是可能会从客户端做校验,如果是char(1)很可能会有错误。 最后在查看了一些资料后,发现可以更改物化视图的数据类型。 ALTER MATERIALIZED VIEW CORP_NAME MODIFY(FUTURE1 VARCHAR2(10)); ALTER MATERIALIZED VIEW CORP_NAME MODIFY(FUTURE2 VARCHAR2(20)); ALTER MATERIALIZED VIEW CORP_NAME MODIFY(FUTURE3 VARCHAR2(30)); 自己的固有思维中,物化视图的字段数据类型都是不能手动改变的,这种思维应该是从视图的认知中转移过来的。 从这个角度来看,这也是物化视图和普通视图的一大区别。至少对于视图来说我们如果要实现这种需求真是无能为力了。 最关键的部分就是刷新了,使用如下的语句做全表刷新没有问题,这个问题就告一段落了。 EXEC DBMS_MVIEW.REFRESH('CORP_NAME','C'); 后续的需求就是hi定期刷新,我建议他们使用scheduler来实现,毕竟使用crontab或者外部job,shell脚本也都可以,数据库层面来说还是比较方便的。 这个问题发生在昨天,虽然问题很小,但是从中可以明白对于很多东西都需要打破固有的一些思维,不能想当然的处理问题。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-03-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Pythonista

mysql索引提高查询速度

  在web开发中,业务模版,业务逻辑(包括缓存、连接池)和数据库这三个部分,数据库在其中负责执行SQL查询并返回查询结果,是影响网站速度最重要的性能瓶颈。本文...

17530
来自专栏撸码那些事

MySQL——索引基础

本篇文章,我们将从索引基础开始,介绍什么是索引以及索引的几种类型,然后学习如何创建索引以及索引设计的基本原则。

11330
来自专栏高性能服务器开发

数据库进阶4 Mysql 性能优化20个原则(2)

如果你的应用程序有很多 JOIN 查询,你应该确认两个表中Join的字段是被建过索引的。这样,MySQL内部会启动为你优化Join的SQL语句的机制。

10220
来自专栏杨建荣的学习笔记

关于奇怪的并行进程分析(三)(r6笔记第47天)

在前两篇的基础上,对于一个环境中存在的奇怪并行进程问题进行了初步的分析。 初步排除了是通过scheduler的job运行导致的,一方面因为运行的时间会有延迟,甚...

29140
来自专栏杨建荣的学习笔记

关于索引的使用模式(r3笔记56天)

索引的使用对于一些庞大的sql语句来说,大多数的调优场景中有种雪中送炭的感觉,如果几百万,几千万的数据筛查,全表扫描将会是一个极度消耗资源的过程,但是如果走了索...

32170
来自专栏杨建荣的学习笔记

MySQL replace into的使用细则(r10笔记第48天)

在Oracle中有merge into的语法,可以达到一个语句完成同时修改,添加数据的功能,MySQL里面没有merge into的语法,却有replace i...

33150
来自专栏杨建荣的学习笔记

MySQL里面的dual

MySQL里面的dual算是一个特殊的存在,如果接触过Oracle的同学会很熟悉。因为语法习惯和完整性的原因会更倾向于使用这种方式。

35620
来自专栏跟着阿笨一起玩NET

SQL Server通过整理索引碎片和重建索引提高速度

本文章转载:http://database.51cto.com/art/201108/282408.htm

61210
来自专栏沃趣科技

统计信息查询视图|全方位认识 sys 系统库

在上一篇《会话和锁信息查询视图|全方位认识 sys 系统库》中,我们介绍了如何使用 sys 系统库总的视图来查询会话状态信息以及锁等待信息,本期的内容先给大家介...

19300
来自专栏晓晨的专栏

Sql Server利用游标批量清空数据表

11330

扫码关注云+社区

领取腾讯云代金券