Testpage

DATABASE RECOVERY: NOBACKUP NOARCHIVELOGS

Background & Overview

Some sites seem to feel their development environments are expendable. They do not require a backup, or it costs too much to backup all of the development environments. Comments like 'we can't afford the SAN space' or "the tapes will cost too much" or even, "we cannot afford the backup infrastructure" and the old chestnut "we don't need the data, we can recreate it".

But when the inevitable happens and the database goes bang, those same people that said they did not need a backup are the same people hammering on your door asking the DBA to recover the database.

Description of Problem

A site recently suffered a SAN hardware failure and had, for all of the above reason, decided not to take database backups. What is more (because that SAN space cost money you know) they had also turned off archiving. But thanks to a particularly diligent DBA and a big dollop of luck, the database was successfully recovered and brought back to a usable state.

Recovery of a Corrupt Database due to SAN Failure (No backups, No archive logs).

Once the SAN failure was rectified the following process was followed to recover the database.

Inital Findings

The following were the issues identified when trying to start the database.

  1. Control file older than the datafile’s
  2. Media recovery for system.dbf datafiles
  3. UNDO tablespace corruption

Attempting to start the database produced the following error

SQL> startup mount;
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size                  2085360 bytes
Variable Size           721423888 bytes
Database Buffers    1409286144 bytes
Redo Buffers             14688256 bytes
Database mounted
SQL>
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 3 failed verification check
ORA-01110: data file 3: '/u03/oradata/JSDRPW01/sysaux/d1/sysaux_01.dbf'
ORA-01207: file is more recent than control file - old control file

Issuing a recover database caused the following

SQL> reco

ver database;
ORA-00283: recovery session cancelled due to errors
ORA-01122: database file 3 failed verification check
ORA-01110: data file 3: '/u03/oradata/JSDRPW01/sysaux/d1/sysaux_01.dbf'
ORA-01207: file is more recent than control file - old control file

A select from v$recover_file produced the following output.

SQL> select * from v$recover_file;

FILE#    ONLINE_Status    ERROR              CHANGE#    TIME    
----  -------------     -------------     ---------   -------------
3    ONLINE      UNKNOWN ERROR    1000561381    10/05/2010 08:53:02
7    ONLINE      UNKNOWN ERROR    1000561381    10/05/2010 08:53:02
8    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
10    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
15    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
16    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
22    ONLINE    UNKNOWN ERROR    1000516345    10/05/2010 08:49:53
23    ONLINE    UNKNOWN ERROR    1000516345    10/05/2010 08:49:53
24    ONLINE    UNKNOWN ERROR    1000561381    10/05/2010 08:53:00
28    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
32    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
35    ONLINE    UNKNOWN ERROR    1000561381    10/05/2010 08:53:02
38    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
39    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
40    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
41    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04
43    ONLINE    UNKNOWN ERROR    1000494902    10/05/2010 08:48:04

It seems the all the datafiles listed above were out of sync of controlfile and control file needed to be rebuild.

The Recovery

At a high level the following steps were performned.

  1. Recreate database controlfile
  2. Recover database using Backup controlfile.
  3. Open database using Resetlogs option
  4. Open database after UNDO corruption
  5. Dropping UNDO with active _SYS rollback segment
  6. Run DBVerify utility

Recreate database controlfile

Use the following procedure to rebuild the controlfile.

Sqlplus / as sysdba
SQL> alter database backup controlfile to trace;
Database altered.

Find the controlfile trace file and edit it we are going to recreate controlfile with restlogs options.

Backing up current control file which will be used for recovery.

SQL> alter database backup controlfile to '/u03/oradata/JSDRPW01/users/d1/control05.ctl';

SQL> shutdown immediate;
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
SQL>

Move/rename the existing current controlfiles.

mv /u03/oradata/JSDRPW01/users/d1/control01.ctl /u03/oradata/JSDRPW01/users/d1/control01.ctl.org

mv /u03/oradata/JSDRPW01/tools/d1/control02.ctl /u03/oradata/JSDRPW01/tools/d1/control02.ctl.org

mv /u03/oradata/JSDRPW01/indx/d1/control03.ctl /u03/oradata/JSDRPW01/indx/d1/control03.ctl.org

SQL>
oracle@stevux1185:JSDRPW01> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Mon May 10 19:50:47 2010

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to an idle instance.

SQL> startup nomount;

ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size 2085360 bytes
Variable Size 721423888 bytes
Database Buffers 1409286144 bytes
Redo Buffers 14688256 bytes
SQL>

Create PFILE from SPFILE

SQL> create pfile from spfile;

File created.

SQL> stutdown abort;

Recreate Control file with Resetlogs option -

vi cre_ctlReset.sql
"cre_ctlReset.sql" 74 lines, 3643 characters
CREATE CONTROLFILE REUSE DATABASE "JSDRPW01" RESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 4
MAXDATAFILES 1024
MAXINSTANCES 1
MAXLOGHISTORY 4672
LOGFILE
GROUP 1 '/u02/oradata/JSDRPW01/redo/d1/redo001a.dbf' SIZE 50M,
GROUP 2 '/u02/oradata/JSDRPW01/redo/d1/redo002a.dbf' SIZE 50M,
GROUP 3 '/u02/oradata/JSDRPW01/redo/d1/redo003a.dbf' SIZE 50M,
GROUP 4 '/u02/oradata/JSDRPW01/redo/d1/redo004a.dbf' SIZE 50M
— STANDBY LOGFILE
DATAFILE
'/u03/oradata/JSDRPW01/system/d1/system_01.dbf',
'/u04/oradata/JSDRPW01/undo/d1/undo_01.dbf',
'/u03/oradata/JSDRPW01/sysaux/d1/sysaux_01.dbf',
'/u03/oradata/JSDRPW01/tools/d1/tools_01.dbf',
'/u03/oradata/JSDRPW01/users/d1/users_01.dbf',
'/u03/oradata/JSDRPW01/indx/d1/indx_01.dbf',
'/u07/oradata/JSDRPW01/data/d1/wms_data_01.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_01.dbf',
'/u07/oradata/JSDRPW01/audit/d1/wms_audit_01.dbf',
'/u08/oradata/JSDRPW01/indexes/d1/wms_indexes_01.dbf',
'/u07/oradata/JSDRPW01/tblsync/d1/wms_tblsync_01.dbf',
'/u07/oradata/JSDRPW01/media/d1/wms_media_01.dbf',
'/u07/oradata/JSDRPW01/report/d1/wms_report_01.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_02.dbf',
'/u07/oradata/JSDRPW01/data/d1/wms_data_02.dbf',
'/u08/oradata/JSDRPW01/indexes/d1/wms_indexes_02.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_03.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_04.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_05.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_06.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_07.dbf',
'/u07/oradata/JSDRPW01/data/d1/wms_data_03.dbf',
'/u07/oradata/JSDRPW01/data/d1/wms_data_04.dbf',
'/u08/oradata/JSDRPW01/indexes/d1/wms_indexes_03.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_08.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_09.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_10.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_11.dbf',
'/u04/oradata/JSDRPW01/undo/d1/undo_02.dbf',
'/u03/oradata/JSDRPW01/tools/d1/streamstbs01.dbf',
'/u03/oradata/JSDRPW01/tools/d1/strmslogmnr_tbs01.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_13.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_12.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_14.dbf',
'/u07/oradata/JSDRPW01/data/d1/wms_DATA_05.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_15.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_16.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_17.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_18.dbf',
'/u07/oradata/JSDRPW01/data/d1/wms_DATA_06.dbf',
'/u07/oradata/JSDRPW01/data/d1/wms_DATA_07.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_19.dbf',
'/u07/oradata/JSDRPW01/archive/d1/wms_archive_20.dbf'
CHARACTER SET AL32UTF8
;
— Commands to re-create incarnation table
— Below log names MUST be changed to existing filenames on
— disk. Any one log file from each branch can be used to
— re-create incarnation records.
— ALTER DATABASE REGISTER LOGFILE '/u06/oradata/JSDRPW01/arch/d1/arch_661967745_1_1.log';
— Recovery is required if any of the datafiles are restored backups,
— or if the last shutdown was not normal or immediate.
— RECOVER DATABASE USING BACKUP CONTROLFILE
— Database can now be opened zeroing the online logs.
— ALTER DATABASE OPEN RESETLOGS;
— Commands to add tempfiles to temporary tablespaces.
— Online tempfiles have complete space information.
— Other tempfiles may require adjustment.
— ALTER TABLESPACE TEMP ADD TEMPFILE '/u05/oradata/JSDRPW01/temp/d1/temp_01.dbf' REUSE;
— End of tempfile additions.

"cre_ctlReset.sql" 74 lines, 3649 characters

oracle@stevux1185:JSDRPW01> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Mon May 10 20:35:33 2010

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to an idle instance.

Start the database in nomount mode.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size 2085360 bytes
Variable Size 721423888 bytes
Database Buffers 1409286144 bytes
Redo Buffers 14688256 bytes

SQL> @cre_ctlReset.sql

Control file created.

Try to open the database

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u03/oradata/JSDRPW01/system/d1/system_01.dbf'

Database open fails with the media recovery needed for system_01.dbf errors.

2. Recover database using Backup controlfile.

Recover database using backup controlfile option and provide On Line REDO log file names when prompted for Archived logs. Find the REDO logfiles with complete path which will be used instead of Archived Logs when prompted.

At prompt for archive logs specific REDO log filenames with complete path.

SQL> recover database until cancel using backup controlfile;
ORA-00279: change 1000681834 generated at 05/10/2010 20:22:18 needed for thread
1
ORA-00289: suggestion :
/u06/oradata/JSDRPW01/arch/d1/arch_661967745_1_50800.log
ORA-00280: change 1000681834 for thread 1 is in sequence #50800

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/oradata/JSDRPW01/redo/d1/redo001a.dbf
ORA-00310: archived log contains sequence 50797; sequence 50800 required
ORA-00334: archived log: '/u02/oradata/JSDRPW01/redo/d1/redo001a.dbf'

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u03/oradata/JSDRPW01/system/d1/system_01.dbf'

SQL> recover database until cancel using backup controlfile;
ORA-00279: change 1000681834 generated at 05/10/2010 20:22:18 needed for thread
1
ORA-00289: suggestion :
/u06/oradata/JSDRPW01/arch/d1/arch_661967745_1_50800.log
ORA-00280: change 1000681834 for thread 1 is in sequence #50800

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/oradata/JSDRPW01/redo/d1/redo002a.dbf
ORA-00310: archived log contains sequence 50798; sequence 50800 required
ORA-00334: archived log: '/u02/oradata/JSDRPW01/redo/d1/redo002a.dbf'

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u03/oradata/JSDRPW01/system/d1/system_01.dbf'

SQL> recover database until cancel using backup controlfile;
ORA-00279: change 1000681834 generated at 05/10/2010 20:22:18 needed for thread
1
ORA-00289: suggestion :
/u06/oradata/JSDRPW01/arch/d1/arch_661967745_1_50800.log
ORA-00280: change 1000681834 for thread 1 is in sequence #50800

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/oradata/JSDRPW01/redo/d1/redo003a.dbf
ORA-00310: archived log contains sequence 50799; sequence 50800 required
ORA-00334: archived log: '/u02/oradata/JSDRPW01/redo/d1/redo003a.dbf'

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u03/oradata/JSDRPW01/system/d1/system_01.dbf'

SQL> recover database until cancel using backup controlfile;
ORA-00279: change 1000681834 generated at 05/10/2010 20:22:18 needed for thread
1
ORA-00289: suggestion :
/u06/oradata/JSDRPW01/arch/d1/arch_661967745_1_50800.log
ORA-00280: change 1000681834 for thread 1 is in sequence #50800

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/oradata/JSDRPW01/redo/d1/redo004a.dbf

Log applied.

Media recovery complete.

3. Open database using Resetlogs option

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error

oracle@stevux1185:JSDRPW01> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Mon May 10 20:43:27 2010

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size 2085360 bytes
Variable Size 721423888 bytes
Database Buffers 1409286144 bytes
Redo Buffers 14688256 bytes
Database mounted.
ORA-00603: ORACLE server session terminated by fatal error

ALERT LOG ERRORS
Parallel Transaction recovery caught error 600
error 600 detected in background process
ORA-00600: internal error code, arguments: [4193], [46679], [28124], [], [], [], [],
Errors in file /u01/app/oracle/JSDRPW01/admin/JSDRPW01/udump/jsdrpw01_ora_25078.trc:
ORA-00600: internal error code, arguments: [4193], [46679], [28124], [], [], [], [],
ORA-00600: internal error code, arguments: [4193], [46679], [28124], [], [], [], [],

4. Open database after UNDO corruption

The media recovery is completed successfully and now controlfile and datafiles are in sync but still when the database is tried to be opened the instance crashes due to the SYS undo rollback segment corruption. To resolve this issue follow the underline workaround steps.

 Create and Edit pfile - *.undo_management='MANUAL'
 Open the database with UNDO management set to MANUAL
 Create rollback temporary rollback segments
 Create new UNDO tablespace
 Drop the OLD UNDO tablespace
 Restart the database

Create PFILE

SQL> startup nomount
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size 2085360 bytes
Variable Size 721423888 bytes
Database Buffers 1409286144 bytes
Redo Buffers 14688256 bytes

SQL> create pfile from spfile;

SQL> shutdown abort;

Open the database with UNDO management set to MANUAL

SETTING UNDO TO MANUAL
vi initJSDRPW01.ora
"initJSDRPW01.ora" 33 lines, 1154 characters
JSDRPW01.db_cache_size=1409286144
JSDRPW01.
java_pool_size=16777216
JSDRPW01.large_pool_size=16777216
JSDRPW01.
shared_pool_size=469762048
JSDRPW01.__streams_pool_size=218103808
*.aq_tm_processes=0
*.audit_file_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/adump'
*.background_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/bdump'
*.control_files='/u03/oradata/JSDRPW01/users/d1/control01.ctl'
*.core_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/cdump'
*.db_block_size=8192
*.db_file_multiblock_read_count=16
*.db_name='JSDRPW01'
*.global_names=TRUE
*.job_queue_processes=2
*.log_archive_dest='/u06/oradata/JSDRPW01/arch/d1'
*.log_archive_format='arch_%r_%t_%s.log'
*.log_checkpoint_timeout=1200
*.log_checkpoints_to_alert=TRUE
*.nls_length_semantics='CHAR'
*.open_cursors=500
*.optimizer_mode='choose'
*.pga_aggregate_target=1048576000
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_manager_plan=''
*.sga_max_size=2147483648
*.sga_target=2147483648
*.streams_pool_size=218103808
*.undo_management='MANUAL'
*.undo_retention=6000
*.undo_tablespace='UNDO'
*.user_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/udump'

Open the database using PFILE option

oracle@stevux1185:JSDRPW01> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Mon May 10 21:07:07 2010

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to an idle instance.

SQL> startup mount pfile='/u01/app/oracle/JSDRPW01/product/10.2.0/dbs/initJSDRPW01.ora'

ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size 2085360 bytes
Variable Size 721423888 bytes
Database Buffers 1409286144 bytes
Redo Buffers 14688256 bytes
Database mounted.
SQL> Show parameter undo

NAME TYPE VALUE
-------- --- ------
undo_management string MANUAL
undo_retention integer 6000
undo_tablespace string UNDO
SQL>
SQL> Alter database open ;

Database altered.

Create temporary rollback segment to create new UNDO tablespace.

SQL> Create rollback segment r01 ;

Rollback segment created.

SQL> Alter rollback segment r01 online ;

Create a new undo tablespace

SQL> CREATE SMALLFILE UNDO TABLESPACE "UNDOTP" DATAFILE '/u02/oradata/JSDRPW01/redo/d1/undotp_01.dbf' SIZE 100M REUSE ;

Tablespace created.

SQL> drop tablespace undo including contents and datafiles;

drop tablespace undo including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU2$' found, terminate dropping
Tablespace

Restart the database with UNDO management AUTO and UNDO tablespace set to ‘UNDOTP’ tablespace.

SQL> create spfile from pfile;

SQL> alter system set undo_management='AUTO' scope=SPFILE;

SQL> Alter system set undo_tablespace=UNDOTP scope=spfile;

system altered.

SQL> Shutdown immediate ;

SQL> startup
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size 2085360 bytes
Variable Size 721423888 bytes
Database Buffers 1409286144 bytes
Redo Buffers 14688256 bytes
Database mounted.
Database opened.

SQL> show parameter undo

NAME TYPE VALUE
-------- --- ------
undo_management string AUTO
undo_retention integer 600
undo_tablespace string UNDOTP
SQL>

Note : The database has opened successfully with alternate UNDO tablespace this proves the point the instance was crashing after media recovery due to corrupt UNDO tablespace.

Now the objective is to drop the corrupt UNDO tablespace and recreate it but the trouble is you cannot drop the UNDO tablespace due to active SYS rollback segment expecting media recovery.

 Force UNDO offline does not work
 Drop UNDO tablespace does not work
 Drop SYS _SYS roll

Now try to drop the old UNDO tablespace

SQL>
SQL> ALTER TABLESPACE undo OFFLINE;

Tablespace altered.

SQL> DROP TABLESPACE UNDO INCLUDING CONTENTS and datafiles;

DROP TABLESPACE UNDO INCLUDING CONTENTS and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU2$' found, terminate dropping
Tablespace

SQL> select segment_name,status,tablespace_name from dba_rollback_segs where
status='NEEDS RECOVERY';

SEGMENT_NAME STATUS TABLESPACE_NAME
------ ---- ------
_SYSSMU2$ NEEDS RECOVERY UNDO

SQL> select SEGMENT_NAME,STATUS,TABLESPACE_NAME from dba_rollback_segs;

SEGMENT_NAME STATUS TABLESPACE_NAME
------ ---- ------
SYSTEM ONLINE SYSTEM
_SYSSMU2$ NEEDS RECOVERY UNDO
_SYSSMU3$ OFFLINE UNDO
_SYSSMU4$ OFFLINE UNDO
_SYSSMU5$ OFFLINE UNDO
_SYSSMU6$ OFFLINE UNDO
_SYSSMU7$ OFFLINE UNDO
_SYSSMU8$ OFFLINE UNDO
_SYSSMU9$ OFFLINE UNDO
_SYSSMU10$ OFFLINE UNDO
_SYSSMU11$ OFFLINE UNDO
_SYSSMU12$ OFFLINE UNDO
_SYSSMU13$ OFFLINE UNDO
_SYSSMU14$ OFFLINE UNDO
_SYSSMU15$ OFFLINE UNDO
_SYSSMU16$ OFFLINE UNDO
_SYSSMU17$ OFFLINE UNDO
_SYSSMU18$ OFFLINE UNDO
_SYSSMU19$ OFFLINE UNDO
_SYSSMU20$ OFFLINE UNDO
_SYSSMU21$ OFFLINE UNDO
R01 ONLINE SYSTEM
_SYSSMU23$ ONLINE UNDOTP
_SYSSMU24$ ONLINE UNDOTP
_SYSSMU25$ ONLINE UNDOTP
_SYSSMU26$ ONLINE UNDOTP
_SYSSMU27$ ONLINE UNDOTP
_SYSSMU28$ ONLINE UNDOTP
_SYSSMU29$ ONLINE UNDOTP
_SYSSMU30$ ONLINE UNDOTP
_SYSSMU31$ ONLINE UNDOTP
_SYSSMU32$ ONLINE UNDOTP
_SYSSMU33$ ONLINE UNDOTP
_SYSSMU34$ ONLINE UNDOTP
_SYSSMU35$ ONLINE UNDOTP
_SYSSMU36$ ONLINE UNDOTP
_SYSSMU37$ ONLINE UNDOTP
_SYSSMU38$ ONLINE UNDOTP
_SYSSMU39$ ONLINE UNDOTP
_SYSSMU40$ ONLINE UNDOTP
_SYSSMU41$ ONLINE UNDOTP
_SYSSMU42$ ONLINE UNDOTP

SQL> alter tablespace UNDO offline immediate;
alter tablespace UNDO offline immediate
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled
Try Force UNDO offline – doesn’t work

Offline normal
SQL> alter tablespace UNDO offline;
Tablespace altered.

Try to drop UNDO tablespace
SQL> DROP tablespace UNDO;
DROP tablespace UNDO
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU2$' found, terminate dropping
tablespace

SQL> DROP rollback segment '_SYSSMU2$';

DROP rollback segment '_SYSSMU2$'
ERROR at line 1:
ORA-02175: invalid rollback segment name
Try to drop SYS rollback segment which is not possible.

5. Dropping UNDO with active _SYS rollback segment

To successfully drop the corrupt UNDO tablespace with its active SYS ‘_SYSSMU2$’ undo rollback segment follow the workaround:

1) Create PFILE if you started with database with spfile.

SQL> CREATE PFILE FROM SPFILE;
File created.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

2) Edit pfile and set undo management to manual and to offline SYS rollback segment put the entries of the undo segments in the pfile by using the following statement in the pfile:
undo_management = manual
_offline_rollback_segments=(_SYSSMU2$)

OFFLINE _SYS ROLLBACKSEGMENT

oracle@stevux1185:JSDRPW01> vi initJSDRPW01.ora
"initJSDRPW01.ora" 33 lines, 1155 characters
JSDRPW01.db_cache_size=1409286144
JSDRPW01.
java_pool_size=16777216
JSDRPW01.large_pool_size=16777216
JSDRPW01.
shared_pool_size=469762048
JSDRPW01.__streams_pool_size=218103808
*.aq_tm_processes=0
*.audit_file_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/adump'
*.background_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/bdump'
*.control_files='/u03/oradata/JSDRPW01/users/d1/control01.ctl'
*.core_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/cdump'
*.db_block_size=8192
*.db_file_multiblock_read_count=16
*.db_name='JSDRPW01'
*.global_names=TRUE
*.job_queue_processes=2
*.log_archive_dest='/u06/oradata/JSDRPW01/arch/d1'
*.log_archive_format='arch_%r_%t_%s.log'
*.log_checkpoint_timeout=1200
*.log_checkpoints_to_alert=TRUE
*.nls_length_semantics='CHAR'
*.open_cursors=500
*.optimizer_mode='choose'
*.pga_aggregate_target=1048576000
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_manager_plan=''
*.sga_max_size=2147483648
*.sga_target=2147483648
*.streams_pool_size=218103808
*.undo_management='MANUAL'
*.undo_retention=600
*.undo_tablespace='UNDOTP'
*.user_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/udump'
*._offline_rollback_segments=(_SYSSMU2$)

3) Start the database in mount mode with PFILE

SQL> startup mount pfile='/u01/app/oracle/JSDRPW01/product/10.2.0/dbs/initJSDRPW01.ora'
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 2085360 bytes
Variable Size 721423888 bytes
Database Buffers 1409286144 bytes
Redo Buffers 14688256 bytes
Database mounted.

4) Now drop the datafiles for old UNDO tablespace

SQL> Alter Database datafile '&filename' offline drop;

Enter value for filename: /u04/oradata/JSDRPW01/undo/d1/undo_01.dbf
old 1: Alter Database datafile '&filename' offline drop
new 1: Alter Database datafile '/u04/oradata/JSDRPW01/undo/d1/undo_01.dbf' offline drop
Database altered.

SQL> /
Enter value for filename: /u04/oradata/JSDRPW01/undo/d1/undo_02.dbf
old 1: Alter Database datafile '&filename' offline drop
new 1: Alter Database datafile '/u04/oradata/JSDRPW01/undo/d1/undo_02.dbf' offline drop
Database altered.

5) Open the database

SQL> Alter Database Open;

Database altered.

6) Try to drop the SYS undo segment
SQL> Drop Rollback Segment '_SYSSMU2$';

Drop Rollback Segment '_SYSSMU2$'
ERROR at line 1:
ORA-00911: invalid character
(Still Cannot drop no problem)

7) Force offline UNDO tablespace and then drop the UNDO tablespace

SQL> alter tablespace UNDO offline immediate;

Tablespace altered.

Now the old UNDO tablespace can be dropped without getting SYS undo segment error
SQL> DROP TABLESPACE UNDO INCLUDING CONTENTS and datafiles;

Tablespace dropped.

SQL> select SEGMENT_NAME,STATUS,TABLESPACE_NAME from dba_rollback_segs;

SEGMENT_NAME STATUS TABLESPACE_NAME
------ ---- ------
SYSTEM ONLINE SYSTEM
R01 ONLINE SYSTEM
_SYSSMU23$ OFFLINE UNDOTP
_SYSSMU24$ OFFLINE UNDOTP
_SYSSMU25$ OFFLINE UNDOTP
_SYSSMU26$ OFFLINE UNDOTP
_SYSSMU27$ OFFLINE UNDOTP
_SYSSMU28$ OFFLINE UNDOTP
_SYSSMU29$ OFFLINE UNDOTP
_SYSSMU30$ OFFLINE UNDOTP
_SYSSMU31$ OFFLINE UNDOTP
_SYSSMU32$ OFFLINE UNDOTP
_SYSSMU33$ OFFLINE UNDOTP
_SYSSMU34$ OFFLINE UNDOTP
_SYSSMU35$ OFFLINE UNDOTP
_SYSSMU36$ OFFLINE UNDOTP
_SYSSMU37$ OFFLINE UNDOTP
_SYSSMU38$ OFFLINE UNDOTP
_SYSSMU39$ OFFLINE UNDOTP
_SYSSMU40$ OFFLINE UNDOTP
_SYSSMU41$ OFFLINE UNDOTP
_SYSSMU42$ OFFLINE UNDOTP

22 rows selected.

8) Recreate dropped UNDO tablespace

SQL> CREATE SMALLFILE UNDO TABLESPACE "UNDO" DATAFILE '/u04/oradata/JSDRPW01/undo/d1/undo_01.dbf' SIZE 5120M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 32767M;

Tablespace created.

SQL> alter tablespace UNDO add datafile '/u04/oradata/JSDRPW01/undo/d1/undo_02.dbf' size 500M reuse autoextend on next 10M maxsize 5120M;

Tablespace altered.

9) Add Tempfile (which we couldn’t add after controlfile recreate )

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u05/oradata/JSDRPW01/temp/d1/temp_01.dbf' REUSE;

Tablespace altered.

SQL>
SQL> select * from v$recover_file;

no rows selected

SQL> show parameter undo
NAME TYPE VALUE
-------- --- ------
undo_management string MANUAL
undo_retention integer 600
undo_tablespace string UNDOTP

SQL> select SEGMENT_NAME,STATUS,TABLESPACE_NAME from dba_rollback_segs;

SEGMENT_NAME STATUS TABLESPACE_NAME
------ ---- ------
SYSTEM ONLINE SYSTEM
_SYSSMU23$ OFFLINE UNDOTP
_SYSSMU24$ OFFLINE UNDOTP
_SYSSMU25$ OFFLINE UNDOTP
_SYSSMU26$ OFFLINE UNDOTP
_SYSSMU27$ OFFLINE UNDOTP
_SYSSMU28$ OFFLINE UNDOTP
_SYSSMU29$ OFFLINE UNDOTP
_SYSSMU30$ OFFLINE UNDOTP
_SYSSMU31$ OFFLINE UNDOTP
_SYSSMU32$ OFFLINE UNDOTP
_SYSSMU33$ OFFLINE UNDOTP
_SYSSMU34$ OFFLINE UNDOTP
_SYSSMU35$ OFFLINE UNDOTP
_SYSSMU36$ OFFLINE UNDOTP
_SYSSMU37$ OFFLINE UNDOTP
_SYSSMU38$ OFFLINE UNDOTP
_SYSSMU39$ OFFLINE UNDOTP
_SYSSMU40$ OFFLINE UNDOTP
_SYSSMU41$ OFFLINE UNDOTP
_SYSSMU42$ OFFLINE UNDOTP

10) Change the PFILE parameters back to “undo_management=AUTO” and modify the parameter “undo_tablespace=UNDO” and remove the “_offline_rollback_segments” parameter.

SQL> Shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.

oracle@stevux1185:JSDRPW01> vi initJSDRPW01.ora
"initJSDRPW01.ora" 33 lines, 1155 characters
JSDRPW01.db_cache_size=1409286144
JSDRPW01.
java_pool_size=16777216
JSDRPW01.large_pool_size=16777216
JSDRPW01.
shared_pool_size=469762048
JSDRPW01.__streams_pool_size=218103808
*.aq_tm_processes=0
*.audit_file_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/adump'
*.background_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/bdump'
*.control_files='/u03/oradata/JSDRPW01/users/d1/control01.ctl'
*.core_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/cdump'
*.db_block_size=8192
*.db_file_multiblock_read_count=16
*.db_name='JSDRPW01'
*.global_names=TRUE
*.job_queue_processes=2
*.log_archive_dest='/u06/oradata/JSDRPW01/arch/d1'
*.log_archive_format='arch_%r_%t_%s.log'
*.log_checkpoint_timeout=1200
*.log_checkpoints_to_alert=TRUE
*.nls_length_semantics='CHAR'
*.open_cursors=500
*.optimizer_mode='choose'
*.pga_aggregate_target=1048576000
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_manager_plan=''
*.sga_max_size=2147483648
*.sga_target=2147483648
*.streams_pool_size=218103808
*.undo_management='AUTO'
*.undo_retention=600
*.undo_tablespace='UNDO'
*.user_dump_dest='/u01/app/oracle/JSDRPW01/admin/JSDRPW01/udump'

11) Start the database with updated PFILE.

SQL> startup pfile='/u01/app/oracle/JSDRPW01/product/10.2.0/dbs/initJSDRPW01.ora'

ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size 2085360 bytes
Variable Size 721423888 bytes
Database Buffers 1409286144 bytes
Redo Buffers 14688256 bytes
Database mounted.
Database opened.
SQL>

12) Create SPFILE

SQL> create spfile from pfile;

File created.

Drop temporary rollback segment which we created earlier.

SQL> drop rollback segment R01;

Rollback segment dropped.

SQL> select SEGMENT_NAME,STATUS,TABLESPACE_NAME from dba_rollback_segs;

SEGMENT_NAME STATUS TABLESPACE_NAME
------ ---- ------
SYSTEM ONLINE SYSTEM
_SYSSMU1$ ONLINE UNDO
_SYSSMU2$ ONLINE UNDO
_SYSSMU3$ ONLINE UNDO
_SYSSMU4$ ONLINE UNDO
_SYSSMU5$ ONLINE UNDO
_SYSSMU6$ ONLINE UNDO
_SYSSMU7$ ONLINE UNDO
_SYSSMU8$ ONLINE UNDO
_SYSSMU9$ ONLINE UNDO
_SYSSMU10$ ONLINE UNDO
_SYSSMU11$ ONLINE UNDO
_SYSSMU12$ ONLINE UNDO
_SYSSMU13$ ONLINE UNDO
_SYSSMU14$ ONLINE UNDO
_SYSSMU15$ ONLINE UNDO
_SYSSMU16$ ONLINE UNDO
_SYSSMU17$ ONLINE UNDO
_SYSSMU18$ ONLINE UNDO
_SYSSMU19$ ONLINE UNDO
_SYSSMU20$ ONLINE UNDO
_SYSSMU23$ OFFLINE UNDOTP
_SYSSMU24$ OFFLINE UNDOTP
_SYSSMU25$ OFFLINE UNDOTP
_SYSSMU26$ OFFLINE UNDOTP
_SYSSMU27$ OFFLINE UNDOTP
_SYSSMU28$ OFFLINE UNDOTP
_SYSSMU29$ OFFLINE UNDOTP
_SYSSMU30$ OFFLINE UNDOTP
_SYSSMU31$ OFFLINE UNDOTP
_SYSSMU32$ OFFLINE UNDOTP
_SYSSMU33$ OFFLINE UNDOTP
_SYSSMU34$ OFFLINE UNDOTP
_SYSSMU35$ OFFLINE UNDOTP
_SYSSMU36$ OFFLINE UNDOTP
_SYSSMU37$ OFFLINE UNDOTP
_SYSSMU38$ OFFLINE UNDOTP
_SYSSMU39$ OFFLINE UNDOTP
_SYSSMU40$ OFFLINE UNDOTP
_SYSSMU41$ OFFLINE UNDOTP
_SYSSMU42$ OFFLINE UNDOTP

41 rows selected.

13) Drop the temporary UNDOTP tablespace

SQL> alter tablespace UNDOTP offline;

Tablespace altered.

SQL> DROP TABLESPACE UNDOTP INCLUDING CONTENTS and datafiles;

Tablespace dropped.

SQL> select SEGMENT_NAME,STATUS,TABLESPACE_NAME from dba_rollback_segs;

SEGMENT_NAME STATUS TABLESPACE_NAME
------ ---- ------
SYSTEM ONLINE SYSTEM
_SYSSMU1$ ONLINE UNDO
_SYSSMU2$ ONLINE UNDO
_SYSSMU3$ ONLINE UNDO
_SYSSMU4$ ONLINE UNDO
_SYSSMU5$ ONLINE UNDO
_SYSSMU6$ ONLINE UNDO
_SYSSMU7$ ONLINE UNDO
_SYSSMU8$ ONLINE UNDO
_SYSSMU9$ ONLINE UNDO
_SYSSMU10$ ONLINE UNDO
_SYSSMU11$ ONLINE UNDO
_SYSSMU12$ ONLINE UNDO
_SYSSMU13$ ONLINE UNDO
_SYSSMU14$ ONLINE UNDO
_SYSSMU15$ ONLINE UNDO
_SYSSMU16$ ONLINE UNDO
_SYSSMU17$ ONLINE UNDO
_SYSSMU18$ ONLINE UNDO
_SYSSMU19$ ONLINE UNDO
_SYSSMU20$ ONLINE UNDO

21 rows selected.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

6. RUN DBVerify utility

Run DBVerify for all the datafiles to ensure the datafile’s do not have any corruptions.

oracle@stevux1185:JSDRPW01> dbv file=/u03/oradata/JSDRPW01/system/d1/system_01.dbf blocksize=8192 feedback=100

DBVERIFY: Release 10.2.0.4.0 - Production on Tue May 11 12:31:01 2010

Copyright (c) 1982, 2007, Oracle. All rights reserved.

DBVERIFY - Verification starting : FILE = /u03/oradata/JSDRPW01/system/d1/system_01.dbf
……………………………………………………………………..
……………………………………………………………………..
……………………………………………………………………..
……………………………………………………………………..
……………………………………………………………………..
……………………………………………………………………..
……………………………………………………………………..
………………………………………………………………..

DBVERIFY - Verification complete

Total Pages Examined : 64000
Total Pages Processed (Data) : 21734
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 8196
Total Pages Failing (Index): 0
Total Pages Processed (Other): 9244
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 24826
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 254681191 (0.254681191)

oracle@stevux1185:JSDRPW01> dbv file=/u03/oradata/JSDRPW01/system/d1/system_01.dbf logfile=dbvsystem01dbf.log blocksize=8192 feedback=100

oracle@stevux1185:JSDRPW01> dbv file=/u07/oradata/JSDRPW01/data/d1/wms_data_01.dbf logfile=datadbv01dbf.log blocksize=8192 feedback=100

oracle@stevux1185:JSDRPW01> dbv file=/u07/oradata/JSDRPW01/data/d1/wms_data_02.dbf logfile=datadbv02dbf.log blocksize=8192 feedback=100

oracle@stevux1185:JSDRPW01> dbv file=/u07/oradata/JSDRPW01/data/d1/wms_data_03.dbf logfile=datadbv03dbf.log blocksize=8192 feedback=100

oracle@stevux1185:JSDRPW01> dbv file=/u07/oradata/JSDRPW01/data/d1/wms_data_04.dbf logfile=datadbv04dbf.log blocksize=8192 feedback=100

oracle@stevux1185:JSDRPW01> dbv file=/u07/oradata/JSDRPW01/data/d1/wms_DATA_05.dbf logfile=datadbv05dbf.log blocksize=8192 feedback=100

oracle@stevux1185:JSDRPW01> dbv file=/u03/oradata/JSDRPW01/sysaux/d1/sysaux_01.dbf logfile=sysaux01dbvdbf.log blocksize=8192 feedback=100

oracle@stevux1185:JSDRPW01> dbv file=/u07/oradata/JSDRPW01/tblsync/d1/wms_tblsync_01.dbf logfile=tblsync1dbvdbf.log blocksize=8192 feedback=100

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License