物化檢視(Materialized View)的重新整理回滾測試
物化檢視在完全重新整理(complete refresh)過程中,由於各種原因而重新整理失敗時,會導致該物化檢視中的記錄數為0。這是由於對單個物化檢視的完全重新整理,Oracle採用truncate/insert方法。要避免這種情況,使物化檢視能在重新整理失敗時保持在重新整理前的狀態,可以採用重新整理物化檢視組(Materialized View Group)的方式。這是因為Oracle對物化檢視組的重新整理採用delete/insert方法。
[@more@]==建立2個MV
SQL> create materialized view dept_mv
2 build immediate
3 refresh complete
4 on demand
5 enable query rewrite
6 as
7 select * from dept;
Materialized view created
SQL> create materialized view emp_mv
2 build immediate
3 refresh complete
4 on demand
5 enable query rewrite
6 as
7 select empno, ename,sal from emp;
Materialized view created
==建立materialized view group,包含剛才建立的2個MV
SQL> execute dbms_refresh.make(name => 'group1', list => 'emp_mv,dept_mv', next_date => sysdate, interval => 'sysdate+1/48', implicit_destroy => true);
PL/SQL procedure successfully completed
==執行complete refresh並跟蹤sql
SQL> alter session set sql_trace=true;
Session altered
SQL> execute dbms_refresh.refresh('group1');
PL/SQL procedure successfully completed
SQL> alter session set sql_trace=false;
Session altered
==格式化trace檔案
C:oracleoracle920adminyuzhudump>tkprof yuzh_ora_1208.trc
output = refresh_group_com.out
TKPROF: Release 9.2.0.1.0 - Production on 星期五 1月 21 17:20:03 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
==格式化後的trace檔案摘要
...
delete from "SCOTT"."EMP_MV"
...
INSERT INTO "SCOTT"."EMP_MV"("EMPNO","ENAME","SAL") SELECT "EMP"."EMPNO",
"EMP"."ENAME","EMP"."SAL" FROM "EMP" "EMP"
...
delete from "SCOTT"."DEPT_MV"
...
INSERT INTO "SCOTT"."DEPT_MV"("DEPTNO","DNAME","LOC") SELECT "DEPT"."DEPTNO",
"DEPT"."DNAME","DEPT"."LOC" FROM "DEPT" "DEPT"
...
==refresh失敗測試
SQL> insert into dept values(60,'aaa','Shanghai');
1 row inserted
SQL> commit;
Commit complete
SQL> alter table dept drop column loc;
Table altered
SQL> alter session set sql_trace=true;
Session altered
SQL> exec dbms_refresh.refresh('group1');
begin dbms_refresh.refresh('group1'); end;
ORA-12008: êμì??ˉêóí?μ??¢D??·???D′??ú′í?ó
ORA-00904: "DEPT"."LOC": ?TD§μ?±êê?·?
ORA-06512: ?ú"SYS.DBMS_SNAPSHOT", line 794
ORA-06512: ?ú"SYS.DBMS_SNAPSHOT", line 851
ORA-06512: ?ú"SYS.DBMS_IREFRESH", line 683
ORA-06512: ?ú"SYS.DBMS_REFRESH", line 195
ORA-06512: ?úline 1
SQL> alter session set sql_trace=false;
Session altered
SQL> select * from dept_mv;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 programmer Hangzhou
--紀錄都還在,表明自動回滾了
作為對照,做單個materialized view的完全重新整理測試
==建立1個MV
SQL> create materialized view dept_mv2
2 build immediate
3 refresh complete
4 on demand
5 enable query rewrite
6 as
7 select * from dept;
Materialized view created
====執行complete refresh,並跟蹤sql
SQL> alter session set sql_trace=true;
Session altered
SQL> exec dbms_mview.refresh('dept_mv2','c',null,true,false,1,0,0,true);
PL/SQL procedure successfully completed
SQL> alter session set sql_trace=false;
Session altered
==格式化trace檔案
C:oracleoracle920adminyuzhudump>tkprof yuzh_ora_1556.trc output=refresh_mv_com.out
TKPROF: Release 9.2.0.1.0 - Production on 星期五 1月 21 17:36:55 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
==格式化後的trace檔案摘要
...
truncate table "SCOTT"."DEPT_MV2" purge snapshot log
...
INSERT /*+ APPEND */ INTO "SCOTT"."DEPT_MV2"("DEPTNO","DNAME","LOC") SELECT
"DEPT"."DEPTNO","DEPT"."DNAME","DEPT"."LOC" FROM "DEPT" "DEPT"
...
==refresh失敗測試
SQL> alter session set sql_trace=true;
Session altered
SQL> exec dbms_mview.refresh('dept_mv2','c',null,true,false,1,0,0,true);
begin dbms_mview.refresh('dept_mv2','c',null,true,false,1,0,0,true); end;
ORA-12008: êμì??ˉêóí?μ??¢D??·???D′??ú′í?ó
ORA-00904: "DEPT"."LOC": ?TD§μ?±êê?·?
ORA-00904: "DEPT"."LOC": ?TD§μ?±êê?·?
ORA-06512: ?ú"SYS.DBMS_SNAPSHOT", line 794
ORA-06512: ?ú"SYS.DBMS_SNAPSHOT", line 851
ORA-06512: ?ú"SYS.DBMS_SNAPSHOT", line 832
ORA-06512: ?úline 1
SQL> alter session set sql_trace=false;
Session altered
SQL> select * from dept_mv2;
DEPTNO DNAME LOC
------ -------------- -------------
--紀錄為0
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/207/viewspace-787903/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物化檢視(Materialized View)的重新整理回滾約束ZedView
- materialized view (物化檢視)ZedView
- 建立物化檢視MV ( Materialized View )ZedView
- 轉:物化檢視(Materialized View)介紹ZedView
- oracle10g materialized view物化檢視示例OracleZedView
- ogg 同步 物化檢視建立限制 Materialized ViewZedView
- 物化檢視的快速重新整理測試與物化檢視日誌
- MV (Materialed View) 物化檢視的重新整理組View
- oracle10g nested materialized view巢狀物化檢視示例OracleZedView巢狀
- zt_yangtinkung_ITPUB知識索引貼——物化檢視materialized view索引ZedView
- 物化檢視日誌(materialized view log)引起大量Dfs Lock Handle等待ZedView
- oracle10g partition分割槽表與物化檢視materialized viewOracleZedView
- ORACLE物化檢視測試Oracle
- 【物化檢視】根據物化檢視日誌快速重新整理物化檢視的過程
- mv(materialized view)的一點測試ZedView
- 12c 物化檢視 - 理解完全重新整理的物化檢視工作原理
- oracle 物化檢視重新整理方法Oracle
- Oracle如何根據物化檢視日誌快速重新整理物化檢視Oracle
- 物化檢視重新整理並非完全根據物化檢視日誌記錄
- oracle 物化檢視的自動重新整理方法Oracle
- 物化檢視重新整理的問題及分析
- 10G物化檢視PCT快速重新整理不再需要物化檢視日誌(三)
- 10G物化檢視PCT快速重新整理不再需要物化檢視日誌(二)
- 10G物化檢視PCT快速重新整理不再需要物化檢視日誌(一)
- 物化檢視日誌與增量重新整理
- oracle檢視回滾的事務Oracle
- ClickHouse效能優化?試試物化檢視優化
- ClickHouse 效能優化?試試物化檢視優化
- 【ORACLE】物化檢視快速重新整理限制條件Oracle
- Oracle 物化檢視 快速重新整理 限制 說明Oracle
- [20230225]12c Real-time materialized view 實時物化檢視的應用.txtZedView
- 12c 物化檢視 - 對快速重新整理的理解
- Oracle 物化檢視快速重新整理對效能的影響Oracle
- Materialized ViewZedView
- SQL code----檢視回滾段名稱及大小 回滾段的管理SQL
- 包含複雜查詢的快速重新整理的物化檢視
- hg_job配置定時重新整理物化檢視
- [20121101]物化檢視與表(Materialized Views and Tables).txtZedView