Ошибка ORA-02019: connection description for remote database not found
- Запросы к удаленной БД через связку (
SELECT * FROM table@remote_link) падают с ошибкойORA-02019: connection description for remote database not found. - В распределенных транзакциях или процедурах интеграции не удается разрешить имя DBLINK.
- В представлении
DBA_DB_LINKSотсутствует указанный линк или он недоступен для текущей сессии.
1. Проверка существования DBLINK
SELECT owner, db_link, username, host, created
FROM dba_db_links
WHERE db_link LIKE '%REMOTE%';2. Создание или пересоздание DBLINK
Создайте публичный (PUBLIC) или частный Database Link с явным указанием TNS-дескриптора или строки подключения:
CREATE PUBLIC DATABASE LINK remote_pg_link
CONNECT TO remote_user IDENTIFIED BY "Password123"
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.50)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCLPDB)))';3. Проверка разрешения TNS-имени на сервере СУБД
Убедитесь, что в файле $ORACLE_HOME/network/admin/tnsnames.ora на сервере Oracle (где создается линк) присутствует нужная запись TNS, и протестируйте ее через tnsping:
tnsping remote_tns_alias4. Тестирование связи через SQL
SELECT * FROM dual@remote_pg_link; Частые вопросы (FAQ)
Почему приватный DBLINK вызывает ORA-02019 у другого пользователя?
Приватный DBLINK доступен только создавшему его пользователю. Другие схемы должны использовать PUBLIC DATABASE LINK либо иметь собственный частный линк с таким же именем.
Где должен быть прописан tnsnames.ora для DBLINK — на клиенте или сервере?
Исключительно на сервере базы данных, где выполняется инициализирующий запрос, так как удаленное подключение открывает серверный процесс Oracle.
Как удалить неработающий DBLink?
Для частного: DROP DATABASE LINK link_name; Для публичного: DROP PUBLIC DATABASE LINK link_name;
Влияет ли параметр GLOBAL_NAMES на поиск DBLINK?
Да, если GLOBAL_NAMES=TRUE, имя DBLINK обязано строго совпадать с глобальным именем удаленной базы данных (GLOBAL_NAME).