[20150629]12c物化视图刷新Out of place.txt

--11G物化视图刷新有1个参数atomic_refresh.
--如果为false,采用的方式是truncate,再使用/*+ append */ 提示insert。这样redo最少,但是刷新期间无法访问。
--如果为true,采用的方式是delete,再insert。这样产生许多redo与undo。这样在刷新期间访问没问题,最多有点慢。
--自己做一个测试:

--12c在这个基础上引入1个参数Out of place,刷新时先建立表在外部,刷新后通过类似分区交换的技术与之交换,这个刷新很形象的命名
--为out-of-place refresh.

--自己做一个测试:

1.建立测试环境:

SCOTT@test01p> @ver1

PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

create table t as select * from all_objects a;

create materialized view t_mv build immediate refresh on demand enable query rewrite as
select owner, count(*) from t group by owner ;

insert into t select * from all_objects a where rownum commit;

@10046on 12
exec dbms_mview.refresh('T_MV','C', atomic_refresh=>false, out_of_place=>true);
@10046off

--atomic_refresh=>false, out_of_place=>true
--在刷新时先建立表RV$xxxxxx( xxxxx 表示 新表的object_id),然后插入数据,如果物化视图有索引在插入完成后建立,命名RV$xxxxxxx.
--( xxxxx 表示 新索引的object_id).一旦以上步骤完成,做交换在数据字段内部,删除的对象保持在recyclebin.这种方式减少redo与
--undo的生成.避免atomic_refresh=>false, out_of_place=>false的缺点.

--看看跟踪文件:

=====================
PARSE ERROR #179385424:len=68 dep=2 uid=109 oct=26 lid=109 tim=947239691 err=1418
LOCK TABLE  FOR INDEX "SCOTT"."RV$17EDF" IN EXCLUSIVE MODE  NOWAIT
CLOSE #179385424:c=0,e=3,dep=2,type=0,tim=947239944
=====================
PARSE ERROR #350722896:len=49 dep=1 uid=109 oct=10 lid=109 tim=947246385 err=1418
/* MV_REFRESH (DIDX) */ DROP INDEX SCOTT.RV$17EDF
CLOSE #350722896:c=0,e=6,dep=1,type=0,tim=947246764
XCTEND rlbk=0, rd_only=1, tim=947247033
=====================
PARSING IN CURSOR #350722896 len=52 dep=1 uid=109 oct=12 lid=109 tim=947247214 hv=2144366463 ad='22d9988' sqlid='55vc89xzx0vvz'
/* MV_REFRESH (DTB) */ drop table "SCOTT"."RV$17EDE"
END OF STMT
.....

--先删除表"SCOTT"."RV$17EDE",索引"SCOTT"."RV$17EDF".

=====================
PARSING IN CURSOR #350722896 len=181 dep=1 uid=109 oct=1 lid=109 tim=947494659 hv=1271955313 ad='7ff59657c00' sqlid='az9jhb95x0zvj'
/* MV_REFRESH (CTB) */CRE
END OF STMT
PARSE #350722896:c=78001,e=71340,p=0,cr=160,cu=0,mis=1,r=0,dep=1,og=1,plh=1064870033,tim=947494658
=====================

--这里是建表,仅仅看见CRE.

=====================
PARSING IN CURSOR #350722896 len=135 dep=1 uid=109 oct=2 lid=109 tim=947756432 hv=898979897 ad='7ff55b616a0' sqlid='32hyvfhutaq1t'
/* MV_REFRESH (ITB) */INSERT INTO "SCOTT"."RV$17EDE" ("OWNER","COUNT(*)") SELECT "T"."OWNER",COUNT(*) FROM "T" "T" GROUP BY "T"."OWNER"
END OF STMT
PARSE #350722896:c=15600,e=4699,p=0,cr=8,cu=0,mis=1,r=0,dep=1,og=1,plh=47235625,tim=947756431
=====================

=====================
PARSING IN CURSOR #350722896 len=736 dep=1 uid=109 oct=9 lid=109 tim=947886624 hv=2337637262 ad='7ff559d86b8' sqlid='1frh4hu5pb0wf'
/* MV_REFRESH (CIDX) */ CREATE UNIQUE INDEX "SCOTT"."RV$17EDF" ON "SCOTT"."RV$17EDE" (SYS_OP_MAP_NONNULL("OWNER"))
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
END OF STMT
PARSE #350722896:c=0,e=6877,p=0,cr=9,cu=1,mis=1,r=0,dep=1,og=1,plh=1685961876,tim=947886624
PARSE #350689800:c=0,e=21,p=0,cr=0,cu=0,mis=0,r=0,dep=2,og=1,plh=0,tim=947887312
EXEC #350689800:c=0,e=63,p=0,cr=0,cu=0,mis=0,r=1,dep=2,og=1,plh=0,tim=947887446
CLOSE #350689800:c=0,e=9,dep=2,type=3,tim=947887554
CLOSE #728695808:c=0,e=4,dep=2,type=3,tim=947887674
=====================
--不知道为什么要建立这个索引?看了建立的mv确实有1个索引.

--...交换后.

=====================
PARSING IN CURSOR #350722896 len=49 dep=1 uid=109 oct=10 lid=109 tim=950101269 hv=3950017501 ad='22d9988' sqlid='cfrmrnbpr0yyx'
/* MV_REFRESH (DIDX) */ DROP INDEX SCOTT.RV$17EDF
END OF STMT
====================

=====================
PARSING IN CURSOR #350722896 len=52 dep=1 uid=109 oct=12 lid=109 tim=952228430 hv=2144366463 ad='22d9988' sqlid='55vc89xzx0vvz'
/* MV_REFRESH (DTB) */ drop table "SCOTT"."RV$17EDE"
END OF STMT
PARSE #350722896:c=0,e=342,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,plh=0,tim=952228429
=====================

SCOTT@test01p> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
RV$17EDE         BIN$g0wGYZ6pRhmN7FiieHWDdQ==$0 TABLE        2015-06-29:20:42:31

--可以发现原来的t_mv是RV$17EDE.很容易验证.

SCOTT@test01p> select * from "BIN$g0wGYZ6pRhmN7FiieHWDdQ==$0" minus select * from t_mv;
OWNER    COUNT(*)
------ ----------
SYS         41418

SCOTT@test01p> select * from t_mv minus select * from "BIN$g0wGYZ6pRhmN7FiieHWDdQ==$0";
OWNER    COUNT(*)
------ ----------
SYS         41423

--正好相差5条.
--说明原来的t_mv就是"BIN$g0wGYZ6pRhmN7FiieHWDdQ==$0",oracle在内部数据字典做了交换.

SCOTT@test01p> @16to10 17EDE
16 to 10 DEC
------------
       98014

SCOTT@test01p> select object_name,original_name,operation,type,related,base_object,purge_object,CREATETIME from user_recyclebin ;
OBJECT_NAME                    ORIGINAL_NAME  OPERATION TYPE      RELATED BASE_OBJECT PURGE_OBJECT CREATETIME
------------------------------ -------------- --------- ------ ---------- ----------- ------------ -------------------
BIN$g0wGYZ6pRhmN7FiieHWDdQ==$0 RV$17EDE       DROP      TABLE       98014       98014        98014 2015-06-29:20:41:29

[20150629]12c物化视图刷新Out of place相关推荐

  1. oracle12c视图刷新,12c 物化视图 - 对快速刷新的理解

    前一篇博客用一个简单的示例描述了完全刷新的物化视图.完全刷新的物化视图每次刷新都需要对保存数据的基表执行delete操作,在将新的结果集insert到基表.为了减少这个开销,为了减少这个开销Oracl ...

  2. 定位导致物化视图无法快速刷新的原因

    转载自:http://yangtingkun.itpub.net/post/468/13318 物化视图的快速刷新采用了增量的机制,在刷新时,只针对基表上发生变化的数据进行刷新.因此快速刷新是物化视图 ...

  3. Oracle 如何根据物化视图日志快速刷新物化视图 (不积跬步,无以至千里)

    Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构: SQL ...

  4. Processes,job_queue_processes和物化视图

    某oracle sharding环境catalog端创建的duplicated table,是通过dblink和物化视图同步到shard端的,默认建立的物化视图是60s刷新一次.当前catalog端有 ...

  5. Oracle 物化视图详解(materialized)

    文章目录 1 概述 1.1 思维导图 2 语法 2.1 创建 2.2 查询 2.3 修改 2.4 删除 3 扩展 3.1 手动刷新 3.2 创建物化视图日志 3.2.1 with primary ke ...

  6. 创建物化视图commit_oracle 中物化视图讲解

    oracle 中物化视图讲解 oracle中的物化视图首先需要创建物化视图日志,oracle根据用户创建的物化视图日志来创建物化视图日志表,物化视图日志表名称为mlog$_基表名,如果表名超过20位, ...

  7. oracle雾化试图_Oracle 物化视图 说明

    一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...

  8. oracle查看物化视图的索引,oracle – 物化视图中的域索引返回零行

    我有Oracle DB的问题 – 在物化视图上通过CONTAINS()搜索后,域索引返回零行.我看到物化视图充满了数据,我还使用过程ctx_ddl.sync_index()进行域索引同步. 什么有用: ...

  9. oracle视图查询机制,物化视图及日志内部机制的一点研究

    Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构: SQL ...

最新文章

  1. 照葫芦画瓢-python editors(编辑器 IDE)
  2. IDEA代码生成插件CodeMaker
  3. 阿里 双11 同款流控降级组件 Sentinel Go 正式 GA,助力云原生服务稳稳稳
  4. 如何在开源社区贡献代码_如何在15分钟内从浏览器获得您的第一个开源贡献
  5. 查询MySQL字段注释的 5 种方法!
  6. 只工作不玩耍_不玩耍:独立游戏开发商的经验教训
  7. element-ui 解决 table 里包含表单验证的问题!
  8. (7)Redis-Cluster集群理论及实践【上】
  9. 61850客户端软件构建
  10. Java设计模式实战 ~ 总目录
  11. java 读取字符串文件_Java读取文件为字符串
  12. 子类可以重新定义父类的同名方法,并且允许他们有不同的返回值类型吗?
  13. css 超链接的颜色,css超链接字体颜色
  14. 计算机科学类期刊排名,计算机学术期刊排名:Computer Science Journal Ranki
  15. Metric Learning详解(附带NCA算法)
  16. 计算机图形直线分析,计算机图形学 直线反走样Wu算法(4)
  17. 联想笔记本大小写、数字键、触摸板切换图标不显示的解决方案
  18. Ubuntu22.04.1无法找到Ubuntu软件中心-Ubuntu Software
  19. 国密算法SM3与SM4简介与应用
  20. Linux ping 测试IP地址与 telnet 测试IP端口

热门文章

  1. C++(STL):30 ---关联式容器map的operator[]和insert效率对比
  2. 算法(5)-leetcode-explore-learn-数据结构-字符串
  3. LeetCode - Easy - 191. Number of 1 Bits
  4. python中以下关于列表描述错误的_10. 以下关于列表操作的描述,错误的是:_学小易找答案...
  5. java api接口怎么写_Java 如何设计 API 接口,实现统一格式返回?
  6. 该工程中的宏被禁止_建筑劳务分包都能承担什么工程
  7. 搭建基于飞桨的OCR工具库,总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别的PaddleOCR
  8. IPFS的相关操作命令
  9. 数学建模3 论文排版注意点
  10. Android设计模式之——责任链模式