jlakhani, SORT_AREA_SIZE is an init.ora parameter that only affect under what conditions a user will sort to disk, rather than in memory. setting this will have very little or no effect on your slow shutdown.

first i would check to what tablespace users are using for temp segments:
SQL> SELECT DISTINCT TEMPORARY_TABLESPACE FROM DBA_USERS;

TEMPORARY_TABLESPACE
------------------------------
TEMP

check the size of the extents:
SQL> select bytes, count(* )From dba_extents
2 where tablespace_name = 'TEMP'
3 group by bytes;

BYTES COUNT(*)
--------------- ---------------
5,242,880 409

From this query you should not see more than a few thousand extents. This is the coalescing that must go on before shutdown. I have 409 extents of 5M in size. my shutdowns are pretty quick, so this is OK. furthermore, you should only get one line from the query as written, since you want your extents to be the same size.

You should make sure you are using temporary tablespaces for temp segs.

SQL> R
1 select tablespace_name from dba_tablespaces
2* where CONTENTS ='TEMPORARY'

TABLESPACE_NAME
----------------------
TEMP

If you are using 8i, you might want to consider temporary tablespaces (listed in DBA_TEMP_FILES, rather than DBA_DATA_FILES). however, this is just a topic for consideration and the above info should give you some ways to check out if temp segs are causing your slow shutdowns.

d.