Ошибка входа в Sqlplus при использовании переменных bash: SP2-0306: Неверный параметр - PullRequest
4 голосов
/ 01 июля 2011

У меня есть скрипт bash, который подключается к базе данных Oracle 10g.

На первом этапе он берет некоторые переменные из файла "config" с помощью следующей команды

. /path/to/my/configfile.ini

InВ конфигурационном файле есть несколько переменных:

export USRID=myUser
export USRID_PASS=myPassword
export USR_PASS="$USRID/$USRID_PASS@myDatabase"

Затем он на самом деле подключается через sqlplus с помощью команды:

sqlplus -s $usr_pass

Ужасные проблемы безопасности и проектирования в стороне (этот скрипт был около 5года).Это фактически делает свою работу на одном из наших серверов UNIX, но не на другом.

Когда я запускаю сценарий с bash -x, я вижу, что команда расширилась до:

sqlplus -s myUser/myPassword@myDatabase

... что должно работать нормально (и на самом деле работает на одном сервере), но ответ на сбойном сервере:

ОШИБКА: ORA-01017: неверное имя пользователя / пароль;вход в систему запрещен

SP2-0306: Неверный параметр.Использование: CONN [ECT] [вход] [AS {SYSDBA | SYSOPER}] где :: = [/] [@] |SP2-0306: Неверный параметр.

Я предполагаю, что это больше связано с bash, чем с oracle, но я не эксперт по bash.Есть какая-то конфигурация или детали, которые я пропускаю?

РЕДАКТИРОВАТЬ:

Пытаясь определить проблему немного больше, я сейчас работаю две версиисценарий на третьем сервере разработки и в разных тестах, логин работает, если я делаю это с:

sqlplus -s $usrid/$usrid_pass@myDatabase

, но не когда я пытаюсь:

sqlplus -s $usr_pass

Так что это немного раздражает.

Кроме того, мне нужно будет проверить процесс синхронизации конфигурационного файла ... Я дам вам знать, когда доберусь до чего-то нового.Спасибо всем.

Ответы [ 3 ]

6 голосов
/ 01 июля 2011

Сообщение довольно ясно:

  • вы успешно связались с базой данных
  • введены неверные учетные данные

Это означает, что нетна самом деле ничего плохого в конфигурации вашего клиента.

Итак, вы получаете

  • неправильная комбинация пользователь / pw
  • вы не связались с базой данныхвы думаете, что у вас есть

Возможности:

  • Убедитесь, что вы можете соединиться с учетными данными, предоставленными из командной строки.
  • Используйте tnsping mydatabase для проверкихост и экземпляр, с которым вы связываетесь, убедитесь, что это правильно.Выходные данные этой команды должны указывать хост, порт и экземпляр / службу, к которой вы подключаетесь.Если это не так, проверьте файл tnsnames.ora на этот псевдоним.
  • Как подсказывает @OMG Ponies, если вы используете 11g, убедитесь, что в ваших паролях указан правильный случай
2 голосов
/ 01 января 2018

Это сработало для меня: подключить пользователя / "пароль" Я думаю, что если пароль содержит специальные символы, такие как «@», нам нужно использовать «» для пароля.

0 голосов
/ 02 июля 2011

Дафт вопрос, но вы уверены, что используете оболочку bash на обоих серверах Unix?

Я бы попробовал заменить

export USR_PASS="$USRID/$USRID_PASS@myDatabase"

с export USR_PASS = "$ {USRID} / $ {USRID_PASS} @myDatabase"

чтобы убедиться, что переменные интерпретируются правильно

Как последний, экзотический, пароль содержит какие-либо символы, кроме буквенно-цифровых символов и знаков препинания. Поскольку 10g не чувствителен к регистру, пароль в нижнем регистре преобразуется в верхний регистр, что может вызвать странные эффекты с такими символами, как акцентированные символы

...