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%' ;
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)
(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.
Kamil TÜRKYILMAZ
Hiç yorum yok:
Yorum Gönder