Ошибка ORA-12514: невозможно установить соединение с базой данных Oracle
Ошибка "ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor" возникает, когда клиент не может подключиться к базе данных Oracle, потому что TNS listener не может определить сервисное имя, указанное в дескрипторе подключения.
Для решения этой проблемы необходимо проверить следующее:
1. Сервисное имя должно быть указано правильно в файле tnsnames.ora на стороне клиента. Например:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
2. Сервисное имя и listener должны быть настроены правильно на стороне сервера. Например, если сервисное имя ORCL, то должен быть запущен listener, который слушает порт 1521 и настроен для обработки этого сервиса:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = ORCL)
(ORACLE_HOME = C:\oracle\product\12.1.0\dbhome_1)
(GLOBAL_DBNAME = ORCL)
)
)
3. Проверьте наличие сетевой связи между клиентом и сервером.
Пример кода на языке Java для подключения к базе данных Oracle в случае использования сервисного имени:
public class OracleConnection {
public static void main(String[] args) {
Connection connection = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@//myserver:1521/ORCL";
String username = "myusername";
String password = "mypassword";
connection = DriverManager.getConnection(url, username, password);
System.out.println("Connected to Oracle database...");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (connection != null) {
connection.close();
System.out.println("Connection closed...");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
В данном примере мы используем драйвер Oracle JDBC и указываем сервисное имя ORCL в URL подключения. Если сервисное имя или другой параметр подключения указаны неверно, будет выброшено исключение SQLException с сообщением об ошибке ORA-12514.