If SGA is configured with large memory (> 2GB) , Oracle takes long time to shutdown the instance. The work around is:
1 Issue a check point ( or switch redo log)
2 ALTER SYSTEM FLUSH SHARED_POOL.
3 Ensure that no lock on any table (Query from V$LOCKED_OBJECT view) is held.
4 Kill INACTIVE sessions manually.
5 Issue SHUTDOWN IMMEDIATE or ABORT.

PS. If SHUTDOWN ABORT was used, then bring up instance and then shutdown normal.