【发布时间】:2018-08-17 13:37:45
【问题描述】:
我设置了一个 EC2 实例和 RDS 实例。然后在 EC2 实例上安装 oracle 实例客户端。之后,我设法执行 sqlplus 并从 EC2 实例连接数据库。为此,我创建了一个 tnsnames.ora 文件并输入数据库的服务详细信息。
我可以,
sqlplus user/password@db_alias
但我做不到,(这给出了 ERROR: ORA-12154: TNS:could not resolve the connect identifier specified)
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)
}
【问题讨论】:
-
你在哪里创建了
tnsnames.ora?当您像这样 ssh 时,您的环境可能缺少指向其位置的$TNS_ADMIN变量,尽管它似乎已经具有$PATH和其他 Oracle 变量。 -
@AlexPoole 我将 tnsnames.ora 放在 $ORACLE_HOME/network/admin 中。还将 $TNS_ADMIN 设置为上述路径。有时可能是 tnsnames.ora 的权限问题。我会检查的。
-
但是你如何设置
TNS_ADMIN- 在你调用ssh之前在你的shell中手动设置?或者在环境文件(.bashrc、.prifle 等)中,以便被运行sqlplus的新会话拾取? -
我将它添加到环境文件中。所以我希望它适用于每个会话。对上一条评论的补充。 tnsnames.ora 文件具有所需的权限级别。
-
@AlexPooleYup!该变量在通过 ssh 执行 sqlplus 时不可用。我的操作系统是 ubuntu。所以
.profile有一个到源.bashrc的条目,.bashrc有这些记录。我想不出不设置环境变量的原因。
标签: oracle amazon-ec2 sqlplus amazon-rds tnsping