調整系統用SYSTEM回滾段
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;
最佳擴充套件值 ptimal= 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;
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;
最佳擴充套件值 ptimal= 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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1442533/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【UNDO】Oracle系統回滾段說明Oracle
- 回滾操作、回滾段的理解
- ORACLE回滾段Oracle
- ORACLE回滾段(1)Oracle
- ORACLE回滾段(2)Oracle
- ORACLE回滾段(轉)Oracle
- ORACLE回滾段管理Oracle
- ORACLE 回滾段詳解Oracle
- Oracle的回滾段介紹Oracle
- 引數fast_start_parallel_rollback調整oracle回滾的速度ASTParallelOracle
- ORA-01552 非系統表空間不能使用系統回滾段處理
- oracle回滾段 undo 表空間Oracle
- ORACLE技術專題-- 回滾段Oracle
- SQL code----檢視回滾段名稱及大小 回滾段的管理SQL
- 用sysctl進行調整Linux系統效能Linux
- 回滾段完蛋了的處理
- 鎖表時KILL SESSION及回滾段監控(回滾時間評估)Session
- 系統時間的調整
- AIX檔案系統調整AI
- 回滾段擴充套件資料檔案套件
- oracle 11g 回滾段的測試Oracle
- Linux系統調整swap大小Linux
- SAP系統中成本中心調整
- 【效能調整】系統檢視(二)
- 【效能調整】系統檢視(一)
- linux調整系統時間Linux
- Win10系統怎麼設定回滾時間 win10系統設定回滾時間的方法Win10
- 回滾段損壞後的引數設定
- Windows10系統調整視窗標題欄及滾動條寬度的方法Windows
- 調整CALLCENTER系統的資料庫資料庫
- FreeBSD調整系統設定(轉)
- RAC環境調整系統時間
- XP系統如何調整滑鼠靈敏度?
- oracle 12c 新特性 Temporary UNDO 臨時回滾段Oracle
- win10系統如何使用自帶Photos應用調整影像大小Win10
- linux系統檢視調整swap空間Linux
- solaris11調整檔案系統配額
- 調整linux系統時間和時區Linux