oracle - 通过 SSH 的 sqlplus 无法解析 tns
问题描述
我设置了一个 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)
}
解决方案
这个问题可以缩小到加载环境变量的问题(特别是$TNS_ADMIN
)。由于.bashrc
有一个验证来检查登录 shell 是交互式还是非交互式,因此未加载底部定义的变量。
# ~/.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
tns 不能通过 ssh 解决的原因是$TNS_ADMIN
变量不可用。通过在开头定义变量.bashrc
,我可以解决这个问题。
推荐阅读
- php - 碳日期格式未返回正确的 diffInDays
- c# - .Net Core 单元测试错误:无法为“IdentityRole”创建 DbSet,因为此类型未包含在上下文模型中
- batch-file - `set VAR 2> nul` 后面的条件执行失败
- flutter - 用于其他语言的 String.hashCode 背后的 dart 实现
- html - 如何在组件Angular 8中插入HTML代码
- generics - 从 lambda 参数推导出 Kotlin 泛型失败
- javascript - 舍入文本字段
- exchangewebservices - fileAttachment.Load() 不适用于第二个附件
- node.js - 带有身份验证错误的 MongoDB Atlas 集群连接问题
- java - Maven 复制依赖项 + 阴影 - 类路径管理