物化视图刷新的问题及分析(61天)
发布日期:2021-06-30 13:28:32 浏览次数:2 分类:技术文章

本文共 1320 字,大约阅读时间需要 4 分钟。

最近现场需要搭建一套全新的环境,对于数据字典的管理采用了物化视图,因为数据量不大,采用了全量刷新的方式。因为有好几套环境,有几套环境是通过db link和主节点的表创建的物化视图,这几个节点间的网络情况不好,刷新一个稍微大一些的表或者带有lob字段的表时,速度会很慢,因为有好几套环境,一套一套的等待刷新完得花费不少的时间,所以自己想写一个shell脚本让它在后台慢慢跑,这样过一段时间再看看日志保证数据都已经刷新完毕就可以了。原本采用的方式是create materialized view xxx as select *from xxxx@xxxx;刷新的速度确实太慢,然后自己灵机一动,想先创建物化视图,然后让它在后台慢慢刷新,类似下面的方式create materialized view xxxx as select *from xxx@xxxx where rownum<1;exec dbms_mview.refresh('XXXX','C');这样先创建完成后慢慢刷新就可以了,我也可以先把权限之类的先分配好,直接能够访问。简单的写了个脚本测试了一下,发现速度确实快了不少,创建和刷新的速度都奇快。第二天,开发反馈很多数据字典都是空的。自己先查看刷新日志,发现都是刷新过的。然后怀疑是不是数据的刷新问题,又手工刷新了一次,发现基表的数据有好几十条,但是刷新之后还是0条,接连试了几次,还是0条,感觉就像是bug一样。最后才算想明白,就是自己的一个小聪明导致的,其实下面的语句在table和materialized view中代表的意义是不同的。create table test as select *from xxxx where rownum<1;create materialized view test as select *from xxxx where rownum<1;下面简单来做一个测试,说明一下。创建测试的物化视图test_mv,有5条数据。SQL> create materialized view test_mv as select *from cat;Materialized view created.SQL> select count(*)from test_mv; COUNT(*)---------- 5然后删除物化视图,重建SQL> drop materialized view test_mv;Materialized view dropped.SQL> Create materialized view test_mv as select *from cat where rownum<1;Materialized view created.SQL> select count(*)from test_mv; COUNT(*)---------- 0

SQL> exec dbms_mview.refresh('TEST_MV','C');

TEST_MV" ("TABLE_NAME", "TABLE_TYPE")AS select *from cat where rownum<1

转载地址:https://jeanron100.blog.csdn.net/article/details/102506804 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:通过shell脚本生成数据统计信息的报表 (笔记65天)
下一篇:关于primary key和unique index的奇怪问题 (58天)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年05月02日 22时00分26秒