Это вызвано тем, что запрошенный идентификатор безопасности не существует в {ORACLE_HOME}/network/admin/tnsnames.ora
P.S Протестировано с базой данных Oracle 19c с ojdbc8.jar
1. интерфейс jdbc
try (Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "system", "password")) {
//...
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Выход:
SQL State: 66000 Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
СТОРОНА xe не существует в ORACLE_HOME/сеть/администратор/tnsnames.ora
2. xe||не существует в ||ORACLE_HOME/сеть/администратор/tnsnames.ora
Образец.
# tnsnames.ora Network Configuration File: C:\{ORACLE_HOME}\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
В приведенном выше примере tnsnames.ora идентификатор SID равен ORCL
Чтобы исправить это , обновите код:
try (Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "system", "password")) {
//...
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Рекомендации
Оригинал: “https://mkyong.com/jdbc/ora-12505-tnslistener-does-not-currently-know-of-sid-given-in-connect-descriptor/”