深入淺出undo記載02
繼續理解eygle深入淺出的undo回滾於撤銷的重要細節知識點,先說一下以前blog中就提到的關於塊清除的知識點。(塊清除是個及其複雜的過程,這裡因為個人理解只能整理出如下要點)
Ora-01555快照過久,oracle經典錯誤,主要由以下三種情況構成
1 查詢scn小於block的scn需要undo構造cr塊實現一致性讀,回滾段被覆蓋
2 延遲塊清除,查詢觸發延遲塊清除需要從回滾段獲得事務提交的scn,如果事務前映象已經被覆蓋,並且查詢scn小於回滾段中最小提交的scn,那麼oracle將無法判斷查詢scn和事務提交scn大小,出現ora-01555(這裡還說一下極端的情況,執行延遲塊清除時,回滾段或原回滾表空間已經被刪除,此時oracle還是可以透過字典表undo$來獲得scn資訊,執行塊清除)
3 利用sqlldr的direct=true方式插入資料時,由於沒有記錄redo和undo資訊,oracle直接指定cache commit scn給載入資料,訪問這些資料時,可能會出現ora-01555
(對於eygle所述第三種情況,還未能理解清晰)
這裡再說下分批提交:
對於一個大型事務由於要記錄回滾段資訊,當回滾段不足時很可能會出現一個大事務由於回滾段過久而直接失敗,所以在大型事務中儘量使用分批提交減少回滾段的競爭。
Undo空間的記載,在oracle 9i自動管理的undo表空間,undo_retention引數的引入正是為了減少ora-01555錯誤出現,這個引數設定當transaction提交後,回滾段非啟用後,回滾段保留的時間,oracle9IR1初始值為900秒,oracle9IR2增加10800秒,該引數越大,回滾段保留的時間也越長,不過也需要消耗相應的undo儲存空間。
Undo_retention該引數並不是一個擔保值,在事務比較頻繁下,oracle很可能會覆蓋在undo_retention之內的undo資訊。
SQL> select * from v$version where rownum=1;
BANNER
----------------------------------------------------------------
Oracle Database
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
oracle
SQL> col ksppinm for a20
SQL> col ksppdesc for a40
SQL> col ksppstvl for a10
SQL> select ksppinm,ksppdesc,ksppstvl from x$ksppi a,x$ksppcv b
2 where a.indx=b.indx and a.ksppinm like '%undo_autotune%';
KSPPINM KSPPDESC KSPPSTVL
-------------------- ---------------------------------------- ----------
_undo_autotune enable auto tuning of undo_retention TRUE
SQL> select ksppinm,ksppdesc,ksppstvl from x$ksppi a,x$ksppcv b
2 where a.indx=b.indx and a.ksppinm like '%collect_undo_stats%';
KSPPINM KSPPDESC KSPPSTVL
-------------------- ---------------------------------------- ----------
_collect_undo_stats Collect Statistics v$undostat TRUE
同樣oracle
SQL> select tablespace_name,status,contents,retention from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS RETENTION
------------------------------ --------- --------- -----------
UNDOTBS1 ONLINE UNDO NOGUARANTEE
SQL> alter tablespace undotbs1 retention guarantee;
Tablespace altered
SQL> select tablespace_name,status,contents,retention from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS RETENTION
------------------------------ --------- --------- -----------
UNDOTBS1 ONLINE UNDO GUARANTEE
當undo表空間設定為guarantee,提交事務的回滾空間必須被保留足夠的時間,如果新的事務需要undo空間,此時不會覆蓋und_retention範圍之內的undo資訊,事務會因為沒有足夠回滾空間而失敗,而不是覆蓋。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1056956/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入淺出-redo和undo記載02
- 深入淺出undo記載01
- 深入淺出undo記載03
- 深入淺出-redo和undo記載01
- 深入淺出redo和undo記載03
- 深入淺出cache buffer和shared pool記載02
- 深入淺出負載均衡負載
- 深入淺出sga和pga章節記載-01
- 深入淺出等待事件和效能診斷記載03事件
- 深入淺出buffer cache和shared pool記載01
- 深入淺出buffer cache和shared pool記載03
- 深入淺出FE(十四)深入淺出websocketWeb
- 深入淺出記憶體馬(一)記憶體
- 深入淺出Java記憶體模型Java記憶體模型
- 深入淺出node讀書筆記筆記
- 《深入淺出MySQL》讀書筆記MySql筆記
- 深入淺出DPDK學習筆記——前言筆記
- 深入淺出Nodejs讀書筆記NodeJS筆記
- 深入淺出——MVCMVC
- 深入淺出mongooseGo
- HTTP深入淺出HTTP
- 深入淺出IO
- 深入淺出 RabbitMQMQ
- 深入淺出PromisePromise
- ArrayList 深入淺出
- mysqldump 深入淺出MySql
- 深入淺出decorator
- 深入淺出 ZooKeeper
- 機器學習深入淺出機器學習
- 深入淺出HTTPHTTP
- http 深入淺出HTTP
- 深入淺出 ARCore
- 深入淺出 synchronizedsynchronized
- 深入淺出WebpackWeb
- 深入淺出 blockBloC
- block深入淺出BloC
- 深入淺出Netty記憶體管理 PoolChunkNetty記憶體
- 前端筆記之React(五)Redux深入淺出前端筆記ReactRedux