If you use and abuse of “sqlplus / as SYSDBA” to establish a connection to database as SYSDBA you may find this odd issue:
oracle@phoenix ~]$ sqlplus / as SYSDBA .. Connected to an idle instance.
Since you have pretty sure that instance is up and running (confirmed using for example UNIX ps command or srvctl status database), something might be wrong with your environment variables.
[oracle@phoenix ~]$ srvctl status database -d fenix Database is running. [oracle@phoenix ~]$ env | grep ORACLE_ ORACLE_SID=fenix ORACLE_DUMP=/u01/app/oracle/diag/rdbms/ ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1/
The trick here is verify if the value of ORACLE_HOME that Oracle use to start is _exactly_ the same as your $ORACLE_HOME environment variable:
[oracle@phoenix ~]$ ps -ef | grep pmon oracle 6459 1 0 Oct15 ? 00:00:13 asm_pmon_+ASM oracle 6524 1 0 Oct15 ? 00:00:15 ora_pmon_fenix [oracle@phoenix ~]$ ps e -f 6524 > pmon.out [oracle@phoenix ~]$ cat pmon.out UID PID PPID C STIME TTY STAT TIME CMD oracle 6524 1 0 Oct15 ? Ss 0:15 ora_pmon_fenix ... LOGNAME=oracle UPSTART_JOB=rc ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 CRS_LIMIT_STACK=2048 ORACLE_SID=fenix ..
As you can see, ORACLE_HOME variable is not exactly the same as your environment variable $ORACLE_HOME and the difference is only a char “/” in the end. It seems that sqlplus can’t handle this and not accept any difference.
The workaround is to change your environment variable and remove the “/” char.