Я смотрю на веб-приложение, которое использует JDBC Connection для подключения к базе данных Oracle 11g (11.2.0). Приложение какое-то время (около часа) работает без проблем, после чего получаю:
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
Как только я получаю исключение, я не вижу экземпляр «xe», когда проверяю статус lsnrctl.
Я хотел бы знать, почему я получаю это исключение через некоторое время и как это исправить. Если нет, как я могу обойти это без перезагрузки моей машины? Спасибо.