關於undo表空間大小設定的討論

2021-08-08 08:32:47 字數 5269 閱讀 9333

oracle的undo資料就是事務中那些被更改,但是沒有被提交的資料。undo資料可以用來提供事務回滾,恢復事務或讀一致性等特性。undo表空間就是用來儲存undo資料的。

undo表空間的大小取決於以下三方面的因素:

1. oracle初始化引數undo_retention

undo_retention值表示乙個undo資料塊最久能在undo表空間中停留的時間,單位是秒,預設值為900。undo表空間資源是迴圈使用的,在undo_retention時間內,undo資料塊的內容是不會被釋放掉,即不會被新的undo資料覆蓋。所以設定停留時間越久,undo表空間就越大。

2. 每秒產生的undo資料塊

工作量很大,業務量大,事務很多時,每秒鐘所產生undo資料塊的個數越多,需要的undo表空間越大。

select begin_time, end_time, undoblksfrom v$undostat;

begin_time end_teme undoblks

28-sep-o8 13:43:02 28-sep-o8 13:44:18 19

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資料塊也越多。

3. oracle初始化引數db_block_size

如何計算所需undo表空間的大小:

1. 計算業務高峰期每秒產生undo資料塊的個數:

sql> select max(undoblks / ((end_time - begin_time)*24*3600)) from v$undostat;

2. 得到undo資料塊在undo表空間中可以保留的最長時間

show parameter undo_retention

3.得到資料塊大小

show parameter db_block;

將以上三者的資料相乘就是所需undo表空間的大小數。

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

1. 如果undo表空間是自動擴充套件的,將自動擴充套件關閉。如果undo表空間自動擴充套件,即使有過期的undo段,它也不會重用,而是選擇增大資料檔案。

alter database datafile '' autoextend off;

2. 對資料檔案進行裁剪;

alter database datafile '' resize ;

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表空間

發現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

datafile '/opt/oradata/oradata/orcl/undotbs02.dbf' size 100m

autoextend off;

tablespace created.

sql> show parameter undo

nametype value

undo_management string auto

undo_retention integer 10800

undo_suppress_errorsboolean false

undo_tablespace string undotbs1

sql> alter system set undo_tablespace=undotbs2 scope=both;

system altered.

sql> show parameter undo

nametype 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 system0

_syssmu1$ undotbs11

_syssmu2$ undotbs12

_syssmu3$ undotbs13

_syssmu4$ undotbs14

_syssmu5$ undotbs15

_syssmu6$ undotbs16

_syssmu7$ undotbs17

_syssmu8$ undotbs18

_syssmu9$ undotbs19

_syssmu10$ undotbs110

segment_name tablespace_name segment_id

_syssmu11$ undotbs211

_syssmu12$ undotbs212

_syssmu13$ undotbs213

_syssmu14$ undotbs214

_syssmu15$ undotbs215

_syssmu16$ undotbs216

_syssmu17$ undotbs217

_syssmu18$ undotbs218

_syssmu19$ undotbs219

_syssmu20$ undotbs220

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.

UNDO和REDO表空間區別

弄懂幾個概念 redo是重做日誌檔案,是oracle資料庫的日誌檔案.oracle的重做日誌有兩種 重做日誌以及歸檔重做日誌。重做日誌 主要用於由於資料庫主機掉電等原因導致例項失敗,此時oracle採用 重做日誌在資料庫啟動時將資料庫恢復到歸檔重做日誌 主要用於介質失敗,比如 磁碟受損。此時需要使用...

關於大小調的知識

大小調對應是說每個大調都有自己的乙個對應小調,就像乙個老公有乙個老婆一樣,比如c大調和a小調,這兩個調叫關係大小調,也叫平行調,調號相同,把大調向下推乙個小三度就是它的關係小調,具體所有24個調對應如下 前面是大調,後面是小調 c a d b e c f d g e a f b g 降b g 降a ...

關於唯美溫馨的空間說說

篇一 很火的唯美空間說說 很火的唯美空間說說 一 你所浪費的今天,是昨天死去的人奢望的明天 你所厭惡的現在,是未來的你回不去的曾經。哈佛大學圖書館管訓 二 所謂心事,不過是不如己意,那就是我,執著於自己描畫的理想,一有落差,即生煩惱。三 做不到是你自己的事,午夜夢回,你愛怎麼回味就怎麼回味,但人前人...