Oracle

從 AWS EC2 上的 Ubuntu 實例連接時出現“ORA-24454:未設置客戶端主機名”

  • April 1, 2022

**一些背景知識:**我正在嘗試連接到 Oracle 數據庫。我有使用者名、密碼、IP 地址、埠和服務名稱。我只能從 AWS 上的 Ubuntu EC2 實例訪問該數據庫,因為 Oracle 數據庫位於另一個組織內部。因此,我無法訪問這台機器的 DNS 主機名。

我從 Oracle 的網站下載了“Oracle Instant Client with SQL Plus”客戶端包並將其解壓縮到一個文件夾中。當我嘗試執行它時,我收到以下消息:

ORA-24454: 未設置客​​戶端主機名

兩個小時後,我想通了。

起初,Oracle 的錯誤文件似乎並沒有很好的描述性:

ORA-24454: 未設置客​​戶端主機名

原因:未設置 /etc/hosts 等文件中的網路主機名。

操作:設置主機名並重試。

現在,該命令在我的機器(Ubuntu 筆記型電腦)上執行,但在 EC2 上不起作用。我對HOSTNAME變數進行了一段時間的研究,並試圖弄清楚是否有辦法覆蓋sqlplus’s 設置中的“客戶端主機名”——沒有骰子。我終於將我機器的 /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"

上面的評論中提到過,但是這條線在我的 MacBook Pro 上為我解決了這個問題,在埠 1521 上執行 docker wnameless/oracle-xe-11g。

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

然後以下命令都可以正常工作:

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

很奇怪,但這就是解決方法。

引用自:https://dba.stackexchange.com/questions/167477