Kar*_*son 12 oracle sqlplus ubuntu amazon-ec2
一些背景:我正在尝试连接到 Oracle 数据库。我有用户名、密码、IP 地址、端口和服务名称。我只能从 AWS 上的 Ubuntu EC2 实例访问此数据库,因为 Oracle 数据库位于另一个组织内部。因此,我无权访问这台机器的 DNS 主机名。
我从 Oracle 的网站下载了“Oracle Instant Client with SQL Plus”客户端包并将其解压缩到一个文件夹中。当我尝试运行它时,我收到以下消息:
ORA-24454: 未设置客户端主机名
Kar*_*son 21
两个小时后,我想通了。
起初,Oracle 的错误文档似乎并没有很好的描述性:
ORA-24454: 未设置客户端主机名
原因:未设置 /etc/hosts 等文件中的网络主机名。
操作:设置主机名并重试。
现在,该命令在我的机器(Ubuntu 笔记本电脑)上运行,但在 EC2 上不起作用。我把HOSTNAME
变量弄乱了一点,并试图找出是否有办法覆盖 的设置中的“客户端主机名” sqlplus
——没有骰子。我终于将我机器的 /etc/hosts 与 EC2 中的进行了比较,并注意到 EC2 中没有的这一行:
127.0.1.1 my-laptop-hostname
Run Code Online (Sandbox Code Playgroud)
我以前不知道这一点,但显然在基于 Debian 的机器上将系统的主机名映射到这个 IP 地址是正常的。我什至不知道 127.0.1.1 是环回 IP;我只知道 127.0.0.1。
更重要的是,它似乎sqlplus
依赖于这条线的存在。仍然不知道为什么。
无论如何,修复很简单:
$ sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"
Run Code Online (Sandbox Code Playgroud)
小智 6
上面的评论中已经提到过,但是这一行在我的 MacBook Pro 上为我解决了这个问题,在端口 1521 上运行 docker wnameless/oracle-xe-11g。
sudo /bin/bash -c "echo '127.0.0.1 ${HOSTNAME}' >> /etc/hosts"
Run Code Online (Sandbox Code Playgroud)
以下命令然后一切正常:
sqlplus system/oracle@localhost:1521/xe
sqlplus system/oracle@127.0.0.1:1521/xe
sqlplus system/oracle@my-personal-hostname:1521/xe
Run Code Online (Sandbox Code Playgroud)
很奇怪,但这就是解决办法。