I can be exasperating when the database is slow or hanging and I can't even connect to see what's happening. In those cases, here is a trick from Tanel Poder:
If you have such an instance hang you can use a preliminary connection (which starts the process and attaches to SGA, but doesn't initialize SGA structs nor allocate any state objects):
sqlplus -prelim "/as sysdba"
oradebug dump latches 1
oradebug dump hanganalyze 4
Here's a good write up by Arup Nanda