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.
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
This worked for me: connect user/"password" I think if the password contains special characters like '@' we need to use "" for the password.
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
来源:https://stackoverflow.com/questions/6550542/sqlplus-login-error-when-using-bash-variables-sp2-0306-invalid-option