JDBC接続できない原因

なんで、Oracle8iへJDBC接続できないんだろ…と悩んでいたが、原因発覚!なんとSIDの名前を間違えていたのだ。tnsnames.oraのSERVICE_NAMEと違うじゃないかー!!

■ソースはこれ

Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@192.168.0.5:1521:ORA8";
String user = "scott";
String password = "tiger";
Connection conn = DriverManager.getConnection(url, user, password);

■エラーはこれ

java.sql.SQLException: I/O例外です。: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=135286784)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
...続くけど省略... 

 

■SQL*PlusでSIDを確認

SQL> set termout off
SQL> column sid0 new_value sid1
SQL> select rtrim(instance, chr(0)) sid0 from v$thread;

SID0
----------------
ORCL

■ついでにシェル上でも確認

$ echo $ORACLE_SID
ORCL

■でもtnsnames.oraはというと

ORA8.xxx.com =
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.0.5) (PORT = 1521))
    )
    (CONNECT_DATA =
      (SEVICE_NAME = ORA8)
    )
)

というように「ORA8」なので、ORA8を指定すると思っていたのだ。

■ということで

最初のソースのORA8をORCLに変更すれば、無事接続!
これを発見するのに導いてくれたY君に感謝!