首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >物化视图刷新结合ADG的尝试 (r8笔记第47天)

物化视图刷新结合ADG的尝试 (r8笔记第47天)

作者头像
jeanron100
发布2018-03-19 15:09:16
8940
发布2018-03-19 15:09:16
举报

最近开发提了几个需求,需要把几个线上的分布式的表整合到统计系统中方便统计,看来分久必合,合久必分,当时的分开考虑,肯定没有想到以后会整合起来,这 可对我们是一些额外的工作,这个时候增量数据的问题就摆在我们眼前,当然目前已经基本抛弃了根据日期来增量同步数据,因为会有dml的数据不准确,当然数 据多了,分析多了,对统计系统对数据的精确度也在提高。 比如数据的架构是下面这种形式,左边的是线上系统,右边的统计系统。

当然这种刷新现在已然没有什么新意了,而且目前来看也算是经历住了一些大查询的考验。 但是如果结合ADG来看待物化视图刷新,是否能够成正果? 原本的刷新流程图是这样的情况,假设存在两个OLTP的主库primary1,primary2,数据都会通过物化视图日志增量刷新到统计库中。

我在处理这种案例的时候就在想,第一次刷新是一个全量的刷新,如果数据量很大的情况,对主库是不是压力有些大,如果物化视图比较多的情况下,这势必对主库有一些潜在的影响。 尤其是我碰到一个主库没有开大页,然后看着swap等待进程,剩余内存被越刷越少,老是担心出现OOM-killer的情况,这就得不偿失了。 如果是在备库执行,在ADG的环境中,可以认为是同一个数据源,只是一个只读,一个可写。 假设我们需要创建的物化视图如下: create materialized view TEST.ACC20_USER_INFO refresh fast as select *from ACC20.USER_INFO@public_primary1; create materialized view TEST.ACC15_USER_INFO refresh fast as select *from ACC15.USER_INFO@public_primary1; 我首先db link指向主库Primary1,然后常见了一个物化视图,指定快速刷新,执行成功。 然后在当前的session下,修改tnsnames.ora的配置,把它修改为备库ADG的ip。然后继续执行第二条语句,也是执行成功。所以最开始得出一个结论是ADG的这种刷新是可行的。 然后还自己起了移花接木的美名,想这样的话可以极大改善数据同步的问题。 自己的设想思路是:

但是吃了晚饭回去继续折腾这个问题,发现却不行了。 非常相似的语句,继续开了一个窗口执行就报错了。 SQL>create materialized view TEST.ACC13_USER_INFO refresh fast as select *from ACC13.USER_INFO@public_primary1; create materialized view TEST.ACC13_USER_INFO refresh fast as select *from ACC13.USER_INFO@public_primary1; * ERROR at line 1: ORA-16000: database open for read-only access ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 364 ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 446 ORA-06512: at line 1 继续测试,如果放低要求,全量刷新,结果还是不行。 SQL>create materialized view TEST.ACC13_USER_INFO refresh fast as select *from ACC13.USER_INFO@public_primary1; create materialized view TEST.ACC13_USER_INFO as select *from ACC13.USER_INFO@public_primary1; * ERROR at line 1: ORA-16000: database open for read-only access ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 364 ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 446 ORA-06512: at line 1 自己在想,是不是物化视图日志影响的,于是删除了主库的物化视图日志,继续测试,在ADG的环境继续尝试全表扫描,依旧是同样的报错。 不能增量刷新着实让我有一些失落,为什么最开始的时候可以呢,那是因为在同一个session里。 不过退一步来说,对于ADG的数据刷新,如果附带这样的子查询的形式,其实还是可行的,不过对于大量数据的刷新就得不偿失了。

 CREATE MATERIALIZED VIEW MIMI.MV_TEST 
   TABLESPACE USERS 
   BUILD IMMEDIATE 
   REFRESH COMPLETE 
   AS (SELECT * FROM TEST@MIMI_ROSTBY WHERE ROWNUM>0);

笔记简介:

分享自己整理的学习笔记,大多数是关于oracle的工作心得,还有一些关于linux,shell,MySQL,Java开发等的笔记,有感兴趣的朋友可以加我微信公众号: jianrong-notes 已经坚持740多天了,共同进步,尽量坚持每天都发 :)

可以通过以下方式联系到我

微信公众号:jianrong-notes

个人邮箱 :jeanrock@126.com

个人技术博客:http://blog.itpub.net/23718752/

微信: jeanron100 (添加请注明原因)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档