Oracle 段的查看和管理

Oracle 數據庫系統總是將系統用的回滾取名爲SYSTEM(不要與SYSTEM用戶相混),而且該回滾段都建立在 SYSTEM表空間內。比如可以從下面查詢中看到系統的所有回滾段的基本信息:

SQL> select segment_name,tablespace_name,bytes,next_extent
  2   from dba_segments where segment_type='ROLLBACK';

SEGMENT_NAME     TABLESPACE_NAME           BYTES  NEXT_EXTENT
---------------- -----------------    ---------- ------------
SYSTEM           SYSTEM                   409600       57344
RBS0               RBS                     4194304     2097152
RBS1               RBS                     4194304     2097152
RBS2               RBS                     4194304     2097152
RBS3               RBS                     4194304     2097152
RBS4               RBS                     4194304     2097152
RBS5               RBS                     4194304     2097152
RBS6               RBS                     4194304     2097152


從上面僅僅是查詢到回滾段的基本信息,要了目前各個回滾段的動態信息,還要查詢V$ROLLNAME和V$ROLLSTAT視圖。V$ROLLNAME視 圖只存放各回滾段的編號和名字,V$ROLLSTATS存放各個回滾段當前的情況信息。要想得到每個回滾段的信息,就要查詢兩個表的信息才能得到。如:

SQL> col name for a12
  1  select s.usn,n.name,s.extents,s.optsize,s.hwmsize,s.status
  2* from v$rollstat s, v$rollname n where s.usn=n.usn

顯示的查詢結果如下:



     USN         NAME       EXTENTS    OPTSIZE    HWMSIZE     STATUS
----------  ------------ ---------- ----------  ----------  ---------------
    0         SYSTEM           5       8388608        401408         ONLINE
    1          RBS0            8       8388608        4186112        ONLINE
    2          RBS1            8       8388608        4186112        ONLINE
    3          RBS2            8       8388608        4186112        ONLINE
    4          RBS3            8       8388608        4186112        ONLINE
    5          RBS4            8       8388608        4186112        ONLINE
    6          RBS5            8       8388608        4186112        ONLINE

已選擇8行。

從第1個查詢語句得到的結果看,SYSTEM回滾段的初始分配太小,只有400KB,而且下一次分配的大小也太小。只有56KB。這顯然是不合適的,但對 於SYSTEM回滾段,建議只能調整修改下次分配(NEXT) 值和最佳擴展(OPTIMAL)值。注意目前Oracle不允許修改各個段的初始分配值,包括表、索引及簇的初始分配等。

例子:根據前面的查詢結果:
systen回滾段的初始分配initial = 409600 ;
下一次分配 next = 57344;
最佳擴展值 optimal= null;
根據這樣的情況,我們可以修改下一次分配的值爲 1MB(=1024000字節);修改最佳擴展值爲:optimal = initial + 2 * next = 409600 + 2* 1024000 = 2457600  。所以修改SYSTEM回滾的命令爲:

SQL> alter rollback segment system  storage(next 1m optimal 2457600);

重算段已修改。


注:optimal 表示在事務處理當中,該回滾段由於增、刪、改的數據量的需要而不斷對回滾段進行擴展,以滿足事務的要求,但是在事務處理完成後可以讓回滾段縮小到一個最佳 的範圍內。這就是由回滾段的OPTIMAL參數來控制。一般optimal = initial + n* next , 且  n >1 。

確定回滾段的數目

    回滾段的數量直接影響到系統的性能,如果回滾段的個數不夠多,則在多個用戶同時進行增、刪、該時就存在等待現象。

要確定是否增加回滾段的數量,先要查詢兩個動態視圖,即V$ROLLSTAT,V$WAITSTAT。如:



SQL>  select * from v$waitstat where class='undo header';

CLASS                   COUNT       TIME
------------------ ---------- ----------
undo header                 0          0


SQL> select usn,extents,waits from v$rollstat;

       USN    EXTENTS      WAITS
---------- ---------- ----------
         0          5          0
         1          8          0
         2          8          0
         3          8          0
         4          8          0
         5          8          0
         6          8          0
         7          8          0

如果 waits 存在大於 0 的數,則需要增加回滾段的數量。一般回滾段的數量主要根據應用系統的類型來決定。比如一般的歷史檔案系統,由於其主要處理是查詢。這類增、刪、改相對較少 的應用,可以建立較少的回滾段。而想銀行、證券等應用。就需要很多的回滾段。那麼到底要多少才相對就夠了呢? 下面的回答具有一般性:


在併發程度要求高的應用系統, 同一時間內有多個 transaction 在競爭竟爭回退段。假如transaction爲事務的個數;則有:

n= transaction/transactions_per_rollback_segment


其中:
n= 回退段數量
transaction 爲ORACLE 系統參數,系統中允許併發處理的最大transaction 數。
transactions_per_rollback_segment 爲 ORACLE 參數,每個回退段允許同時寫入的最大 transaction 數。

另外,如果從 v$waitstat 動態視圖中查出自數據庫啓動後回退頭的等待次數較高,則應該多建立回滾段。

確定回滾段的大小
    由於回滾段是建立在特定的表空間裏,所以回滾段的多少就要根據應用的需要和硬盤的大小來決定。一般Oracle安裝完成後各個回滾段的大小都太小。一般的應用都需要進行調整。那麼到底每個回滾段建立多大就夠了呢。下面給出一般的應用的回滾段大小的創建建議:


建立專用的大回滾段
如果說,建立每個回滾段都很大,可以滿足任何增、刪、改的需要。但是這樣就會浪費磁盤空間,因爲這些回滾段的使用頻繁並不是很高。所以,建議針對專門的處 理建立大的回滾段。比如管理員的數據庫整理,包括將舊數據刪除,恢復大量數據等。這樣的操作無論是在命令方式或是通過程序來使用,都會有很大好處。

例子:爲結息處理建立大的回滾段:

create rollback segment  interest   tablespace  interest_tabspace
storage( initial  50m  next 10m  optimal  80m  pct_increase 0 );


建立通用的回滾段
無論是任何類型的應用,建議重新建立新的回滾段。除了上面介紹的建立專門的回滾段以外,需要建立初始值,下次增加及最佳值合適的值。一般建議是 初始值 最好是 5MB以上,下次增長爲 2MB至 5MB之間,最佳值在 20M至30MB之間。


改變回滾段
當回滾段建立好了之後,有時需要對它們進行修改。可以對回滾段進行存儲參數的修改,可以對某個脫機(OFFLINE)回滾段修改爲聯機(ONLINE)。 也可能對已經處於聯機的回滾段設置爲脫機,比如當我們進行IMP或大量修改數據時,Oracle總是需要大的回滾段。但由於分配回滾段是Oracle系統 包辦。爲了在事務處理中得到大的回滾段,我們只能將較小的回滾段設置爲脫機的狀態,等到我們所處理的事務完成後在將它們設置爲聯機等。
§14.4.1 觀察回滾段的增長
雖然回滾段在使用過程中作過擴展而在用完後又自動按照 OPTIMAL 要求大小縮小,但在動態字典V$ROLLSTAT 中會記錄曾經擴展的情況。命令如下:

select   n.name, optsize, hwmsize
from v$ROLLNAME n , V$ROLLSTAT s
where n.usn=s.usn ;

optsize  是 最優大小值, hwmsize =Hight water mark of rollback segment  size 回滾段擴展中最高值(水位)。如果 optsize 爲空,則 hwmsize 就是當前最高值。

改變回滾段的存儲參數
可以對已經建立的回滾段的參數進行修改,允許修改的參數有OPTIMAL或MAXEXTENTS參數。如:
ALTER ROLLBACK SEGMENT rbs_01
STORAGE (MAXEXTENTS 120);

同樣也可以修改系統回滾段的OPTIMAL參數。

手工縮短回滾段的存儲分配
如果某些回滾段建立時設置參數過大,可以用Alter 命令帶SHRINK保留字來實現將其大小縮短到某個合適的值裏。如:

ALTER ROLLBACK SEGMENT rbs1 SHRINK TO 100K;


§14.4.4 設置回滾段狀態爲ONLINE/OFFLINE
作爲細心的管理員,應該經常注意到所運行的系統的各個回滾段的狀態是處於ONLINE或OFFLINE。可以從數據字典中查詢到。如:

SQL> select name,status from v$rollname,v$rollstat
  2  where v$rollstat.usn=v$rollname.usn;

NAME                           STATUS
------------------------------ ---------------
SYSTEM                         ONLINE
RBS0                           ONLINE
RBS1                           ONLINE
RBS2                           ONLINE
RBS3                           ONLINE
RBS4                           ONLINE
RBS5                           ONLINE
RBS6                           ONLINE

已選擇8行。

可以用下面方法來使回滾段狀態爲脫機或聯機:

1.在INITsid.ora參數文件中設置ROLLBACK_SEGMENTS使得所需要的回滾段變爲ONLINE.

ROLLBACK_SEGMENTS = ( seg1_name,seg2_name, ... )


2.在命令方式下設置回滾段爲ONLINE

ALTER ROLLBACK SEGMENT user_rs_2 ONLINE;

3.設置回滾段爲OFFLINE

ALTER ROLLBACK SEGMENT user_rs_2 OFFLINE;



轉載地址:http://www.cnblogs.com/rootq/articles/1089259.html

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