1.undo_retention值越大,須要的undo表空間越大數據庫
undo_retention值表示一個undo數據塊最久能在undo表空間中停留的時間,單位是秒,缺省值爲900。(問:若是已經超過了這個時間,而事務還麼有提交,此時該undo數據塊能夠被覆蓋嗎?)ide
undo表空間資源是循環使用的,在undo_retention時間內,undo數據塊的內容是不會被釋放掉,也即不會被新的undo數據覆蓋。因此設置停留時間越久,undo表空間就越大。spa
2.工做量很大,業務量大,事務不少時,每秒鐘所產生undo數據塊的個數越多,須要的undo表空間越大。orm
3.和db_block_size的大小有關事務
select begin_time,end_time,undoblks資源
from v$undostat;string
BEGIN_TIME END_TEME UNDOBLKSit
------------------ ------------------- ----------io
28-SEP-O8 13:43:02 28-SEP-O8 13:44:18 19table
28-SEP-O8 13:33:02 28-SEP-O8 13:43:18 1474
28-SEP-O8 13:23:02 28-SEP-O8 13:33:18 1347
28-SEP-O8 13:13:02 28-SEP-O8 13:23:18 16 28
此語句記錄了undo數據塊的歷史使用狀況,每隔10分鐘刷一次。此結果表示記錄前40分鐘分別用到undo數據塊19個、1474個、1347個、1628個;
select addr,used_ublk
from v$transaction;
ADDR USED_UBLK
--------- --------------
5932F4A0 863
此語句能夠查看當前事務所須要數據塊的個數,此結果表示,當前用戶只有一個事務正在執行,此事務須要863個undo數據塊。
事務越多,操做影響數據越多,須要的undo數據塊也越多。
4.Oracle提供以下爲新數據庫設置撤銷保留時間間隔的指導:
一、 OLTP系統:15分鐘
二、 混合: 1小時
三、 DSS系統:3小時
四、 閃回查詢:24小時
* 如何計算所需undo表空間的大小:
1.計算業務高峯期每秒產生undo數據塊的個數:
SQL> select max(undoblks / ((end_time - begin_time)*24*3600))
SQL> from v$undostat;
2.獲得undo數據塊在undo表空間中能夠保留的最長時間
show parameter undo_retention
3.獲得數據塊大小
show parameter db_block;
4.將以上三者的數據相乘就是所需undo表空間的大小數。
發現undo表空間不夠的時候,趕忙增長undo表空間的大小,執行語句以下:
alter tablespace undotbs
add datafile '/u01/oradata/undotbs2.dbf' size 700M
autoextend on;
ORA-01555
查詢失敗,其餘事務產生的undo數據覆蓋了undo表空間中查詢須要的old數據塊。
---------------------------------------------------------------------------------------------------------------------
刪除undo tablespace實驗:
SQL> create undo tablespace undotbs2
2 datafile '/opt/oradata/oradata/orcl/undotbs02.dbf' SIZE 100m
3 autoextend off;
Tablespace created.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS1
SQL> alter system set undo_tablespace=UNDOTBS2 scope=both;
System altered.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS2
SQL> select segment_name ,tablespace_name ,segment_id from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME SEGMENT_ID
------------------------------ ------------------------------ ----------
SYSTEM SYSTEM 0
_SYSSMU1$ UNDOTBS1 1
_SYSSMU2$ UNDOTBS1 2
_SYSSMU3$ UNDOTBS1 3
_SYSSMU4$ UNDOTBS1 4
_SYSSMU5$ UNDOTBS1 5
_SYSSMU6$ UNDOTBS1 6
_SYSSMU7$ UNDOTBS1 7
_SYSSMU8$ UNDOTBS1 8
_SYSSMU9$ UNDOTBS1 9
_SYSSMU10$ UNDOTBS1 10
SEGMENT_NAME TABLESPACE_NAME SEGMENT_ID
------------------------------ ------------------------------ ----------
_SYSSMU11$ UNDOTBS2 11
_SYSSMU12$ UNDOTBS2 12
_SYSSMU13$ UNDOTBS2 13
_SYSSMU14$ UNDOTBS2 14
_SYSSMU15$ UNDOTBS2 15
_SYSSMU16$ UNDOTBS2 16
_SYSSMU17$ UNDOTBS2 17
_SYSSMU18$ UNDOTBS2 18
_SYSSMU19$ UNDOTBS2 19
_SYSSMU20$ UNDOTBS2 20
21 rows selected.
SQL> select usn,status,xacts from v$rollstat;
USN STATUS XACTS
------------- --------------- -------------
0 ONLINE 0
10 PENDING OFFLINE 1
11 ONLINE 0
12 ONLINE 0
13 ONLINE 0
14 ONLINE 0
15 ONLINE 0
16 ONLINE 0
17 ONLINE 0
18 ONLINE 0
19 ONLINE 1
USN STATUS XACTS
------------- --------------- -------------
20 ONLINE 0
12 rows selected.
發現原UNDOTBS1的回滾段處於PENDING OFFLINE狀態,並有一個事物存在,須要等到事務完成後,才能drop UNDOTBS1
SQL> select usn,status,xacts from v$rollstat;
USN STATUS XACTS
------------- --------------- -------------
0 ONLINE 0
10 PENDING OFFLINE 0
11 ONLINE 0
12 ONLINE 0
13 ONLINE 0
14 ONLINE 0
15 ONLINE 0
16 ONLINE 0
17 ONLINE 0
18 ONLINE 0
19 ONLINE 1
USN STATUS XACTS
------------- --------------- -------------
20 ONLINE 0
12 rows selected.
SQL> select usn,status,xacts from v$rollstat;
USN STATUS XACTS
------------- --------------- -------------
0 ONLINE 0
11 ONLINE 0
12 ONLINE 0
13 ONLINE 0
14 ONLINE 0
15 ONLINE 0
16 ONLINE 0
17 ONLINE 0
18 ONLINE 0
19 ONLINE 1
20 ONLINE 0
11 rows selected.
SQL> drop tablespace undotbs1 including contents and datafiles;
Tablespace dropped.