我设置了一个EC2实例和RDS实例。然后在EC2实例上安装oracle实例客户端。之后,我设法执行sqlplus并从EC2实例连接数据库。为此,我创建了一个tnsnames.ora文件,然后输入数据库的服务详细信息。
我能做
sqlplus user/password@db_alias
但是我做不到,(这会导致错误:ORA-12154:TNS:无法解析指定的连接标识符)
ssh username@ip sqlplus user/password@db_alias
还配置了少密码ssh。我正在对当前计算机本身执行ssh。任何想法都会有所帮助。
详细信息。由于我安装了oracle实例客户端,因此tnsping命令不可用。我通过在.profile文件中添加以下功能来实现这一点。
whence tnsping >/dev/null 2>&1 ||
tnsping() {
sqlplus -L -s x/x@$1 </dev/null |
grep ORA- |
(grep -v ORA-01017 || echo OK)
}
答案 0 :(得分:1)
此问题可以缩小为加载环境变量(特别是$TNS_ADMIN
)时遇到的问题。由于.bashrc
可以验证登录外壳是交互式外壳还是非交互式外壳,因此未加载底部定义的变量。
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
无法通过ssh解决tns的原因是$TNS_ADMIN
变量不可用。通过在.bashrc
的开头定义该变量,我可以解决此问题。
另请参见Why does an SSH remote command get fewer environment variables then when run manually?