關於Oracle8i回退段引起的錯誤

lixiang114發表於2010-08-13

os:windows2000

db:oracle8.0.1.2

dd:2010-8-10

週二去使用者單位解決oracle問題,使用者反映在前臺應用中,執行完插入功能後,資料沒有完全被寫入到資料庫後臺,出現了丟失資料的現象,檢視警告日誌後,報錯如下:

ORA-01595: error freeing extent (1) of rollback segment (72))
ORA-01594: attempt to wrap into rollback segment (62) extent (1) which is being used

由於對oracle8i接觸不多,看到這個錯誤資訊有些發懵,不過看報錯記錄分析是跟回退段有關。google下,果然是因為回滾段擴充套件過小所致。

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

下一個區間分配的太小,只有56KB。

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 2 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行。

Oracle不允許修改各個段的初始分配值,所以只能修改NEXT_EXTENT的值,由於OPTSIZE 為空,也一起設定。

這裡轉一個對optsize的解釋:

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

根據情況optimal = initial + 2 * next = 409600 + 2* 1024000 = 2457600

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

重算段已修改。

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 1024000
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

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 2 2457600 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

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7417660/viewspace-1036739/,如需轉載,請註明出處,否則將追究法律責任。

相關文章