Survey							
                            
		                
		                * Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
IT 21003 Database Administration Section 05 Rollback Segments: An Introduction  What are they? Space within a database used to store “before” images  Made up of extents and blocks (similar to data segments)  Consist of rollback entries   A rollback entry has the necessary information to undo the changes made by one transaction Rollback Segments: An Introduction  What are they used for?  Rollback of transactions  Read Consistency  Recovery Rollback Segments: Structure Rollback segments contain rollback entries, which consist of   Transaction ID of the transaction, which makes the change to the database  Block information about the affected blocks  The “before” image – an inverse of the transaction Rollback Segments: Structure Consist of extents and treated as a “ring of extents” for cyclic reuse  Extents may be freed up for “normal” use when the rollback segment is  Dropped Shrunk to its normal size  Each rollback segment requires a least two extents Rollback Segments: Structure The rollback entries require protection using the redo logs   They are stored within the database  Needed for rollback when recovering from media failure Rollback Segments: Usage  When are rollback segments required?  Deadlock or statement execution error  Rollback to a savepoint  Rollback of a transaction due to user request  Rollback of a transaction due to abnormal process termination  Rollback of uncommitted transactions on instance failure  Read-consistent snapshots – need old versions of data and index Rollback Segments: Usage  How big should they be?  Rollback segment sizing suffers a fundamental tension Short transactions – small rollback segments  Long transactions – large rollback segments  Rollback Segments: Requirements  How many?  The SYSTEM tablespace requires its own special rollback segment  At least one additional rollback segment is required for databases using more then one tablespace  The quantity depends entirely on the transaction traffic Rollback Segments: Requirements Oracles recommended number of rollback segments:  Number of concurrent transactions Recommended rollback segments Fewer than 16 4 Between 16 and 31 7 Greater than 31 5 but never more than 50 Rollback Segments: Public and Private  PUBLIC rollback segments  Used by any instance accessing a database in parallel server mode  Declared as public in Create Public Rollback Segment Once “claimed” by an instance, cannot be used by other instances  Rollback Segments: Public and Private  PRIVATE rollback segments  Limited for use by only one instance accessing the database  Explicitly listed in the parameter file and picked up by the instance on startup  Lie dormant if no instance specifies them in the parameter file Rollback Segments: Public and Private  The rollback_segments parameter  Example: rollback_segments = rbs_1, rbs_2  Default value is NULL, causing the instance to use only the SYSTEM rollback segment plus any available public rollback segments Rollback Segments: Usage  How are rollback segments acquired?  On startup, the instance consults the list of private rollback segments in the parameter file and acquires all those specified  If the number acquired does not satisfy the ratio: Transactions/Transactions_Per_Rollback_Segment 65/20 then Oracle attempts to acquire 4 rollback segments it attempts to acquire any PUBLIC rollback segments within the database until the ratio is reached If the ratio is not satisfied, the segments are used “as-is” Rollback Segments: Creating Rollback Segments  Create [Public] Rollback Segment rs_name  [Tablespace tablespacename]  [Storage ( [Initial n] [Next n] [Minextents n]  [Maxextents n] [Optimal n] ) ]; Rollback Segments: Creating Rollback Segments It is recommended to set INITIAL equal to NEXT in order to make all extents the same size   Size of extents should be  Small enough to minimize page faulting in the buffer cache  Large enough to minimize excessive recursive SQL due to dynamic allocation of space and to support read consistency  After creation, rollback segments must be altered to be brought online for use  Alter Rollback Segment rs_name Online; Rollback Segments: Guidelines Must have a minimum of two extents (preferably more) on creation   Set MINEXTENTS to a value between 8 and 20  MAXEXTENTS should be “high” to cater to large normal transactions Initial default value for MAXEXTENTS depends on the value of DB_BLOCK_SIZE  Transactions use rollback segments on an extentby-extent basis, so the value of INITIAL should be equal to NEXT Rollback Segments: Guidelines Use PRIVATE rollback segments when possible   PUBLIC rollback segments are mainly used in parallel server mode  Make a list of them in the parameter file  Cannot set a value for PCTINCREASE  It is set by Oracle to Zero Rollback Segments: Guidelines  Make all rollback segments the same size  Rollback segments allocated to transactions on a round-robin basis (Cyclic Reuse)  Could define on large rollback segment and manually direct large transactions to it  Include the following statement at the start of the transaction:  Set Transaction Use Rollback Segment rs_name; Rollback Segments: Guidelines  Size of rollback segment – a rule of thumb  On average, each rollback segment should be about 10 percent of the size of the largest table  So:  Total size of rollback segment = T  Number of Initial extents specified = n  Then size of each extent(s) = T/n Rollback Segments: Positioning Rollback segments are critical for normal running of a database   Loss of rollback segment(s) can interrupt database availability Rollback segments may be stored in any tablespace   SYSTEM rollback segment must be in the SYSTEM tablespace Could store all rollback segments in the SYSTEM tablespace  Rollback Segments: Positioning  Store a rollback segment in each tablespace  Balances I/O but makes every disk critical and is not recommended  Tablespaces with active rollback segments cannot be taken offline Store all rollback segments on a disk of their own this is the recommended way   Create a tablespace for rollback segments  Makes it easier to take tablespaces offline Rollback Segments: OPTIMAL Clause Your chance to specify an optimum working size for a rollback segment   OPTIMAL is the amount of residual space to which rollback segments will truncate when inactive extents are discovered by transactions Small values of OPTIMAL help to keep rollback segments small enough to fit in memory   Suitable for systems with high frequency of short transactions  Do not set OPTIMAL such that the rollback segments shrinks to below 8 to 20 extents Rollback Segments: OPTIMAL Clause Large values reduce the number of shrink and extend operations (Dynamic Space Allocation)   Suitable for large transactions or long-running queries v$rollstat – provides information about rollback segments  Rollback Segments: v$rollstat table Select *  From v$rollstat;   Contains information about:  Current size and average active size of rollback segment  Number of shrink and extend operations  Largest size to which the rollback segment has extended (represented by HWMSIZE known as the high watermark Rollback Segments: OPTIMAL Clause  Setting Guidelines for OPTIMAL Shrinks Avg Size Shrunk High High Periodic long transactions could cause this, set OPTIMAL higher until shrinks are low High Low OPTIMAL is too small (too many shrinks) Low Low If average active size = OPTIMAL then OPTIMAL is Ok else OPTIMAL is too large (not many shrinks being performed) Low High OPTIMAL is set correctly – Do Nothing Rollback Segments: Setting OPTIMAL Rollback segments can also be manually shrunk   Alter Rollback Segment rs_name Shrink To 2M; Do not set a value for OPTIMAL for the SYSTEM rollback segment  Rollback Segments: How Transactions Use them On initiation a transaction is allocated a rollback segment on a round-robin (cyclic reuse) basis   Once a rollback segment is allocated, the transaction can use no other  The transaction places its ID in a transaction table held in the header block of the rollback segment  Usual to have a number of rollback segments to prevent transactions from queuing and waiting for others to insert their IDs Rollback Segments: How Transactions Use them Each rollback segment has cyclically reusable extents and a head and tail pointer  The “Head” is the position at which the new rollback information is to be written  The “Tail” is the position of the oldest active data written by an uncommitted transaction (cannot yet be overwritten)   The Head cannot proceed past the Tail Rollback Segments: How Transactions Use them  A transaction writes rollback data into the rollback segment on an extent-by-extent basis  Starts writing into the current extent This is the extent containing the “Head” pointer When the extent fills – the head moves on to the next extent   If the next extent is not yet free (contains the tail), a new extent is allocated Extents can be shared by transactions, but not blocks within the extents  Inactive extents contain no active rollback entries from transactions  Rollback Segments: Removal of Extents  A rollback segment may shrink only when an extent fills and the Head is able to move into the next extent  At this point, further “Next” extents are investigated and if they are also inactive, they are deallocated from the rollback segment until the OPTIMAL size is reached  In this way server processes looking for free extents deallocate the oldest inactive extents first  This means it could be some time before the rollback segment actually shrinks Rollback Segments: Processing Rollback Segment Phase 1 Extent 1 Transaction 1 Transaction 2 Extent 4 Extent 2 Extent 3 Active Extent without space Active Extent with space Rollback Segments: Processing Rollback Segment Phase 2 Extent 1 Transaction 1 Transaction 2 Extent 4 Extent 2 Extent 3 Active Extent without space Active Extent with space Rollback Segments: Processing Rollback Segment Phase 3, Option 1 Available Extents Extent 2 Transaction 3 Transaction 4 Extent 1 Extent 3 Extent 1 has become inactive Extent 4 Active Extent without space Active Extent with space Rollback Segments: Processing Rollback Segment Phase 3, Option 2 Extent 1 remains active No Available Extents Extent 1 Transaction 3 Extent 5 Extent 2 Transaction 4 Extent 4 Active Extent without space Active Extent with space Extent 3 Rollback Segments: Dropping  Statement  Drop [Public] Rollback Segment rs_name;  Performed when the rollback segment extents have caused free-space fragmentation, or when it needs to be relocated  All storage is returned to free space  The rollback segment must be Offline  Remember to remove its name from the parameter file Rollback Segments: Manipulation To set a rollback segment offline (unavailable for transactions)   Alter [Public] Rollback Segment rs_name Offline;  The segment will not actually go offline until all its active transactions have completed The SYSTEM rollback segment cannot be taken offline  Manipulation is similar to tables  Rollback Segments: “Snapshot Too Old” Error This error normally occurs when a longrunning query needs to access rollback information to obtain a consistent view of the data   Oracle always presents queries with a consistent set of data from a combination of data in the database tables and rollback segments  Transactions are given priority in the use of rollback segments  A transaction can overwrite data in inactive extents even if that information may be needed to construct a read-consistent view for queries Rollback Segments: “Snapshot Too Old” Error This is the reason for maintaining a reasonable number of extents in a rollback segment   Avoids a rollback segment wrapping around too quickly on the extents  When the “Before Image” doesn’t exists Questions?