Excessive undo segment extension

I am using the automatic UNDO feature in 10g.
The UNDO tablespace size is 3gb with autoextend set ON.
Undo retention is set at 900.
I am attempting to update 1M+ records contained in a global temporary table using FORALL .. UPDATE method.
About 2 minutes into the process, the performance degrades dramatically as undo segment extension alerts eventually make the application freeze.
Other io alerts ( direct path write temp, busy buffer waits, etc ) also appear.
I notice that the UNDO tablespace has an init extent of about 131k and additional extents set at 64k.
These seem small for my needs.
Can someone please advise ?
Thanks !

Can you check from AWR to investigate what waited event happended?
http://www.oracle-base.com/articles/10g/AutomaticWorkloadRepository10g.php
Use EM to check waited event.
If you have another session else accessed this table often, Perhaps you need commit ... often (example: commit every 100000 rows).
If you found redo log often switch log ... when you update ...
you can use "nologging" option to help
update table_name nologging set ....Anyway if you think the problem was about undo... you should found error in alert log or your session...(ora-01555)

Similar Messages

  • SMON ABOUT TO RECOVER UNDO SEGMENT s messages in alert log

    Problem
    ======
    There are lots of messages appearing in alert log of the following form:
    SMON: about to recover undo segment %s
    SMON: mark undo segment %s as available
    Reason
    ======
    When the recovery is going on after a abnormal shutdown. Cause These errors do not indicate rollback segment corruption. In oracle8i, this may becoz of problem with the "rollback_segments" parameter in the init.ora. where as in oracle9i, When the instance is shutdown, during the next startup instance recovery needs to take place.
    In AUM we do not have any control over which undo segments will brought online after the instance startup.When SMON finds such offline undo segments with transactions needing recovery ,then it does what is intended to do recovery.
    Solution
    ======
    with oracle8i, we need to cross check rollback_segments" parameter in the init.ora
    with oracle9i,
    first note down segment from SMON: mark undo segment %s as available
    sqlplus "/ as sysdba"
    alter session set "_smu_debug_mode"=4;
    alter rollback segment <offline segment name> online;
    e.g. alter rollback segment "_SYSSMU11$" online;
    Where 11 is the number that is appearing in the messages in the alert log.

    What's the point duplicate metalink doc here,
    SMON: ABOUT TO RECOVER UNDO SEGMENT %s messages in alert log
    Doc ID: Note:266159.1
    besides it's violation of Oracle support service contract.

  • Recover Undo Segment

    Hi,
    I am getting the following error in Alert Log file.
    SMON: about to recover undo segment 4
    SMON: mark undo segment 4 as needs recovery
    SMON: about to recover undo segment 7
    SMON: mark undo segment 7 as needs recovery
    Can any buddy tell us that how can we fix this.
    Thanks in Advance
    Hashim

    Hi
    The output of the query is
    1     SYSTEM     SYS     SYSTEM     0     1     ONLINE
    2     _SYSSMU1$     PUBLIC     UNDOTBS1     1     2     ONLINE
    3     _SYSSMU2$     PUBLIC     UNDOTBS1     2     2     ONLINE
    4     _SYSSMU3$     PUBLIC     UNDOTBS1     3     2     ONLINE
    5     _SYSSMU4$     PUBLIC     UNDOTBS1     4     2     NEEDS RECOVERY
    6     _SYSSMU5$     PUBLIC     UNDOTBS1     5     2     ONLINE
    7     _SYSSMU6$     PUBLIC     UNDOTBS1     6     2     ONLINE
    8     _SYSSMU7$     PUBLIC     UNDOTBS1     7     2     NEEDS RECOVERY
    9     _SYSSMU8$     PUBLIC     UNDOTBS1     8     2     ONLINE
    10     _SYSSMU9$     PUBLIC     UNDOTBS1     9     2     ONLINE
    11     _SYSSMU10$     PUBLIC     UNDOTBS1     10     2     ONLINE
    12     _SYSSMU11$     PUBLIC     UNDOTBS1     11     2     ONLINE
    13     _SYSSMU12$     PUBLIC     UNDOTBS1     12     2     ONLINE
    By the way there is no trace file assoicated in Alert Log file.
    Thanks
    Hashim

  • Undo segment recovery wait

    Hi All;
    In an 10gR2 physical standby dataguard environment, i open standby db READ-ONLY for extraction. After a performance issue we've seen "undo segment recovery" wait events on database.
    The definition of "undo segment recovery" wait event:
    +"PMON is rolling back a dead transaction. The wait continues until rollback finishes."+
    Because this is a READ-ONLY db, isn't it strange to wait for rollback operation?
    Thanks
    Emre

    Hi,
    Apart from this most of the other things you should be able to do.
    INSERT = change was caused by an insert statement
    UPDATE = change was caused by an update statement
    DELETE = change was caused by a delete statement
    DDL = change was caused by a DDL statement
    START = change was caused by the start of a transaction
    COMMIT = change was caused by the commit of a transaction
    ROLLBACK = change was caused by a full rollback of a transaction
    LOB_WRITE = change was caused by an invocation of DBMS_LOB.WRITE
    LOB_TRIM = change was caused by an invocation of DBMS_LOB.TRIM
    LOB_ERASE = change was caused by an invocation of DBMS_LOB.ERASE
    SELECT_FOR_UPDATE = operation was a SELECT FOR UPDATE statement
    SEL_LOB_LOCATOR = operation was a SELECT statement that returns a LOB locatorAm not sure why you would be interested to know what you other features(except from reading) you would like to do on read-only database.
    Regards
    Anurag

  • Undo file corruption(Undo segments)

    Hello Friends
    My database in archivelog mode(Oracle 9i). What if because of media failure my undo segments got corrupted ?
    Can I recover the database upto failer point ?
    Regards
    Sunil Kumar

    As Maran mentioned already that if you have sufficient good backups, there wont be any issues with the recovery. In addition to this, search over metalink for the use of the event *10015*. This would help to identify the corrupted undo segments.
    HTH
    Aman....

  • Awr report showing "Undo segment recovery" in top 1st wait event.

    Hi all.
    Today evening oracle.exe is hitting 100% cpu in windows server 2003.
    In the awr report "undo segment recovery" listed in the top 5 wait event (1st place) and
    also in the enterprise manager it shows the details like,
    ACTION 1:
    Action Investigate the cause for high "undo segment recovery" waits. Refer to Oracle's "Database Reference" for the description of this wait event. Use given SQL for further investigation.
    Rationale The SQL statement with SQL_ID "0x63ctfjb1m1j" was found waiting for "undo segment recovery" wait event.
    SQL Text UPDATE PF_SubjectVEChapterPage SET NeedsRecalcState = NULL, NeedsUnsignState = ...
    SQL ID 0x63ctfjb1m1j
    Rationale The SQL statement with SQL_ID "0x6uvufcw5umh" was found waiting for "undo segment recovery" wait event.
    SQL Text
    SQL ID 0x6uvufcw5umh
    Rationale The SQL statement with SQL_ID "2dvmt5mhr3m10" was found waiting for "undo segment recovery" wait event.
    SQL Text UPDATE PF_SubjectVEChapterPage SET NeedsRecalcState = NULL, NeedsUnsignState = ...
    SQL ID 2dvmt5mhr3m10
    Rationale The SQL statement with SQL_ID "gx5pummu20jzb" was found waiting for "undo segment recovery" wait event.
    SQL Text UPDATE PF_SubjectVEChapterPage SET NeedsRecalcState = NULL, NeedsUnsignState = ...
    SQL ID gx5pummu20jzb
    Rationale The SQL statement with SQL_ID "1rxk3vt41zg1u" was found waiting for "undo segment recovery" wait event.
    SQL Text
    SQL ID 1rxk3vt41zg1u
    ACTION 2:
    Investigate the cause for high "undo segment recovery" waits in Module "dllhost.exe".
    ACTION 3:
    Investigate the cause for high "undo segment recovery" waits in Service "SYS$USERS".
    I'm not sure what action i need to take exactly.Please provide your valuable suggestions to proceed further.
    Thanks, Muhammed Thameem.

    http://download.oracle.com/docs/cd/A97630_01/server.920/a96536/apa5.htm
    "undo segment recovery
    PMON is rolling back a dead transaction. The wait continues until rollback finishes.
    Wait Time: 3 seconds
    Parameters:
    segment# -> The ID of the rollback segment that contains the transaction that is being rolled back
    tx flags -> The transaction flags (options) set for the transaction that is being rolled back?

  • Undo segment & Rollback segment

    Hi,
    What is the difference between Undo segment & Rollback segment?Is it a standard practice of creating roll back segments for each tablespace?
    Regards,
    Cherry

    What is the difference between Undo segment & Rollback segment?
    Undo Mode
    Undo mode provides a more flexible way to migrate from manual undo management to automatic undo management. A database system can run in either manual undo management mode or automatic undo management mode. In manual undo management mode, undo space is managed through rollback segments. In automatic undo management mode, undo space is managed in undo tablespaces. To use automatic undo management mode, the database administrator needs only to create an undo tablespace for each instance and set the UNDO_MANAGEMENT initialization parameter to AUTO. You are strongly encouraged to run in automatic undo management mode.
    Is it a standard practice of creating roll back segments for each tablespace?See above and http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14220/logical.htm#sthref449

  • Undo segments won't age out

    on my Oracle 11.2.0.2, I have undo tablespace, and db init settings like:
    recyclebin=off
    flasbach_on=off
    undo_retention=1200
    undo_management=AUTOI have a table aa_test with 1 million rows..
    after I invoke a sql like:
    update aa.test set n_string='aaa';
    commit;undo segment just do not want to be freed..
    I created undo tablespace using:
    CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE
      '/opt/oracle/oradata/bongo/undotbs01.dbf' SIZE 200M reuse AUTOEXTEND ON NEXT 50M MAXSIZE 10240M
    ONLINE
    RETENTION NOGUARANTEE
    BLOCKSIZE 8K
    FLASHBACK OFF;

    sql statement is:
    update aa_test set n_string='abc';
    commit;before update undo tablespace looks like:
    SQL> select usn, rssize from v$rollstat;
           USN     RSSIZE
          0     385024
         11     122880
         12     122880
         13     122880
         14     122880
         15     122880
         16     122880
         17     122880
         18     122880
         19     122880
         20     122880after updates (commit and logout/logon)
    SQL> select usn, rssize from v$rollstat;
           USN     RSSIZE
          0     385024
         11     122880
         12     122880
         13     122880
         14     122880
         15     122880
         16  176152576
         17     122880
         18     122880
         19     122880
         20     122880

  • SQL to get who is using the UNDO segments

    Hello I need SQL to grab who is using the UNDO segments. Is there anything out there to allow me to do this. We want to track down which user is running our database UNDO segments up. We think we know who is doing this by monitoring top sql but managment wants more proof as usual. Any help would be great.

    When I run the sql that you gave me it comes back with zero rows. however, when I run
    SELECT rn.NAME "Rollback Segment", rs.rssize / 1024 "Size (KB)",
    rs.gets "Gets", rs.waits "Waits", (rs.waits / rs.gets) * 100 "% Waits",
    rs.shrinks "# Shrinks", rs.EXTENDS "# Extends"
    FROM SYS.v_$rollname rn, SYS.v_$rollstat rs
    WHERE rn.usn = rs.usn;
    I get
    Rollback Segment Size (KB) Gets Waits % Waits # Shrinks # Extends
    SYSTEM 376 1525 0 0 0 0
    _SYSSMU1$                         2012208    1152908          0          0         17        579
    _SYSSMU2$                         1845040    1098021          1 9.10729394         16        555
    _SYSSMU3$                          558840     980111         32 0.00326493         13        482
    _SYSSMU4$                         2789808    1280846        152 0.01186715         17        685
    _SYSSMU5$                         3875944    1385711        113 0.00815465         19        787
    _SYSSMU6$                          298728    1427953          4 0.00028012         27        825
    _SYSSMU7$                          990504    1505872          3 0.00019922         21        867
    _SYSSMU8$                         2122480    1135552          2 0.00017612         21        805
    _SYSSMU9$                         2344888     627282          4 0.00063767         16        421
    _SYSSMU10$                         811888    2323871         53 0.00228067         52        823
    11 rows selected
    how do i see who holds those segments.

  • Drop Undo Segments - URGENT HELP

    Hi,
    I am currently doing a DR activity.
    My database is in version 10.2.0.3.0 and the platform is Windows 2003 server.
    When I try to startup my database, the database gets started, but gets crashed immediately after few seconds.
    The PMON and DBWR background processes are getting crashed.
    ORA-00472: PMON process terminated with error
    The alert log gives the below information.
    Errors in file d:\oracle\admin\aspplmp1\bdump\aspplmp1_smon_5280.trc:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-00607: Internal error occurred while making a change to a data block
    ORA-00600: internal error code, arguments: [4194], [60], [59], [], [], [], [], []
    Thu Jun 24 22:22:43 2010
    Errors in file d:\oracle\admin\aspplmp1\bdump\aspplmp1_smon_5280.trc:
    ORA-00600: internal error code, arguments: [4194], [26], [30], [], [], [], [], []
    Doing block recovery for file 2 block 2026
    Block recovery from logseq 8749, block 141 to scn 10598515167830
    Thu Jun 24 22:22:45 2010
    Recovery of Online Redo Log: Thread 1 Group 3 Seq 8749 Reading mem 0
      Mem# 0: D:\ORACLE\ORADATA\ASPPLMP1\REDO03A.RDO
      Mem# 1: D:\ORACLE\ORADATA\ASPPLMP1\REDO03B.RDO
    Block recovery stopped at EOT rba 8749.142.16
    Block recovery completed at rba 8749.142.16, scn 2467.2830848597
    Doing block recovery for file 2 block 41
    Block recovery from logseq 8749, block 141 to scn 10598515167828
    Thu Jun 24 22:22:45 2010
    Recovery of Online Redo Log: Thread 1 Group 3 Seq 8749 Reading mem 0
      Mem# 0: D:\ORACLE\ORADATA\ASPPLMP1\REDO03A.RDO
      Mem# 1: D:\ORACLE\ORADATA\ASPPLMP1\REDO03B.RDO
    Block recovery completed at rba 8749.142.16, scn 2467.2830848597
    Thu Jun 24 22:22:45 2010
    Errors in file d:\oracle\admin\aspplmp1\bdump\aspplmp1_smon_5280.trc:
    ORA-01595: error freeing extent (2) of rollback segment (3))
    ORA-00607: Internal error occurred while making a change to a data block
    ORA-00600: internal error code, arguments: [4194], [26], [30], [], [], [], [], []
    Thu Jun 24 22:14:09 2010
    Errors in file d:\oracle\admin\aspplmp1\bdump\aspplmp1_q000_1868.trc:
    ORA-00600: internal error code, arguments: [4193], [10635], [10638], [], [], [], [], []
    ORA-00472: PMON  process terminated with errorWhen I checked metalink, I found a note: 8240762.8, which says that its a bug.
    But the workaround they have given is to DROP UNDO SEGMENTS. How do I do that? Could someone please help me out?
    OR is there a different way to solve this issue?
    Thanks!

    Hi.There you see ORA-00600: internal error code internal error,this is serious error you need open SR and report Oracle Support.But you can try following tasks to resolving this problem.
    1.Backup your database.
    2.Create new undo tablespace(for example create undo tablespace <new_undo_ts> ....);
    3.If you use spfile then create pfile from spfile as create pfile='location' from spfile='spfilelocation'
    4.Change in getting pfile undo_management=manual,undo_tablespace=<new_undo_ts>
    5.startup database using this pfile as startup pfile='pfilelocation'
    6.drop tablespace <old_undo_tsname>;
    7.Change undo_management=auto in pfile and create spfile from pfile again.

  • UNDO Segment in Needs Recovery Mode

    Hi,
    1) I created a different UNDO Tablespace and point UNDO_TABLESPACE to it.
    2) The i made the UNDO Tablespace OFFLINE.
    3) When i query the status column of dba_rollback_segs it displays that one UNDO Segment needs recovery.
    4) When i query v$datafile to find the status of the datafiles associated with the UNDO Segment it displays that all the data files are OFFLINE.
    SQL> select segment_name,status,tablespace_name from dba_rollback_segs where tablespace_name like 'UNDO%';
    SEGMENT_NAME STATUS TABLESPACE_NAME
    SYSSMU11580673410$ ONLINE UNDO_TS
    SYSSMU1064169346335$ NEEDS RECOVERY UNDO_TBS
    SYSSMU107348590359$ OFFLINE UNDO_TBS
    SQL> Select status ,name,file# from v$datafile where ts# in (Select ts# from v$tablespace where name='UNDO_TBS');
    STATUS NAME FILE#
    OFFLINE /x1/oradata/db1/undo_tbs_05.dbf 13
    OFFLINE /x1/oradata/db1/undo_tbs_06.dbf 14
    OFFLINE /x2/oradata/db1/undo_tbs_02.dbf 20
    OFFLINE /x2/oradata/db1/undo_tbs_03.dbf 21
    OFFLINE /x1/oradata/db1/undo_tbs_04.dbf 22
    OFFLINE /x2/oradata/db1/undo_tbs_01.dbf 27
    The dabase is in noarchivelog mode and the version is 11.2.0.2.0.
    Please suggest what should i do. I am unable to drop the old UNDO_TBS.

    I tried doing the following ( but it simply doesnot work)
    1) set undo_management='MANUAL' and OFFLINE_ROLLBACK_SEGMENTS=_SYSSMU106 in init.ora
    2) Did a clean shutdown using SHUTDOWN IMMEDIATE and then STARTUP
    3)
    SQL> select segment_name,status,tablespace_name from dba_rollback_segs where tablespace_name like 'UNDO%';
    SEGMENT_NAME STATUS TABLESPACE_NAME
    SYSSMU11580673410$ ONLINE UNDO_TS
    SYSSMU1064169346335$ NEEDS RECOVERY UNDO_TBS
    SYSSMU107348590359$ OFFLINE UNDO_TBS
    SQL> drop rollback segment "_SYSSMU106";
    Rollback segment dropped.
    SQL> select segment_name,status,tablespace_name from dba_rollback_segs where tablespace_name like 'UNDO%';
    SEGMENT_NAME STATUS TABLESPACE_NAME
    SYSSMU11580673410$ ONLINE UNDO_TS
    SYSSMU1064169346335$ NEEDS RECOVERY UNDO_TBS
    SYSSMU107348590359$ OFFLINE UNDO_TBS
    SQL> drop tablespace UNDO_TBS including contents and datafiles;
    drop tablespace UNDO_TBS including contents and datafiles
    ERROR at line 1:
    ORA-01548: active rollback segment '_SYSSMU106_4169346335$' found, terminate
    dropping tablespace
    SQL> Select status ,name,file# from v$datafile where ts# in (Select ts# from v$tablespace where name='UNDO_TBS');
    STATUS NAME FILE#
    OFFLINE /x1/oradata/db1/undo_tbs_05.dbf 13
    OFFLINE /x1/oradata/db1/undo_tbs_06.dbf 14
    OFFLINE /x2/oradata/db1/undo_tbs_02.dbf 20
    OFFLINE /x2/oradata/db1/undo_tbs_03.dbf 21
    OFFLINE /x1/oradata/db1/undo_tbs_04.dbf 22
    OFFLINE /x2/oradata/db1/undo_tbs_01.dbf 27
    Edited by: SID3 on Mar 21, 2012 4:41 AM

  • If undo segments got corrupted

    if undo segments got corrupted thn wht will be the database position and how to recover from it

    Dear 782191,
    Like Aman.... has mentioned in the previous post, you may recover it
    OR
    I think you can also try to drop it if you can not recover it. Please refer to the following link for how to drop an undo segment from the undo tablespace or drop the undo tablespace entirely for the new and default undo tablespace;
    http://arjudba.blogspot.com/2008/08/ora-01548-active-rollback-segment.html
    Bear in mind that when you have chosen the "drop undo tablespace" path rather than recovering the undo segment, the undo information will be written into the system tablespace. The database will maintain its current operational jobs and create undo in the system tablespace but it is not recommended by the Oracle.
    Hope That Helps.
    Ogan

  • Automatic Undo Management - Shrink Undo Segments

    Hello guys,
    i have a question regarding the automatic undo management and some large transactions.
    So lets take the following example:
    1 transaction with a lot of updates (round about 20.00000 entries) . After the update a commit was executed.
    Now the corresponding undo segment was blown up to 640 MB.
    Now my questions:
    Will this segment be shrinked after it is not needed anymore (STATUS = EXPIRED)?
    If not and another transaction needs some undo and activates this segment again.. 640 MB are going online again... but the transaction now only needs some KB.
    I know the algorithm if the undo segment needs to be extended (metalinknote #413732.1).. but what is happening to "big" segements if they are not needed anymore ... are the deallocated/shrinked after a time period?
    Regards
    Stefan

    Here is a little example of a smaller undo segment.. which shows my doubt:
    SELECT SEGMENT_NAME,STATUS FROM DBA_ROLLBACK_SEGS WHERE SEGMENT_NAME = '_SYSSMU13$';
    SEGMENT_NAME                   STATUS          
    _SYSSMU13$                     OFFLINE      
    SELECT SEGMENT_NAME, EXTENT_ID, BYTES, STATUS from DBA_UNDO_EXTENTS WHERE SEGMENT_NAME = '_SYSSMU13$';
    SEGMENT_NAME                   EXTENT_ID              BYTES                  STATUS   
    _SYSSMU13$                     0                      65536                  EXPIRED  
    _SYSSMU13$                     1                      65536                  EXPIRED  
    _SYSSMU13$                     2                      8388608                EXPIRED  
    _SYSSMU13$                     3                      8388608                EXPIRED  
    _SYSSMU13$                     4                      8388608                EXPIRED  
    _SYSSMU13$                     5                      8388608                EXPIRED  
    _SYSSMU13$                     6                      8388608                EXPIRED  
    _SYSSMU13$                     7                      8388608                EXPIRED  
    _SYSSMU13$                     8                      8388608                EXPIRED  
    _SYSSMU13$                     9                      8388608                EXPIRED  
    _SYSSMU13$                     10                     8388608                EXPIRED  
    _SYSSMU13$                     11                     67108864               EXPIRED   If the other guys are correct, the extents of undo segment _SYSSMU13$ should be deallocated... but they still persist.
    Regards
    Stefan

  • Difference between roll back and undo segment.

    Hi ,
    Oracle 10.2.0.1.0
    whats the difference between roll back and undo segemnt ? are they one and same as per changing version of oracle ? please help

    Hi,
    Both will do the same functionality,but in oracle 9i they made it simplify ,because if u are using rollback segments ,u need to put them online in init.ora and u need to take care space management etc.
    so in oracle 9i they introduced undo tablespaces on that u can creage undo segments and space management will be take care by oracle managed files ,so its reduces the burden of dba
    Regards,
    Simma....

  • V$GCSPFMASTER_INFO shows only undo segments even if _gc_affinity_time 10

    Hi,
    I'm on 4-node Linux RAC 10.2.0.3 , recently I've notice that only undo segments are showed in V$GCSPFMASTER_INFO
    I know that because object_id is like 4294950913 and so .
    Thats strange because I'm expecting other objects to be remastered, there is :
    _gc_affinity_time                             10
    _gc_affinity_limit                            50
    and I can see :
    DRM(29) ignoring dissolve of 18504741
    * kjdrchkdrm: found an RM request in the request queue
      Dissolve pkey 18504742
    DRM(29) ignoring dissolve of 18504742
    * kjdrchkdrm: found an RM request in the request queue
      Dissolve pkey 18504743
    DRM(29) ignoring dissolve of 18504743
    * kjdrchkdrm: found an RM request in the request queue
      Dissolve pkey 18504744in lmd0 trace .
    So how can I check DRM is on or off ?:)
    Regards.
    GregG

    Hi,
    I'm on 4-node Linux RAC 10.2.0.3 , recently I've notice that only undo segments are showed in V$GCSPFMASTER_INFO
    I know that because object_id is like 4294950913 and so .
    Thats strange because I'm expecting other objects to be remastered, there is :
    _gc_affinity_time                             10
    _gc_affinity_limit                            50
    and I can see :
    DRM(29) ignoring dissolve of 18504741
    * kjdrchkdrm: found an RM request in the request queue
      Dissolve pkey 18504742
    DRM(29) ignoring dissolve of 18504742
    * kjdrchkdrm: found an RM request in the request queue
      Dissolve pkey 18504743
    DRM(29) ignoring dissolve of 18504743
    * kjdrchkdrm: found an RM request in the request queue
      Dissolve pkey 18504744in lmd0 trace .
    So how can I check DRM is on or off ?:)
    Regards.
    GregG

Maybe you are looking for