Ошибка входа в 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 не чувствителен к регистру, пароль в нижнем регистре преобразуется в верхний регистр, что может привести к странным эффектам с такими символами, как ударение