JDBC 接続を使用して Oracle 11g データベース (11.2.0) に接続する Web アプリケーションを見ています。アプリケーションはしばらくの間 (約 1 時間) 問題なく動作し、次のようになります。
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
Oracle と Oracle サービスの OracleServiceXE と OracleXETNSListener を再起動しようとしましたが、エラーは解決しません。マシンを再起動した後にのみ消えます。
Tomcat または Oracle でデータベース パラメータを変更していません。
ここに私の tnsnames.ora があります
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
JDBC の構成は次のとおりです。
String serverName = "localhost";
String portNumber = "1521";
String sid = "xe";
String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
String username = "xxx";
String password = "yyy";
「XE」が正常に動作している場合、lsnrctl のステータスを確認すると、
Service "XEXDB" has 1 instance(s).
Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully
例外が発生すると、lsnrctl のステータスを確認してもインスタンス「xe」が表示されません。
しばらくしてからこの例外が発生する理由と、それを修正する方法を知りたいです。そうでない場合、マシンを再起動せずに回避するにはどうすればよいですか? ありがとう。