Manual Rollback Segment
Oracle Tips by Burleson
If you are in pre-9i databases, or just like
to practice all those hard-earned rollback segment management skills
you needed in previous Oracle releases, you can manage the UNDO (read
rollback) segments manually. All you need to do is set the
initialization parameter UNDO_MANAGEMENT to MANUAL (or don't set it at
all) and poof! You are back in pre-9i behavior.
The following initialization parameters
control rollback segment behavior in pre-9i or in 9i with manual UNDO
UNDO_MANAGEMENT. Must be left unset or
set to MANUAL.
ROLLBACK_SEGMENTS. A list of all
private rollback segments to be brought online on instance startup.
TRANSACTIONS. Must be set to the number
of expected transactions if public rollback segments are used; usually
this value is automatically set to 1.1*PROCESSES, so set PROCESSES
instead of manually setting TRANSACTIONS.
to the maximum number of concurrent transactions that will be allowed
to access a single rollback segment; should usually equal the
MINEXTENTS for a public rollback segment. The calculation:
MAX_ROLLBACK_SEGMENTS. Sets the maximum
rollback segments that can be brought online for any instance. This
defaults to the above ratio for public rollback segments, 30 for
private rollback segments, and requires a database bounce to increase
The following subsections discuss rollback
segment management for manual mode.
Creating Rollback Segments
Manually managed rollback segments are created
using the CREATE command. The format for this command follows.
[PUBLIC] ROLLBACK SEGMENT rollback name
TABLESPACE tablespace name
STORAGE storage clause;
Rollback name is the name for the rollback
segment; this name must be unique.
Tablespace name is the name of the tablespace
where the segment is to be created.
STORAGE clause specifies the required
storage parameters for the rollback segment. It is strongly suggested
that the following guidelines be used for this:
INITIAL = NEXT. For an operating
database, I usually recommend that the dba_rollback_segs and
v$rollstat views be used to determine the settings for INITIAL, NEXT,
and OPTIMAL, setting INITIAL=NEXT and both equal to the multiple of
the average transaction size as reported in the aforementioned views.
MINEXTENTS = 2 (default on CREATE
ROLLBACK). Oracle suggests this be set to 20; however, I believe
it should be set based on your database usage characteristics. I
generally shoot for four transactions per rollback segment. Remember,
only DML transactions and some DDL (that result in tables in the data
dictionary receiving updates) require rollback segments.
MAXEXTENTS. A calculated maximum based
on the size of the rollback segment tablespace, the size of rollback
segments extents, and the number of rollback segments.
OPTIMAL. Reflects the size to
which the system will restore the rollback segment after it has been
extended by a large transaction. Usually, I set it to MINEXTENTS
multiplied by the initial/next values. Another method is to set
OPTIMAL as the average of the maximum transaction size times a
multiple such as 1.25, as indicated in the dba_rollback_segs and
v$rollstat views, and then back-calculate MINEXTENTS.
When a rollback segment is created, it is not
online. To be used, it must be brought online using the ALTER ROLLBACK
SEGMENT name ONLINE; command, or the database must be shut down, the
INIT.ORA parameter ROLLBACK_SEGMENTS modified, and the database
Altering a Rollback Segment
The rollback segment can be altered using the
ALTER command. However, this can result in mismatched extent sizes, so
is not recommended. You cannot alter a rollback segment from public to
private or private to public; it must be dropped and re-created for
this type of change. The format of the command follows:
ROLLBACK SEGMENT name
SHRINK TO n K|M
ONLINE brings the rollback segment
OFFLINE takes the rollbacks segment
offline (after any transactions it has are completed).
STORAGE. This clause cannot
contain new values for INITIAL, MINEXTENTS, or PCTINCREASE (which is
not allowed for rollback segments).
SHRINK returns a rollback segment that
has expanded beyond its OPTIMAL setting to the OPTIMAL size or to the
Dropping a Rollback Segment
Periodically, the DBA will have to drop a
rollback segment. This is required when the rollback segment has
overextended due to a large transaction, has too many extents in
general, or a larger size is desired for all rollback segments. This
is accomplished through the DROP command. The format of this command
ROLLBACK SEGMENT name
A rollback segment must not be in use or
online, or it cannot be dropped. Once dropped, it must be removed from
the INIT.ORA - ROLLBACK_SEGMENT clause, or the database cannot be
Moving Database Files
Periodically, DBAs will need to move database
files, such as the SYSTEM tablespace datafiles or redo logs, from one
location to another. This is accomplished through the following
Shut down the database.
Use the operating system to copy the file(s) to their new
location. (On UNIX, don’t move them with the mv command; use cp or
Using SVRMGR, or SQLPLUS in Oracle8i, issue the CONNECT
INTERNAL or CONNECT SYS command to connect to the database.
Using SVRMGR, or SQLPLUS in Oracle8i, MOUNT the database, but
don’t OPEN it.
Issue the ALTER DATABASE command to rename the file.
ALTER DATABASE database name
RENAME DATAFILE 'OLD FILE NAME' TO 'NEW FILE NAME';
Shut down and restart the database.
Use SVRMGR or SQLPLUS to look at the view DBA_DATA_FILES to be
sure the file is renamed.
Delete the old file via the appropriate operating system
command. (Be sure the database is started before you delete the file;
if the database is running, it will prevent you from deleting files
that are still active on VMS and NT. In UNIX, use the “fuser” command
against the file to see if it is active.)
Use of the ALTER SYSTEM Command
The ALTER SYSTEM command is used to
dynamically alter the Oracle instance under an Oracle7, Oracle8,
Oracle8i or Oracle database. The ALTER SYSTEM command allows the
following system-level items to be modified:
* Set or change resource limits.
* Create or terminate shared server or
* Switch redo log groups.
* Perform a checkpoint.
* Verify data file access.
* Restrict login to users with RESTRICTED
SESSION privilege (replaces DBA mode).
* Perform distributed recovery in single
* Disable distributed recovery.
* Manually archive redo logs or enable or
disable automatic archiving.
* Clear the shared pool in the SGA.
* Terminate a session.
The ALTER SYSTEM command allows the DBA much
greater control over the Oracle environment than was possible in
ALTER SYSTEM Command Format
The ALTER SYSTEM command’s format follows:
CHECK DATAFILES [GLOBAL|LOCAL]
ENABLE|DISABLE RESTRICTED SESSION
ENABLE|DISABLE DISTRIBUTED RECOVERY
KILL SESSION 'N1,N2'
DISCONNECT SESSION 'N1,N2' POST TRANSACTION
SHUTDOWN [IMMEDIATE] [dispatcher name]
SWITCH LOGFILE. This switches the
active log file groups.
CHECKPOINT. This performs either
a GLOBAL (all open instances on the database) or LOCAL (current
CHECK DATAFILES. This verifies
access to data files. If GLOBAL is specified, all data files in all
instances accessing the database are verified accessible. If LOCAL is
specified only the current instance’s data files are verified.
ENABLE RESTRICTED SESSION. This
only allows users with RESTRICTED SESSION privilege to log on to the
DISABLE RESTRICTED SESSION. This
allows any user to log on to the instance.
ENABLE DISTRIBUTED RECOVERY. This
enables distributed recovery.
DISABLE DISTRIBUTED RECOVERY.
This disables distributed recovery.
[SEQUENCE n] [TO 'location']
[CHANGE n] [TO 'location']
[CURRENT] [TO 'location']
[GROUP n] [TO 'location']
[LOGFILE 'filename'] [TO 'location']
[NEXT] [TO 'location']
[ALL] [TO 'location']
[START] [TO 'location']
FLUSH SHARED_POOL -- Flushes SQL and
PL/SQL form shared pool if it is not pinned using the DBMS_SHAREDPOOL
KILL SESSION 'N1,N2' -- Kills the
session pid N1=sid and N2=serial number from V$SESSION
DISCONNECT SESSION 'N1,N2' [IMMEDIATE|POST
TRANSACTION] -- A nicer form of KILL, allows transactions to
complete with the POST TRANSACTION, same as KILL if IMMEDIATE is used.
SUSPEND|RESUME -- used for suspension
of all IO as well as queries, in all instances, allowing you to make
copies of the database without having to handle ongoing transactions.
Database tablespaces must be in hot backup mode. This is useful for
when you don't want the penalties of shutting down, restarting the
database and reloading the SGA as you would for a cold backup but
don't need the database to be available as it would be during a normal
QUIESCE RESTRICTED|UNQUIESCE -- Used to
restrict access to a database so the DBA can use the SYS or SYSTEM
accounts to perform maintenance. No new transactions or connections
are allowed in the QUIESCE RESTRICTED mode. Oracle will wait for
current transactions to complete and resource to be release before
going into QUIESCE.
SHUTDOWN [IMMEDIATE] [dispatcher name]
-- Used to immediately stop a dispatcher process when you are using
MTS for your database. If IMMEDIATE is specified the dispatcher is
stopped now, if IMMEDIATE is not specified it tells the dispatcher to
not accept any more connections and to terminate when its last
REGISTER -- Causes the instance to
register with the listener processes immediately instead of waiting
for the next PMON discovery cycle. If not used the registration can
take up to 60 seconds or more, which prevents the database from being
accessed by remote users.
SET clause -- used to set various
initialization parameters dynamically. Allows specification of a
comment that is added to the value in the V$PARAMETER file, a new
value to which the parameter is reset, the scope of the value change,
and whether the change is just for the memory or should be made
permanent in the spfile.
RESET clause -- Same as for SET clause
only applies to specific instances in a RAC cluster.
Code Depot for Full Scripts
||This is an excerpt
from Mike Ault, bestselling author of "Oracle
10g Grid and Real Application Clusters".
You can buy it direct from the publisher for 30%-off and get
instant access to the code depot of Oracle tuning scripts.