You may see that sometimes shutdown immediate takes time and finally it does not complete in 10g instances.
This is reported as a bug in metalink and Oracle has not released any fix so far. (Bug 4483084).
This error is kind of sever for some of my clients specially warehouse environment which mainly relied on cold backup.
These environments need clean shutdown.
Workaround is to implement 'BEFORE shutdown' trigger to flush shared pool.
Here is a sample of shutdown trigger which worked for me.
CREATE or replace TRIGGER flush_shared_pool
BEFORE SHUTDOWN ON DATABASE
execute immediate 'ALTER SYSTEM FLUSH SHARED_POOL';
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (num => -20000, msg => 'Error flushing pool');
I have not seen any problem since implementing this trigger.
Please let me know if that also works for you.