ORA-01552: cannot use system rollback segment for non-system tablespace USERS

Bugün test ortamlarımızdan birinde ora-01552 hatası almaya başladık. Hata undo tablespace’ i altında oracle tarafından manage edilen rollback segmentlerini işaret ediyordu.

Öncelikle hali hazırda mevcut olan rollback segmentlerin durumun kontrol ettiğimde ;

select segment_name, status from dba_rollback_segs;

SEGMENT_NAME    STATUS

SYSTEM    ONLINE

_SYSSMU1$    OFFLINE

_SYSSMU2$    OFFLINE

_SYSSMU3$    OFFLINE

_SYSSMU4$    OFFLINE

_SYSSMU5$    OFFLINE

_SYSSMU6$    OFFLINE

_SYSSMU7$    OFFLINE

_SYSSMU8$    OFFLINE

_SYSSMU9$    OFFLINE

_SYSSMU10$    OFFLINE

Çıkan sonuçdan da görüleceği üzere tüm rollback segmentlerin durumu offline’ dı. Burada aslında öncelikli olarak aşağıdaki scriptle offline olan rollback segmentlerinin online’ a alınması denebilir. Ancak zaman zaman burada başka bir takım hatalar alınabiliyor.

alter rollback segment _SYSSMU1$  online ;

Bu yöntem işe yararsa problem yok, kullanabilirsiniz.  Undo tablepace’ i ile ilgili olarak 2 önemli initial parametresi bulunmaktadır ;

(sql satırından çalıştıracaksanız)

SQL> Show wparameter undo  ;                

(toad veya benzeri third party bir tool üzerinden çalıştıracaksanız) 
select num, name, value  from v$parameter where name like ‘undo%’ ;           

NUM   NAME                                     VALUE

710     undo_management               AUTO

711     undo_tablespace                  UNDOTBS1

724     undo_retention                      900

9i ve öncesinde rollback segmentlerini dba’ ler manuel olarak manage ederken, 10g ile birlikte artık oracle undo tablespace’ inin içerisinde otomatik olarak bunları manage etmektedir.  Undo ile ilgili parametrelere baktığımızda undo_management’ ı AUTO, undo_tablespace’ i UNDOTBS1 olarak mutlaka görmeliyiz. (Burada undo_tablespace parametresi default olarak belirlenmiş olan undo tablespace’ inin adını ifade etmektedir. Dolayısıyla her sistemde farklı olabilir). Bu iki parametrenin değerini  belirttiğim şekilde göremiyorsak o zaman bu tarz hatalar alabiliriz demektir.  Örneğin ; Bizim örneğimizde olduğu gibi rollback segmentsler offline ise sistem crash olmaz, çalışmaya devam eder ancak ne zamanki undo tablespace’ ini kullanacak bir transaction çalışır o zaman hata almaya başlarız.

Nasıl düzelteceğimize gelince ;

Undo parametreleri istenildiği gibi değilse onları set ediyoruz ;

alter system set undo_management = ‘AUTO’ scope=spfile ;

ALTER SYSTEM SET Undo_Tablespace=UNDOTBS1 scope=spfile ;

Database’ i kapatıp açıyoruz. 
(bu değişiklikleri initSID.ora dosyasından değiştirip, create spfile from pfile ile yeni bir spfile oluşturup, database’ i  restart edersekde aynı işlemi yapmış oluruz) 

Hatanın oluşma durumuna göre farklı durumlarla karşılabilirsiniz, kimi durumlarda Undo tablespace’ ini drop – create etmek de gerekebilir.

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


9 − bir =