Ошибка входа в Sqlplus при использовании переменных bash: SP2-0306: Неверный параметр

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

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

. /path/to/my/configfile.ini

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

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 ответа

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

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

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

Итак, это оставляет вас с

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

Possibilites:

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

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

Я решил эту проблему на своем компьютере Mac, изменив оболочку на sh с bash. Тогда все работало гладко.

Спасибо оригинальному репортеру проблемы, который объяснил с хорошей подсказкой.

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

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

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

с экспортом USR_PASS="${USRID}/${USRID_PASS}@myDatabase"

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

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

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