ОШИБКА 704 и 12154 при подключении sqlloader к серверу

У меня есть база данных оракула на сервере, и я хочу импортировать данные в таблицы на сервере. Я пытаюсь использовать sqlloadr(sqlldr) для вставки всех данных в базу данных оракула, которая находится на локальном хосте, и в этом случае проблем нет, но проблема возникает, когда я пытаюсь подключить веб-сервер (не локальный).

Команда, которую я использовал в случае с локальным хостом:

sqlldr <usrname>/<password> control=table.ctl log=table.log ERRORS=25000

и следующее относится к веб-серверу

sqlldr <usrname>/<password>@LABSERVER control=table.ctl log=table.log ERRORS=25000

где я создал tnsnames.ora следующим образом:

LABSERVER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(Host = <hostaddress>)(Port = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = <servicename>)
    )
  )

но я получил эту ошибку:

SQL*Loader-704: Internal error: ulconnect:OCIServerAttache [0]

ORA-12154: TNS:could not resolve the connect identifier specified

Любая идея будет оценена


person csuo    schedule 03.06.2011    source источник


Ответы (5)


«где я создал tnsnames.ora, который выглядит следующим образом:»

Похоже, это означает, что вы разместили файл TNSNAMES.ORA с сервера базы данных.

Помните, что вам также нужен файл TNSNAMES.ORA на клиенте. Это тоже правильно настроено?

person APC    schedule 04.06.2011
comment
проблема была в том, что я не нашел TRASNAMES.ORA, поэтому создал его и поместил не в ту папку, спасибо за ответ - person csuo; 04.06.2011

У нас была аналогичная проблема, и у нас не было прав на изменение tnsnames.ora локально, поэтому нам пришлось указать службу в командной строке, например:

sqldr userid=имя пользователя/пароль@\"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myDBHost)(PORT= 1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=MYDBSID))) \" Control='mytable.ldr' Журнал='mytable.log'

благодаря https://hs2n.wordpress.com/2012/06/12/oracle-using-sqlplus-and-sqlldr-on-databases-without-tnsnames-entry/#comment-700

person JavaTec    schedule 03.01.2017

По сути, эта ошибка говорит вам, что с учетом хоста, порта, протокола и имени службы клиент не смог найти прослушивающую службу Oracle. Убедитесь, что ваше имя хоста допустимо (например, вы можете пропинговать его), что прослушиватель прослушивает 1521 и что имя_службы в базе данных сервера действительно является указанным вами именем. Вы можете проверить это, выполнив эту команду в sqlplus:

SHOW PARAMETER service_names

который сообщает вам, что база данных регистрирует себя как слушателя.

person DCookie    schedule 04.06.2011

Для тех, кто, как и я, нашел эту тему.

Одна вещь, которую нужно проверить: права доступа к файлу tnsnames.ora.

Для клиентов на том же компьютере, но не входящих в группу DBA, и с правильно установленными ORACLE_HOME и ORACLE_BIN, было сообщено об ошибке. Права доступа к файлу tnsnames.ora исключают чтение во всем мире; так как файл tnsnames.ora не может быть прочитан 704/12514 выброшено, так как имя службы не может быть разрешено.

Из командной строки: chmod 644 $ORACLE_HOME/network/admin/tnsnames.ora

person rus    schedule 10.11.2014

если в вашем пароле есть символ @, то утилита sqldr не будет работать, смените пароль, она будет работать http://www-01.ibm.com/support/docview.wss?uid=swg21347615

person dilip    schedule 12.06.2015
comment
Спасибо! Не могу поверить, что это была проблема. Это происходит даже тогда, когда вы вводите пароль в приглашении. - person Ughini; 16.08.2019
comment
Пароль нужно заключать в кавычки, например, \p@s\$word\ - person VictorDDT; 17.12.2020