undo表空間大小設定

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.

相關文章
相關標籤/搜索