Ошибка 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 имеет тенденцию быть общей ошибкой, при которой сетевой уровень переходит на более высокий уровень, а полезные ошибки - это уровень в трассе.