Oracle FAQ Your Portal to the Oracle Knowledge Grid

Home -> Community -> Mailing Lists -> Oracle-L -> RE: Some rollback doubts

RE: Some rollback doubts

From: <>
Date: Thu, 12 Jun 2003 11:47:12 -0700
Message-ID: <>

Thanks KG, for your reply. Well, it whets my appetite for more.

This surprises me. All the documentation I have read so far tells me that multiple transactions cannot be write to the same rollback segment data block.

My first question was basically "well, if many transactions can write to an extent, then when a transaction "wraps" around to the first extent, why does it not write to the first extent if it has another active transaction?". I sort of found an answer to this at asktom: "A transaction can be allocated space in an extent that is also used by other transactions. The prohibition against entering an extent that has active update transactions in it applies only when the extent boundaries are crossed". Now, why is this prohibited?

As to the free extent pool, when do blocks get assigned and deallocated from this free pool? No pctfree algorithm here??? And if Oracle always cycles back to the first extent after writing to the last, would this free extent pool always have a block belonging to the first extent in it? From your reply, I deduce that the answer to my second question is that , my transaction could get assigned to any block in the free extent pool. This block could belong to the 1st extent or the 20th extent. ???

The reasons for this questions are:

I have one huge rollback segment, with extents sized at 500M each, with a possible maximum of 22 extents. A batch job has been failing with an "Unable to extend rollback segment" error. I find that there are users executing select statements across a link when this batch job is running. This select takes a TX lock on the rollback segment, and uses 1 block of undo space. The users never commit or rollback this select transactions. So, if theres one user executing a select and using the first extent of the rollback segment, then if my batch job started with writing into the 21st extent, it would only have 2 extents to write to. Thats about 10 Gb of free space that cannot be used.


                    Gopalakrishnan       To:     Multiple recipients of list ORACLE-L 
                    "                    cc:                                           
                    <[EMAIL PROTECTED]       Subject:     RE: Some rollback doubts     
                    Sent by:                                                           
                    [EMAIL PROTECTED]                                                  
                    01:55 PM                                                           
                    Please respond                                                     
                    to ORACLE-L                                                        


I am not sure which document you are referring here. If that documentation says more than one transaction can not use a rollback segment data block means, I would say the documentation is incorrect in this case. But this can not happen concurrently. IT can happen serially.

Each rollback segment's header will have something called free extent pool, which will link at least 5 undo segment blocks which have more than 400 bytes
of free space. These blocks will be used to store undo information for the subsequent transactions. This 'free extent pool' will be clearly visible in the segment header dumps.

You can dump the rollback segment header by using the alter system dump undo header 'undo_segment_name' command. However this free extent pool just keep 5 undo blocks with free space. I hope this answers both of your questions..

Best Regards,
K Gopalakrishnan

-----Original Message-----
Sent: Thursday, June 12, 2003 10:00 AM
To: Multiple recipients of list ORACLE-L

>From the docs : Many active transactions can write concurrently to a single
rollback segment--even the same extent of a rollback segment; however, each data block in a rollback segment's extent can contain information for only a single transaction.

  1. Now, when oracle writes to the last extent in the cycle, and sees that the first extent has an active transaction, it allocates a new extent. Well, why should it? Cant it write to the first extent?
  2. When a new transaction needs to use the rollback segment, and say it gets allocated to a rollback segment with a few other transactions, how does it decide which extent to use from the cycle of extents?


Please see the official ORACLE-L FAQ:

Please see the official ORACLE-L FAQ:

Fat City Network Services    -- 858-538-5051
San Diego, California        -- Mailing list and web hosting services
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).
Received on Thu Jun 12 2003 - 13:47:12 CDT

Original text of this message