7

Some background: I am attempting to connect to an Oracle database. I have a username, password, IP address, port, and service name. I only have access to this database from an Ubuntu EC2 instance on AWS because the Oracle database is located inside another organization. Due to this, I do not have access to a DNS hostname for this machine.

I downloaded the "Oracle Instant Client with SQL Plus" client package from Oracle's website and extracted it to a folder. When I try to run it, I get this message:

ORA-24454: client host name is not set

9

After two hours, I figured it out.

Oracle's documentation for the error didn't seem terribly descriptive at first:

ORA-24454: client host name is not set

Cause: The network host name in files like /etc/hosts was not set.

Action: Set the host name and try again.

Now, the command worked on my machine (Ubuntu laptop), but it didn't work on EC2. I mucked around with the HOSTNAME variable for a bit and tried to figure out if there was a way to override the "client host name" in sqlplus's settings -- no dice. I finally compared my machine's /etc/hosts to the one in EC2, and noticed this line that wasn't in EC2:

127.0.1.1 my-laptop-hostname

I didn't know this before, but apparently it's normal on Debian-based machines to map the system's hostname to this IP address. I didn't even know that 127.0.1.1 was a loopback IP; I just knew about 127.0.0.1.

What's more, it seems sqlplus relies on this line being present. Still no idea why.

Anyway, the fix is simple:

$ sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"

  • 1
    This solution worked for me on a Mac Book Pro. – axiopisty Jan 3 '18 at 21:04
  • 1
    Thank you! I was having problems getting a connection to an Oracle database using Python and pyodbc. The missing piece I needed was this: echo "127.0.0.1 `hostname`" >> /etc/hosts. – L42 Jan 26 '18 at 15:34
  • Very oddly, I found that this also worked for me on a MacBook Pro, while I was running docker wnameless/oracle-xe-11g, whether connecting directly via IP, by "localhost" or by "my-host-name", I needed to have this line in /etc/hosts pointing the loopback 127.0.0.1 IP at my hostname. Upon adding it, they all worked, upon removing it, everything broke, adding it again, everything is fine again. Very odd. – turiyag Aug 4 '18 at 21:30
2

This was due to a VPC setting which the EC2 was created under, was set to no:

Under Your VPCs -> Summary tab,

DNS hostnames: no

In order to avoid manual resolution as answered by others, set the value of DNS hostnames to yes

1

This issue happened to me, but was not resolved solely by the solution above. If you're using the 11g/12g client, you will get a different error.

In order to resolve the error, do the following:

1) hostname -A returns the same hostname that appears in /etc/sysconfig/network

2) Verify that the hostname is in your /etc/hosts as noted above (127.0.0.1 hostname)

1

It's been mentioned in a comment above, but this line fixed this issue for me on my MacBook Pro, running docker wnameless/oracle-xe-11g on port 1521.

sudo /bin/bash -c "echo '127.0.0.1 ${HOSTNAME}' >> /etc/hosts"

The following commands then all worked just fine:

sqlplus system/oracle@localhost:1521/xe
sqlplus system/oracle@127.0.0.1:1521/xe
sqlplus system/oracle@my-personal-hostname:1521/xe

Very odd, but that's the fix.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.