CORRUPTED Olmuş UNDO Tablespace’ ini Drop Etmek

Rollback Segmentlerini Undo Tablespace’ i otomatik kendisi manage eder. Kimi durumlarda rollback segmentleri corrupt olabiliyor. Böyle bir durum oluştuğunda klasik yollardan undoyu drop – create etmek işe yaramıyor. Üstelik undodaki bu problem den dolayıda sürekli çoğu transaction hata almaya başlıyor. Bu durumu  düzeltmek aşağıdaki gibi bir yöntem izlememiz gerekiyor.

1-     Database imizi tutarlı bir şekilde kapatıyoruz.

sqlplus “/as sysdba”

shutdown immediate

2- Database’ i pfile’ i kullanarak Mount ve Restrict modda açıyoruz.

STARTUP RESTRICT MOUNTpfile=C:\Oracle\10g\db_1\initorcl.ora

ORACLE instance started.

Total System Global Area 1620126452 bytes

Fixed Size 457460 bytes

Variable Size 545259520 bytes

Database Buffers 1073741824 bytes

Redo Buffers 667648 bytes

Database mounted.

3- Corrupt olmuş olan undo tablespace’ ine ait datafile’ i offline drop etmeye çalıştığımızda aşağıdaki hatayı alırız.

ALTER DATABASE DATAFILE ‘K:\ORADATA\CRM\UNDOTBS2_02.DBF’ OFFLINE DROP;

*

ERROR at line 1:

ORA-01548: active rollback segment ‘_SYSSMU11$’ found, terminate dropping tablespace

Veya

DROP TABLESPACE undotbs2 INCLUDING CONTENTS AND DATAFILES ;

*

ERROR at line 1:

ORA-01548: active rollback segment ‘_SYSSMU11$’ found, terminate dropping tablespace

4- Aşağıdaki scripti kullanarak kaç tane rollback segmenti corrupt olmuş ise tespit etmemiz gerekiyor.

select segment_name,

                           status,

                           tablespace_name

   from dba_rollback_segs

   where status=’NEEDS RECOVERY’;

SEGMENT_NAME STATUS TABLESPACE_NAME

—————————— —————- —————–

_SYSSMU11$ NEEDS RECOVERY UNDOTBS2

_SYSSMU12$ NEEDS RECOVERY UNDOTBS2

_SYSSMU13$ NEEDS RECOVERY UNDOTBS2

_SYSSMU14$ NEEDS RECOVERY UNDOTBS2

_SYSSMU15$ NEEDS RECOVERY UNDOTBS2

_SYSSMU16$ NEEDS RECOVERY UNDOTBS2

_SYSSMU17$ NEEDS RECOVERY UNDOTBS2

_SYSSMU18$ NEEDS RECOVERY UNDOTBS2

_SYSSMU19$ NEEDS RECOVERY UNDOTBS2

_SYSSMU20$ NEEDS RECOVERY UNDOTBS2

5-  BU satırları pfile içerisine corrupt_rollback_segments parametresini kullanarak ekliyoruz.

*._corrupted_rollback_segments =(‘_SYSSMU11$’,’_SYSSMU12$’,’_SYSSMU13$’,’_SYSSMU14$’,’_SYSSMU15$’,’_SYSSMU16$’,’_SYSSMU17$’,’_SYSSMU18$’,’_SYSSMU19$’,’_SYSSMU20$’)

*. undo_management=AUTO  parametresini # ‘ leyerek bu disable hale getiriyoruz.

Database’ i tekrar kapatıyoruz.

Shutdown immediate

Make sure you uncomment “undo_management=AUTO”, and specify you want to use UNDOTBS1 as undo tablespace.

6,  Tekrar aynı yöntemle start ediyoruz.

STARTUP RESTRICT MOUNTpfile=C:\Oracle\10g\db_1\initorcl.ora

7.  Corrupt olmuş rollback segmentlerini drop ediyoruz.

drop rollback segment “_SYSSMU11$”;

Rollback segment dropped.

drop rollback segment “_SYSSMU20$”;

Rollback segment dropped.

8- Aşağıdaki scriptle son durumu tekrar kontrol edebiliriz.

select segment_name,status,tablespace_name from dba_rollback_segs;

SEGMENT_NAME STATUS TABLESPACE_NAME

—————————— —————- —————

SYSTEM ONLINE SYSTEM

_SYSSMU2$ ONLINE UNDOTBS1

_SYSSMU3$ ONLINE UNDOTBS1

_SYSSMU4$ ONLINE UNDOTBS1

_SYSSMU5$ ONLINE UNDOTBS1

_SYSSMU6$ ONLINE UNDOTBS1

_SYSSMU7$ ONLINE UNDOTBS1

_SYSSMU8$ ONLINE UNDOTBS1

_SYSSMU9$ ONLINE UNDOTBS1

_SYSSMU10$ ONLINE UNDOTBS1

_SYSSMU21$ ONLINE UNDOTBS1

9-  Şimdi ise corrupt olmuş olan undo tablespace’ inden kurtulma zamanı,

drop TABLESPACE UNDOTBS2;

10-  Sonrasında kendimize yeni bir undo tablespace’ i create edebiliriz.

CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE ‘c:\oradata\orcl\UNDOTBS01.DBF’ SIZE 100M ;

11- Yapılan bu değişikliği pfile’ e yazmamız gerekiyorki açılışda artık undo tablespace’ i olarak bunu görebilsin,

ALTER SYSTEM SET undo_tablespace = UNDOTBS1  scope=SPFILE;

12- Pfile’ e eklemiş olduğumuz aşağıdaki satırlarıda artık kaldırabiliriz.

Remove the following line from pfile

_corrupted_rollback_segments =(‘_SYSSMU11$’,’_SYSSMU12$’,’_SYSSMU13$’,’_SYSSMU14$’,’_SYSSMU15$’,’_SYSSMU16 $’,’_SYSSMU17$’,’_SYSSMU18$’,’_SYSSMU19$’,’_SYSSMU20$’)

Ve son olarak undo_management değerinide aktif ederek (satırın başına koymuş olduğumuz # kaldırıyoruz)

undo_management=AUTO

undo_retention=10800

undo_tablespace=UNDOTBS1

13-  Database’ i kapatıyoruz.

shutdown immediate;

14- tekrar açıyoruz.

plus “/as sysdba”

STARTUP RESTRICT MOUNTpfile=C:\Oracle\10g\db_1\initorcl.ora

ORACLE instance started.

Total System Global Area 1620126452 bytes

Fixed Size 457460 bytes

Variable Size 545259520 bytes

Database Buffers 1073741824 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

Be Sociable, Share!

Bir cevap yazın

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


9 − = bir