Oracle
從 AWS EC2 上的 Ubuntu 實例連接時出現“ORA-24454:未設置客戶端主機名”
**一些背景知識:**我正在嘗試連接到 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
很奇怪,但這就是解決方法。