临时表 DML 产生redo 问题说明
?
關于Oracle 臨時表,參考我的Blog:
??????????? Oracle 臨時表
??????????? http://blog.csdn.net/tianlesoftware/archive/2009/10/20/4705283.aspx
?
對Oracle 臨時表的操作,會產生redo 和undo。
?
先看一個示例:
?
SYS@anqing1(rac1)> CREATE GLOBAL TEMPORARY TABLE dave_test? (id number,name varchar2(20)) ON COMMIT DELETE ROWS;
?
Table created.
?
SYS@anqing1(rac1)> set autotrace on
SYS@anqing1(rac1)> insert into dave_test values(1,'dave');
1 row created.
Execution Plan
----------------------------------------------------------
?
-------------------------------------------------------------------------
| Id? | Operation??????? | Name | Rows? | Bytes | Cost (%CPU)| Time???? |
-------------------------------------------------------------------------
|?? 0 | INSERT STATEMENT |????? |???? 1 |?? 100 |???? 1?? (0)| 00:00:01 |
-------------------------------------------------------------------------
?
?
Statistics
----------------------------------------------------------
????????? 2? recursive calls
????????? 8? db block gets
????????? 1? consistent gets
????????? 0? physical reads
????? ??284? redo size
??????? 662? bytes sent via SQL*Net to client
??????? 571? bytes received via SQL*Net from client
????????? 3? SQL*Net roundtrips to/from client
????????? 1? sorts (memory)
????????? 0? sorts (disk)
????????? 1? rows processed
?
SYS@anqing1(rac1)>
?
關于這些統計數據的分析,參考我的Blog:
??????????? Oracle Explain Plan
??????????? http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5827245.aspx
?
??????????? 在看下為什么對臨時表操作會產生redo。
?
??????????? 因為我們可以對臨時表的操作進行回滾,即會產生undo數據; 但是所有undo都受到redo的保護,就是說假設此時數據庫崩潰了,下次啟動會利用redo把這些undo再次還原出來,然后利用這些undo進行反操作,撤銷上次那個崩潰的事務。
??????????? 這些undo里面可能有普通表的,也有臨時表的, redo都會把它們恢復出來。
?
??????????? 這個就是我們的一個數據庫roll forward和 roll back的順序問題, 在Crash recover 的時候必須先前滾,用redo 恢復出undo 之后,在用undo 回滾相關事務操作信息。簡單點說REDO的作用就是記錄所有的數據庫更改,包括UNDO表空間在內。
?
?
Oracle 實例恢復時 前滾(roll forward) 后滾(roll back) 問題
http://blog.csdn.net/tianlesoftware/archive/2011/03/29/6286330.aspx
?
?
?
?
?
-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(滿);?? DBA2 群:62697977(滿)?? DBA3 群:62697850(滿)??
DBA 超級群:63306533(滿);? DBA4 群: 83829929? DBA5群: 142216823???
DBA6 群:158654907? 聊天 群:40132017?? 聊天2群:69087192
--加群需要在備注說明Oracle表空間和數據文件的關系,否則拒絕申請
總結
以上是生活随笔為你收集整理的临时表 DML 产生redo 问题说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10个经典而简单的jQuery特效设计在
- 下一篇: 直接定址表03 - 零基础入门学习汇编语