Ошибка ORA-12154: TNS:could not resolve the connect identifier specified
- Клиенты (1C:Enterprise, PL/SQL Developer, SQL*Plus) не могут подключиться к БД:
ORA-12154: TNS:could not resolve the connect identifier specified. - Команда
tnsping alias_nameвозвращает ошибкуTNS-03505: Failed to resolve name. - В строке подключения указан алиас, который отсутствует в файле
tnsnames.ora.
1. Проверка переменной окружения TNS_ADMIN
Убедитесь, что клиент использует правильный каталог с конфигурационными файлами:
# Linux
echo $TNS_ADMIN
# Windows (CMD)
echo %TNS_ADMIN%2. Проверка синтаксиса файла tnsnames.ora
Откройте файл tnsnames.ora и убедитесь в отсутствии дисбаланса скобок и лишних скрытых символов:
ORCLPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db-server.corp.local)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclpdb.corp.local)
)
)3. Проверка файла sqlnet.ora (NAMES.DEFAULT_DOMAIN)
Если в sqlnet.ora задан суффикс домена:
NAMES.DEFAULT_DOMAIN = corp.local
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)Тогда алиас в tnsnames.ora обязан быть записан как ORCLPDB.corp.local.
4. Тестирование разрешения имени через tnsping
tnsping ORCLPDB Частые вопросы (FAQ)
Почему 32-битный клиент 1С не видит tnsnames.ora 64-битного Oracle Client?
32-битные и 64-битные клиенты Oracle устанавливаются в разные каталоги. Настройте системную переменную среды TNS_ADMIN, указывающую на единый общий каталог с tnsnames.ora.
Может ли скобка в пути установки (например, Program Files (x86)) вызвать ORA-12154?
Да, в старых версиях Oracle OCI/ODBC клиента был баг, из-за которого наличие круглых скобок в пути к исполняемому файлу приводило к сбою поиска tnsnames.ora.
Как подключиться к базе без использования tnsnames.ora?
Используйте синтаксис EZConnect: host:port/service_name (например, db-srv01:1521/orclpdb.local).
Какие права должны быть на файл tnsnames.ora в Linux?
Файл должен иметь права на чтение для всех пользователей: chmod 644 $ORACLE_HOME/network/admin/tnsnames.ora.