Ошибка ORA-01017 в sqlplus 12.1, может соединиться с такими же учетными данными в других приложениях

У меня SQL*Plus 12.1 установлен на Fedora 19, пытаясь подключиться к базе данных Oracle 11g. Я установил RPM-пакеты InstantClient (базовый, devel, sqlplus) отсюда. Я могу успешно подключиться к другим базам данных Oracle, используя SQL*Plus, поэтому я знаю, что у меня есть работающая установка программного обеспечения. Однако, когда я пытаюсь подключиться к этой конкретной базе данных, я получаю эту ошибку:

ERROR:
ORA-01017: invalid username/password; logon denied

Вот мой файл tnsnames.ora (с обфусцированным хостом и портом):

PSPRODDB =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = #HOST-ADDR)(PORT = #PORT-NUM))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = PSPRODDB)
 )
)

В моей переменной среды TNS_ADMIN указан путь к моему файлу tnsnames.ora.

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

sqlplus username/password@PSPRODDB

После нажатия Enter, он зависает на версии и информации об авторских правах в течение 2-3 секунд, прежде чем выдает ошибку ORA-01017.

Я знаю, что правильно ввел имя пользователя и пароль, потому что скопировал и вставил их из другого приложения, которое успешно подключается к базе данных.

редактировать

Я посмотрел на файл log.xml (в C:\oracle\product\11.2.0\diag\tnslsnr\test\listener\alert\log.xml) и обнаружил, что есть несколько записей, которые показывают, что я разговариваю с правильным слушателем. Вот пример записи в журнале, но запутанный для возможной конфиденциальной информации:

<msg time='2013-11-25T09:54:08.530-07:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='PSTEST100-50'
 host_addr='*my address*'>
 <txt>25-NOV-2013 09:54:08 * (CONNECT_DATA=(SERVICE_NAME=PSPRODDB)(CID=(PROGRAM=sqlplus)(HOST=*localhost*)(USER=njones))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*addr*)(PORT=38906)) * establish * PSPRODDB * 0
 </txt>
</msg>

С тех пор я также пытался изменить элемент *SERVICE_NAME* в моем файле tnsnames.ora на SID, без разницы.

Окружение моего пароля кавычками также не решило проблему.

Может ли быть проблема с версией? Я использую InstantClient и sqlplus версии 12.1, но база данных версии 11.2.

Редактировать 2

Ну, это официально. Я идиот, и именно это вызвало ошибку. Я вводил неправильный пароль, и, думаю, что бы я ни копировал, вставка тоже была неправильной.

3 ответа

Решение

Пара идей, в порядке вероятности возникновения этой проблемы:

1) Если ваш пароль начинается с не алфавитного символа, заключите его в кавычки: user/"password"@service (обратите внимание, приложения с графическим интерфейсом, например, TOAD и SQLDeveloper не требуют кавычек).

2) Беги

> tnsping service

И подтвердите, что ваш вывод соответствует записи tnsnames.ora, которую вы используете.

3) Запустите на сервере (или попросите запустить dba)

> lsnrctl status

Убедитесь, что служба, указанная в вашем tnsnames.ora, направлена ​​в соответствующую базу данных.

РЕДАКТИРОВАТЬ: увидел вопрос Натана, подумал: "Хм - странно, я все время использую tnsping для проверки установок клиента, почему, черт возьми, он не будет включен в InstantClients???" Спросил Google, и вот, оказывается, TNSPING в значительной степени бесполезен. Единственное, что он проверяет, это то, что хост доступен и что на указанном порту работает tnslistener (который вы легко можете проверить с помощью telnet). H/T, чтобы "BillyVerreynne" на форумах Oracle: https://forums.oracle.com/message/10561771

Я сегодня кое-что узнал!:-) На этой ноте я лично переключусь на SQLPlus для глубокой проверки спецификаций TNS и рекомендую всем, кто читает это, делать то же самое. Как уже писал выше Натан, проблемы с попытками подключения к SQLPlus можно посмотреть в $ORACLE_BASE/diag/tnslsnr/test/listener/alert/log.xml.

ORA-01017 довольно ясно. Это означает, что вы неправильно указали имя пользователя или пароль, или, возможно, вы не подключаетесь к базе данных, к которой, по вашему мнению, подключаетесь.

Там действительно не так много, чтобы сказать. Дважды проверьте дескриптор подключения и убедитесь, что вы не ошиблись при вводе имени пользователя или пароля.

В вашем наборе sqlnet.ora

TRACE_LEVEL_CLIENT = support

Посмотрите документы для описания того, что они делают. Вы получите файлы в $ORACLE_HOME/network/trace, которые содержат информацию о клиентских подключениях. Я предполагаю, что у вас проблемы с общением с слушателем TNS с вашего клиентского компьютера или с чем-то подобным.

К сожалению, если проблема слишком близка к серверу, трассировка клиента может не сильно помочь. Так как это база данных prod, которую может быть немного сложно диагностировать. Если у вас есть контракт на поддержку Oracle, они действительно хорошо решают подобные вопросы.

Я понимаю, что это не полный ответ, но я подозреваю, что из этого следа вы найдете другие более интересные ошибки. ORA-01017 имеет тенденцию быть общей ошибкой, при которой сетевой уровень переходит на более высокий уровень, а полезные ошибки - это уровень в трассе.

Другие вопросы по тегам