Sqlplus login error when using bash variables: SP2-0306: Invalid option

匆匆过客 提交于 2019-11-27 07:57:25

问题


I have a bash script that connects to an oracle 10g database.

In a first step it takes some variables from a "config" file with the following command

. /path/to/my/configfile.ini

In the config file there are some variables:

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

Then it actually connects through sqlplus using the command:

sqlplus -s $usr_pass

Terrible Security and Design issues aside (this script has been around for 5 years). This is actually doing its job in one of our UNIX servers, but not in another.

When I run the script with bash -x, I can see that the command expanded to:

sqlplus -s myUser/myPassword@myDatabase

...which should do fine (and is actually working in one server), but the response in the failing server is:

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

SP2-0306: Invalid option. Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}] where ::= [/][@] | SP2-0306: Invalid option.

I'm guessing it has to do more with bash than with oracle, but I'm no bash expert. Is there some configuration or detail I'm missing?

EDIT:

Trying to pin down the problem a bit more, I'm now running two versions of the script in a third development server, and in different tests, the login works if i do it with:

sqlplus -s $usrid/$usrid_pass@myDatabase

but not when i try:

sqlplus -s $usr_pass

So its a bit annoying.

Besides that, i'll have to check on te config file synchronization process... I'll let you know when i get to something new. Thanks everybody.


回答1:


The message is pretty clear:

  • you've successfully contacted a database
  • the credentials supplied are wrong

This indicates there isn't really anything wrong with your client configuration.

So, that leaves you with

  • the user/pw combination is wrong
  • you've not contacted the database you think you have

Possibilites:

  • Make sure you can connect with the credentials supplied from the command line.
  • Use tnsping mydatabase to check the host and instance you're contacting, verify it's correct. Output from this command should tell you the host, port, and instance/service you're connecting to. If it's wrong, check the tnsnames.ora file for this alias.
  • As @OMG Ponies suggests, if you're using 11g, make sure the case in your passwords is correct



回答2:


This worked for me: connect user/"password" I think if the password contains special characters like '@' we need to use "" for the password.




回答3:


Daft question, but are you sure you are using the bash shell on both unix servers ?

I'd try replacing

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

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

to make sure the variables get interpreted correctly

As a final, exotic though, does the password contain any characters other than basic alpha-numeric and punctuation. Because 10g isn't case sensitive, a lowercase password gets converted to uppercase, which can cause odd effects with things like accented characters




回答4:


I solved this problem on my mac machine by changing the shell to 'sh' from 'bash'. Everything just worked smooth then.

Thanks to the original reporter of the problem who explained with a good hint.



来源:https://stackoverflow.com/questions/6550542/sqlplus-login-error-when-using-bash-variables-sp2-0306-invalid-option

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!