使用bash变量时出现Sqlplus登录错误:SP2-0306:无效选项

问题描述 投票:4回答:3

我有一个连接到oracle 10g数据库的bash脚本。

在第一步中,它使用以下命令从“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服务器上完成它的工作,而不是在另一个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

所以它有点烦人。

除此之外,我将不得不检查te配置文件同步过程...当我得到新的东西时,我会告诉你。谢谢大家。

oracle bash sqlplus ora-01017
3个回答
6
投票

消息很清楚:

  • 您已成功联系数据库
  • 提供的凭据是错误的

这表明您的客户端配置确实没有任何问题。

所以,这让你失望

  • 用户/ pw组合错误
  • 你还没有联系过你认为有的数据库

可能性:

  • 确保您可以使用命令行提供的凭据进行连接。
  • 使用tnsping mydatabase检查您正在联系的主机和实例,验证它是否正确。此命令的输出应告诉您要连接的主机,端口和实例/服务。如果是错误的,请检查tnsnames.ora文件中的别名。
  • 正如@OMG Ponies建议的那样,如果您使用11g,请确保密码中的大小写正确无误

2
投票

这对我有用:连接用户/“密码”我认为如果密码包含像'@'这样的特殊字符,我们需要使用“”作为密码。


0
投票

Daft问题,但你确定你在两台unix服务器上使用bash shell吗?

我试着替换

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

导出USR_PASS =“$ {USRID} / $ {USRID_PASS} @myDatabase”

确保变量得到正确解释

作为最终,异国情调,密码包含除基本字母数字和标点符号之外的任何字符。因为10g不区分大小写,所以小写密码会转换为大写,这会导致像重音字符这样的奇怪效果

© www.soinside.com 2019 - 2024. All rights reserved.