Check your processes on the DB tier to see what's still running.
Do a ps -ef | grep <orauser>. If you see any LOCAL=NO processes,
you can do a pkill -9 -f LOCAL=NO to kill them, this should cause
the database to shutdown normal or immediate (depending on what
you selected). Do not use abort.
I already killed all those LOCAL=NO
but still the shutdown did not complete.
So abort is the only option?
there may still be something else running on the apps tier, check it for processes particularly concurrent processes. Any of them can be killed. If that doesn't work abort is your only option. Alternative you can try posting your db and apps processes.
As mentioned, possibly some Apps processes are still up and running. To find out use the query.
SELECT s.sid, s.serial#, s.username, s.program,s.module
FROM v$session s;
This will give you clue from which component (FORMS/JDBC/Concurrent Manager) the session is active. You may take action accordingly.