4

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

第一步,它使用以下命令从“配置”文件中获取一些变量

. /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] [logon] [AS {SYSDBA|SYSOPER}] 其中 ::= [/][@] | SP2-0306:无效选项。

我猜它对 bash 的作用比对 oracle 的作用更大,但我不是 bash 专家。我缺少一些配置或细节吗?

编辑:

试图进一步确定问题,我现在在第三个开发服务器中运行两个版本的脚本,并且在不同的测试中,如果我这样做,登录可以工作:

sqlplus -s $usrid/$usrid_pass@myDatabase

但不是当我尝试:

sqlplus -s $usr_pass

所以它有点烦人。

除此之外,我还要检查配置文件同步过程……当我有新的东西时,我会告诉你的。谢谢大家。

4

4 回答 4

6

信息很清楚:

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

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

所以,这让你

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

可能性:

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

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

于 2018-01-01T01:54:27.297 回答
0

愚蠢的问题,但你确定你bash在两个 unix 服务器上都使用 shell 吗?

我会尝试更换

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

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

确保变量得到正确解释

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

于 2011-07-02T04:55:48.457 回答
0

我通过将 shell 从 'bash' 更改为 'sh' 在我的 mac 机器上解决了这个问题。那时一切都很顺利。

感谢问题的原始报告者,他给出了很好的提示。

于 2019-11-06T18:26:07.683 回答