 |
|
Oracle shutdown
by Donald Burleson |
During a normal shutdown, it's my understanding that
Oracle will close all sessions (see modes below), close the
database, un-mount the data files and then shut down the instance in
two steps, first issuing a "free" the SGA RAM heap and finally,
terminating the background processes.
Oracle has three shutdown modes:
·
Normal (default) - waits
for in-flight work to complete. This could take houes.
·
Immediate - terminates
all sessions and does a rollback on all
uncommitted transactions.
·
Abort - aborts all
sessions, leaving current DML in need of rollback, de-allocates the
SGA and terminates the background processes. Note that a shutdown
abort is NOT evil or dangerous. The "abort" simply means that
Oracle will terminate all active work, which is what most people
want during a shutdown!
The "normal" and "immediate" modes can
take a long time in you have in-flight transactions, and many Oracle
DBA's ensure a swift clean shutdown this way, aborting the sessions,
re-starting to allow warmstart rollback of the aborted transactions,
and a shutdown immediate to close cleanly:
SQL> shutdown abort
SQL> startup
SQL> shutdown immediate
A normal shutdown of an
Oracle database is actually rarely used. This is because the normal
shutdown waits for everyone to complete their work and then logoff
in an orderly fashion. When a normal shutdown occurs, the database
is closed in a normal manner, and all changes made in the database
are flushed to the database datafiles . This is known as a "clean
shutdown."
Most of the time this is
not practical… there always seems to be someone who has left for
vacation and who forgot to log out, or there are times that Oracle
processes become "zombied" (this is where Oracle thinks someone is
connected to the database but they really are not). In these cases,
the database will never come down.
It will simply wait
forever until you manually kill those sessions. Because of this, we
often recommend the shutdown immediate or shutdown
abort commands, which we will discuss in the next sections. Here
is an example of the use of the normal shutdown command.
When you execute a
shutdown , Oracle will flush all the changes in memory out to the
database datafiles . This makes database startup quicker because the database is in a consistent state.
Think of it this way: if
you jump into the air and land on your feet, you have landed in a
way that prepares you to make another jump. If, instead, you jump
and land on your back, you are in no position to make another jump;
instead, you must perform a recovery by taking the actions required
to stand again. A clean shutdown is one that is prepared to come
back up without delay. A dirty shutdown is one that lands on its
back; it can not come back up without first recovering itself.
Perhaps the best way to
initially shutdown the database is the shutdown immediate
command. This command will prevent any new logins, then rollback any
uncommitted transactions, and then bring down the database. In the
process of bringing down the database, Oracle will flush all the
changes in memory out to the database datafiles too, just like a
regular shutdown does. This makes database startup quicker. Here is
an example of shutting down a database with the shutdown immediate
command:
The shutdown immediate
command will work most of the time, but there are times when it can
hang and fail to shutdown the database. In these cases, the
shutdown abort command is called for.
The shutdown abort
command is pretty much a guaranteed way to get your database to
shutdown. It's a "hard crash" of the database, and this can result
in a longer time to start the database back up. Still, you can't
really hurt the database using the shutdown abort command, and
during your DBA years you will find more than a few occasions to use
the shutdown abort command.
A shutdown abort
can be your first shutdown method of choice, since there may be
times when you must force the database down. Here is an example
using the shutdown abort command:
|