如何確定或調整undo表空間的大小

Oracle的undo數據就是事務中那些被更改,但是沒有被提交的數據。undo數據可以用來提供事務回滾,恢復事務或讀一致性等特性。

undo表空間就是用來保存undo數據的。undo表空間的大小取決於以下三方面的因素:
1. Oracle初始化參數UNDO_RETENTION
2. 每秒產生的undo數據塊
3. Oracle初始化參數DB_BLOCK_SIZE

unto表空間的大小可以通過1.*2.*3.來計算。其中因素1.和3.是可以通過show parameter <參數名>來查看。因素2.可以通過V$UNDOSTAT來查看:

SQL> SELECT undoblks/((end_time-begin_time)*86400) "Peak Undo Block Generation" FROM v$undostat WHERE undoblks=(SELECT MAX(undoblks) FROM v$undostat);

注意:要總體考慮到系統負載較重和較正常的情形,同時要考慮到表空間是否是自動擴展的。

當undo表空間增長較快時,要從以下角度考慮進行控制:

1. 如果undo表空間是自動擴展的,將自動擴展關閉。如果undo表空間自動擴展,即使有過期的undo段,它也不會重用,而是選擇增大數據文件。
alter database datafile '<datafile path>' autoextend off;

2. 對數據文件進行裁剪;
alter database datafile '<datafile path>' resize <new size>;

3. 減少UNDO_RETENTION參數值。
設定UNDO_RETENTION參數值時,參考V$UNDOSTAT裏MAXQUERYLEN(執行時間最長的事務的執行時間)。
select max(MAXQUERYLEN) from V$UNDOSTAT;

4. 創建新的更小的undo表空間:
SQL> create undo tablespace UNDO_TBS1 datafile 'undotbs1.dbf' size 100m;
SQL> alter system set undo_tablespace=undo_tbs1;
SQL> drop tablespace undo_rbs0 including contents.
如果在刪除以前undo表空間時出現ORA-30013錯誤,則需要等待所有事務提交之後,才能刪除以前undo表空間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章