[Informix]無法透過連線問題處理筆記

處理 Informix 無法正常使用 ODBC 連線的 Server 端調整相關紀錄

在之前的工作中剛好有機會接觸到 Informix 的資料庫,因此就花了一點時間整理一下相關處理紀錄,寫了一篇「[Informix]安裝 Informix SDK 連接 Informix 資料庫」,當時來說主要是紀錄一下如何使用 Informix 的 Client SDK,做到可以使用相關 Windows 上的連接工具,可以順利連上 Informix。

很湊巧的最近有個朋友也來詢問要串接的問題,原本以為也是跟我之前遇到類似的問題,因此也將相關的 Client SDK 找出來給他們,但很不幸的卻是沒有辦法順利,只是這次遇到的是 Server 端的問題,因此想說避免以後遇到類似問題,把相關過程整理一下。

首先要知道在主機上 Informix 安裝在哪裡 , 這樣要去改相關設定才不會搞錯地方,這裡我使用 printenv 和 grep 來做,透過 INFORMIXDIR 和 INFORMIXSERVER 的環境變數,可以知道 Informix 的安裝目錄和 Informix Server 的名稱 ;而透過 ONCONFIG 的環境變數,可以讓我們知道 Informix 設定檔的名稱

printenv |grep INFORMIX
printenv |grep ONCONFIG

接下來要查看 Informix 的網路連線設定看是否有開啟 TCP 的連線,我是利用 onstat 的指令來做查看 Informix 的狀況,這裡我搭配 -c 的參數來查看組態檔的設定

onstat -c

我們找到其中一段有關於 NETTYPE 的設定,從檔案中的描述有設定 TCP 有 100 個連線,但是從這裡只有看到有沒有開啟,卻沒有相關連線的細節

接個要到前面所查到的 Informix 下面的 etc 目錄中有個 sqlhosts 的檔案,在這裡就會記錄相關連線的資訊,紀錄的格式會採用 "<dbservename> <nettype> <hostname> <servicename> <options>" 的格式,而我們一開始有透過 INFORMIXSERVER 的環境變數查到 Informix 的伺服器名稱是 ids,那就可以在這個檔案中找看有沒有 ids 的相關設定。因此我們會查到類似以下的設定值,從下圖中可以看到這個 ids 的 Informix 伺服器在 server 這台電腦上監聽 1526 這個 Port

接下來就要來查看主機上相關網路的狀況

netstat -ano | grep tcp | grep LISTEN

但是當我們查看的時候,卻發現這裡有點貓膩在裡面,正常來說既然設定 Informix 要監聽 1526 的 TCP Port,不應該只監聽 127.0.0.1 這個位址,因為這樣表示只有本機可以連線,是無法透過其他電腦來連接的。

關於這一點我卡關有點久,後來朋友公司有網路的高手協助,才發現在 /etc/hosts 這個檔案裡面,之前有多設定將自己本機的名稱指定對應到 127.0.0.1,因此才會造成這樣的問題

後來我們討論一下,決定將該設定拿掉,將 /etc/hosts 的設定更改如下

當修改完該設定,我們將主機重新啟動,並且重新查看網路的狀態,此時監聽的位址就變成該主機的位址

此時我們再使用 ODBC 去測試一下,就可以順利的連接上去了


後記:原本有爬文一些網路上的文章,有些說明是說將 /informix/etc/sqlhosts 裡面,原本紀錄的主機名稱,將該名稱改成 * 就可以了,不要去指定特定名稱。這樣的方式雖然也可以,但是會造成我們原本的環境上其他的應用程式無法連接,因此我們只好退而求其次,來修改 hosts 的檔案設定,這樣原本的程式還可以使用,外部要連接也是可以使用。