Oracle FAQ Your Portal to the Oracle Knowledge Grid

Home -> Community -> Mailing Lists -> Oracle-L -> Re: Unable to really switch undo tablespace

Re: Unable to really switch undo tablespace

From: Tanel Põder <>
Date: 2005-12-21 21:06:27
Message-id: 03c901c6066a$09c7b1e0$b0bc21c8@porgand


I think the issue here is that some of the datablocks haven't been cleaned up after transactions in those have completed. So when you read such block, it has some rows in it with lock bytes set, ITLs pointing to old undo segments.

When the undo segments still exist in data dictionary (despite their tablespace is online), Oracle wants to read their headers to see whether the transactions corresponding to uncleaned blocks are committed.

The solutions be:

  1. drop old undo tablespace - then Oracle knows that the transactions have finished (as you couldn't drop the undo segments otherwise) or
  2. performn delayed block cleanout on all blocks which could be unclean, having references back to old undo tablespace. This should be done both for tables and indexes. You could either force a full table scan on all suspect tables and fast full index scan on all of their indexes - or you could do an analyze on all those segments (btw, make sure that you analyze 100% of these then, not just a sample). This should result in cleaning up all datablocks.


>I had the same problem some time ago. The solution, and IIRC I found it
>even on Metalink, was to offline and then drop the old undo tablespace. I
>know, it sounds a bit unnerving. I tried the same as you - offline the
>tablespace for a while, THEN drop it. But as I said, I ran into the same
>problem that some transactions attempted to use the offlined OLD undo
>tablespace - even after a restart. In order to feel better about it I
>dropped the old undo tablespace immediately after a startup where I could
>be reasonably sure that no transactions would be active yet.
> Giovanni Cuccu wrote:
>> Hi all,
>> I'm facing a problem with undo tablespace with oracle
>> running on linux redhat 3.
>> Due to an error a procedure has consumed a lot of undo space, causing
>> the growth of the undo tablespace datafile up to 16gb (the datafile
>> was in autoextend mode). Now I'd like to go back to the previous
>> situation where the undo tablespace was 4gb.
>> I created a new undo, namely undotbs_02, and made the switch as
>> described in the manual via
>> the switch completed but when I tried (some weeks later and after a
>> clean shutodown) to offline the orginal one some of the programs began
>> to report
>> "unable to read datafile 2..."
>> Needless to say datafile 2 is the old undo tablespace.
>> If I query the dba_rollback_segs I can see all the rollback segments
>> belonging to the old undo tablespace as offline, the dba_undo_extents
>> show the status as unexpired.
>> I already shutdown immediate the database, after the switch and server
>> days later, is there anything I can do to get out of this enpasse?
>> I already opened a tar (now SR) but until now I didn't received any
>> useful suggestion.
>> Thanks to all,
>> Giovanni
>> --
>> --------------------------------------------------------------------
>> Another free oracle resource profiler
>> Now version 0.9
>> --
> --
> Regards
> Wolfgang Breitling
> Centrex Consulting Corporation
> --

Received on Wed Dec 21 2005 - 21:06:27 CST

Original text of this message