一部の背景: Oracleデータベースに接続しようとしています。ユーザー名、パスワード、IPアドレス、ポート、サービス名を持っています。 Oracleデータベースは別の組織内にあるため、私はAWSのUbuntu EC2インスタンスからのみこのデータベースにアクセスできます。このため、このマシンのDNSホスト名にアクセスできません。
OracleのWebサイトから「Oracle Instant Client with SQL Plus」クライアントパッケージをダウンロードして、フォルダーに抽出しました。実行しようとすると、次のメッセージが表示されます。
ORA-24454:クライアントのホスト名が設定されていません
2時間後、私はそれを理解しました。
エラーに関するOracleのドキュメント 最初はひどく説明的ではなかったようです。
ORA-24454:クライアントのホスト名が設定されていません
原因:/ etc/hostsなどのファイルのネットワークホスト名が設定されていません。
アクション:ホスト名を設定して再試行します。
現在、コマンドは私のマシン(Ubuntuラップトップ)では機能しましたが、EC2では機能しませんでした。 HOSTNAME
変数を少し試してみて、sqlplus
の設定で「クライアントのホスト名」を上書きする方法があるかどうかを調べようとしました-サイコロはありません。私はようやく私のマシンの/ etc/hostsをEC2のものと比較し、EC2にはない次の行に気づきました。
127.0.1.1 my-laptop-hostname
私は以前これを知りませんでしたが、Debianベースのマシンでは システムのホスト名をこのIPアドレスにマップする のようです。 127.0.1.1がループバックIPであることさえ知りませんでした。 127.0.0.1について知っていました。
さらに、sqlplus
はこの行が存在することに依存しているようです。それでも理由はわかりません。
とにかく、修正は簡単です:
$ Sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"
これは、EC2が作成されたVPC設定がnoに設定されていたためです:
Your VPCs-> Summaryタブの下で、
DNSホスト名:いいえ
他の人が答えるような手動での解決を回避するには、DNSホスト名の値をyesに設定します
これは上記のコメントで言及されていますが、この行により、ポート1521でdocker wnameless/Oracle-xe-11gを実行しているMacBook Proでこの問題が修正されました。
Sudo /bin/bash -c "echo '127.0.0.1 ${HOSTNAME}' >> /etc/hosts"
次のコマンドはすべて正常に機能しました。
sqlplus system/Oracle@localhost:1521/xe
sqlplus system/[email protected]:1521/xe
sqlplus system/Oracle@my-personal-hostname:1521/xe
非常に奇妙ですが、それは修正です。
MacOSでこの問題が発生しました
/etc/Host
sファイルにホスト名を正しく入力したことを確認してください
that> hostname
コマンドを実行すると、「Macの実際のホスト名」と/ etc/hostsへの以下の行が表示されます
127.0.0.1 your_Host_name.local
この問題は私にも起こりましたが、上記の解決策だけでは解決しませんでした。 11g/12gクライアントを使用している場合は、別のエラーが発生します。
エラーを解決するには、次の手順を実行します。
hostname -A
は、/etc/sysconfig/network
と同じホスト名を返します/etc/hosts
にあることを確認します(127.0.0.1ホスト名)