How to drop and recreate oracle undo tablespace and its datafile

if you get ORA-00600 or the following error message on your Oracle standby database:

Fri Mar 09 10:57:49 2007
Errors in file c:\oracle\admin92\crm\bdump\crmsb_mrp0_524.trc:
ORA-00600: internal error code, arguments: [3020], [356515961], [1], [4606], [2], [16], [], []
ORA-10567: Redo is inconsistent with data block (file# 85, block# 121)
ORA-10564: tablespace UNDOTBS2
ORA-01110: data file 85: ‘K:\ORADATA\CRM\UNDOTBS02_1.DBF’
ORA-10560: block type ‘KTU SMU HEADER BLOCK’

Or your undo tablespace has grown to unmanageable size (~ 35 Gbytes), you may want to recreate unto tablespace. Here is how:

1, Make sure the database was last cleanly shut down.

    sqlplus /nolog
    SQL>;connect sys/change@crm as sysdba
    SQL>; shutdown immediate

2, mount database in RESTRICT mode, using pfile.

    SQL>; STARTUP RESTRICT MOUNT pfile=C:\Oracle\job\crmstandby\initCRM_18.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, Try to offline drop the bad datafile.

    SQL>; 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

or this SQL:

    DROP TABLESPACE undotbs2 INCLUDING CONTENTS AND DATAFILES ;
    *
    ERROR at line 1:
    ORA-01548: active rollback segment ‘_SYSSMU11$’ found, terminate dropping
    tablespace

4, Use this query to see how many rollback segments were corrupted:

    SQL>;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, Add the following line to pfile:

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

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

#undo_management=AUTO
undo_tablespace=UNDOTBS1

6, Start the database again:

    SQL>; STARTUP RESTRICT MOUNT pfile=C:\Oracle\job\crmstandby\initcrm_18.ora

7. Drop bad rollback segments

    SQL>; drop rollback segment "_SYSSMU11$";
    Rollback segment dropped.
    …
 
    SQL>; drop rollback segment "_SYSSMU20$";
    Rollback segment dropped.

8, Check again

    SQL>; 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. Now drop bad undo TABLESPACE UNDOTBS2;

    SQL>; drop TABLESPACE UNDOTBS2;

10, Recreate the undo rollback tablespace with all its rollback segments

    SQL>;CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE 'K:\oradata\CRM\UNDOTBS01.DBF' SIZE 2000M reuse AUTOEXTEND ON ;

11, Change undo tablespace

    ALTER SYSTEM SET undo_tablespace = UNDOTBS1 ;

12. Remove the following line from pfile

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

and uncomment “undo_management=AUTO”

undo_management=AUTO
undo_retention=10800
undo_tablespace=UNDOTBS1

13, Shutdown database

    SQL>;shutdown immediate;

14, Edit initCRM_18.ora, make sure you change ‘undo_tablespace=UNDOTBS2″ to “undo_tablespace=UNDOTBS1″, then start oracle database:

    sqlplus /nolog
    SQL>;connect sys/change@crm as sysdba
    SQL>; STARTUP RESTRICT MOUNT pfile=C:\Oracle\job\crmstandby\initcrm_18.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.

15, Create Undo tablespace:

    SQL>;CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'K:\oradata\CRM\UNDOTBS02.DBF' SIZE 2000M reuse AUTOEXTEND ON ;
    SQL>;DROP TABLESPACE undotbs1 INCLUDING CONTENTS AND DATAFILES ;

16, Startup database with spfile

    SQL>; startup;
    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.

From my-whiteboard.com

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*