要確定Oracle需要的UNDO 資料表空間的大小,需要以下三條資訊:
UR 以秒為單位的UNDO_RETENTION
UPS 每秒產生的還原資料區塊的數量
DBS db_block_size
UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)
UNDO_RETENTION是一個參數,此參數控製為提供讀一致性而保留的還原資料量,以秒為單位定義,可以在初始設定檔案中設定,或使用 ALTER SYSTEM 命令來動態修改。
SQL>ALTER SYSTEM SET UNDO_RETENTION=900;
SQL> show parameter undo_retention
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer 900
如果值為900,則可以使還原資料保留 15 分鐘,當然需要足夠的儲存空間才行。
那麼如何計算每秒產生的還原資料區塊的數量呢,可以通過v$undostat視圖的begin_time、end_time和undoblks三個欄位的值查詢出來,計算的SQL語句如下:
SQL> SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "Bytes"
2 FROM (SELECT value AS UR
3 FROM v$parameter
4 WHERE name = 'undo_retention'),
5 (SELECT (SUM(undoblks)/SUM(((end_time -begin_time)*86400))) AS UPS
6 FROM v$undostat),
7 (SELECT value AS DBS
8 FROM v$parameter
9 WHERE name = 'db_block_size');
Bytes
----------
445814.844
為了獲得滿足業務需要的結果,一般應該在一天中資料庫負載最繁重的時候進行計算。