Informix一直以來應該算比較沒落了,由於一個項目關係,不得不安裝使用,以前主要做Oracle,這次安裝Informix也算是頭一遭了。
一、準備介質
Redhat Linux AS 4有4張碟,可以從網上下載得到,Informix 9.40UC9 就一個tar檔案,沒有壓縮大概544M的樣子。
二、安裝Redhat Linux AS 4,沒什麼好說的,圖形介面,一路很順暢
三、安裝Informix
從網上找到一份安裝指引http://bbs.chinaunix.net/thread-301370-1-15.html,這篇指引中的好像還可以用,不過我的這份安裝版本與這個不太一樣,是一個整合的安裝包。
×準備informix環境
建立使用者informix,並指定使用者組informix:useradd -d /home/informix -m informix
×切換到使用者環境,修改環境變數
vi .bash_profile,加入下面的參數配置,為了保證對於特殊漢字的相容,我這裡採用了GB18030-2000的字元集。
INFORMIXDIR=/u1/informix;export INFORMIXDIR
INFORMIXSERVER=cs_dbs;export INFORMIXSERVER
ONCONFIG=onconfig.cs;export ONCONFIG
DBDATE=Y4MD-;export DBDATE
LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
DB_LOCALE=zh_CN.GB18030-2000; export DB_LOCALE
CLIENT_LOCALE=zh_CN.GB18030-2000; export CLIENT_LOCALE
SERVER_LOCALE=zh_CN.GB18030-2000; export SERVER_LOCALE
DBLANG=zh_CN.GB18030-2000; export DBLANG
PATH=$PATH:$HOME/bin:$INFORMIXDIR/bin:/usr/java/jdk1.5.0_16/bin
export PATH
×安裝Informix程式
安裝需要在root使用者下面進行,這裡安裝Informix目錄到/u1/informix,需要chown informix:infomix /u1/informix,安裝程式用tar解開目錄結構如下,
drwxr-xr-x 5 root bin 4096 2007-01-18 DBLD
drwxr-xr-x 4 root bin 4096 2007-01-18 ICONNECT
-rwxr-xr-x 1 root bin 44265 2007-01-18 ids_install
drwxr-xr-x 3 root bin 4096 2007-01-18 JDBC
-rw-r--r-- 1 root bin 7649 2007-01-18 README.html
drwxr-xr-x 3 root bin 4096 2007-01-18 SERVER
drwxr-xr-x 3 root bin 4096 2007-01-18 SVR_ADM
直接運行./ids_install,提示是否確認協議,然後出來選項
IBM Informix Unix Bundle Installer
Installation Requirements:
- A user "informix" and a group "informix" must be known to the system.
- This installation procedure must be run by user root.
- Approximately 770 MB disk space required initially.
- Approximately 500 MB disk space if everything is installed (50 MB
for ISA, 25 MB for JDBC).
0) All Products listed below
1) IBM Informix Dynamic Server 9.40
2) IBM Informix IConnect
3) IBM Informix JDBC
4) IBM Informix Server Administrator
5) Configure a Demo IDS Server (requires IDS)
Enter the number(s) of the products to install, separated by spaces
(i.e. "1 2 3"):
直接安裝全部組件,或者逐個安裝應該都可以。安裝好像就是直接解壓了,很快就完了。
×配置環境,設定參數
1、修改/etc/services,檔案最後加入
sqlexe 1526/tcp
sqlexec 1528/tcp
本文這裡1528就是最後的監聽連接埠
2、修改/etc/hosts,加入IP,主機名稱解析
192.168.1.43 mylinux
3、配置$INFORMIXDIR/etc/sqlhosts檔案
cs_dbs onipcshm mylinux sqlexe
cs_dbs_tcp onsoctcp mylinux sqlexec
4、建立空間,這裡就照抄了
以informix使用者操作
在INFORMIXDIR中建立dbs目錄;(便於區分拉)
首先touch rootdbs logdbs phydbs blobdbs tmpdbs datadbs
然後chmod 660 *
保證所有的dbs檔案都是informix使用者informix組;許可權都是660;
5、配置$INFORMIXDIR/etc/onconfig.cs檔案,這個檔案可以直接按照下面配置,或者複製onconfig.std來修改
--rootdbs路徑、空間
ROOTNAME rootdbs # Root dbspace name
ROOTPATH /u1/informix/dbs/rootdbs # Path for device containing root dbspace
ROOTOFFSET 0 # Offset of root dbspace into device (Kbytes)
ROOTSIZE 100000 # Size of root dbspace (Kbytes)
--物理日誌的dbs空間,先用rootdbs的20M;
PHYSDBS rootdbs # Location (dbspace) of physical log
PHYSFILE 20000 # Physical log file size (Kbytes)
--邏輯日誌用預設的
# Logical Log Configuration
LOGFILES 6 # Number of logical log files
LOGSIZE 2000 # Logical log size (Kbytes)
--把磁帶的東西都改成/dev/null
TAPEDEV /dev/null # Tape device path
TAPEBLK 32 # Tape block size (Kbytes)
TAPESIZE 10240 # Maximum amount of data to put on tape (Kbytes)
# Log Archive Tape Device
LTAPEDEV /dev/null # Log tape device path
LTAPEBLK 32 # Log tape block size (Kbytes)
LTAPESIZE 10240 # Max amount of data to put on log tape (Kbytes)
--設定資料庫伺服器參數,根據自己機器配置的實際情況分配locks和buffers;
SERVERNUM 0 # Unique id corresponding to a OnLine instance
DBSERVERNAME cs_dbs # Name of default database server
DBSERVERALIASES cs_dbs_tcp # List of alternate dbservernames
NETTYPE ipcshm,1,8,CPU # Configure poll thread(s) for nettype
NETTYPE soctcp,1,8,NET # Configure poll thread(s) for nettype
LOCKS 5000 # Maximum number of locks
BUFFERS 500 # Maximum number of shared buffers
NUMAIOVPS 2 # Number of IO vps
PHYSBUFF 32 # Physical log buffer size (Kbytes)
LOGBUFF 32 # Logical log buffer size (Kbytes)
CLEANERS 1 # Number of buffer cleaner processes
SHMBASE 0x10000000 # Shared memory base address
SHMVIRTSIZE 8000 # initial virtual shared memory segment size
SHMADD 8192 # Size of new shared memory segments (Kbytes)
另外就是onconfig.cs檔案中所有/usr/informix都替換成/u/informix/
×啟動資料庫
啟動資料庫,並初始化系統資料表
oninit -ivy
查看是否運行狀態
onstat -i,,顯示如下資訊,表明運行正常
IBM Informix Dynamic Server Version 9.40.UC9 -- On-Line -- Up 7 days 08:35:51
×最佳化設定,完善資料庫空間
這裡本人初學,完全照搬作者了
echo "Add blobdbs, tmpdbs0, phydbs, logdbs..."
echo "====================================================="
onspaces -c -b blobdbs -g 32 -p /home/informix/dbs/blobdbs -o 0 -s 48000
onspaces -c -d tmpdbs -t -p /home/informix/dbs/tmpdbs -o 0 -s 100000
onspaces -c -d phydbs -p /home/informix/dbs/phydbs -o 0 -s 50200
onspaces -c -d logdbs -p /home/informix/dbs/logdbs -o 0 -s 200000
echo "\nShut Down Server to Quiescent Mode..."
echo "====================================================="
onmode -s -y
sleep 5
echo "Adding Logical Log\n"
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 20000
onparams -a -d logdbs -s 10000
echo "\nArchiving Database Server Please Wait 20 seconds.\n"
echo "====================================================="
ontape -s
sleep 5
onmode -l
onmode -l
onmode -l
onmode -l
onmode -l
onmode -l
onmode -c
sleep 10
echo "\nDrop the old Logical Log Files... \n"
echo "====================================================="
onparams -d -l 1 -y
onparams -d -l 2 -y
onparams -d -l 3 -y
onparams -d -l 4 -y
onparams -d -l 5 -y
onparams -d -l 6 -y
echo "\nChange Physical Log Files, please wait about 1 minutes...\n"
echo "====================================================="
onparams -p -s 50000 -d phydbs -y
sleep 100
echo "\nNow add more dbspaces/chunks...\n"
echo "====================================================="
onspaces -c -d datadbs -p /home/informix/dbs/datadbs -o 0 -s 500000
echo "\nTake a level 0 archive.\n"
echo "====================================================="
ontape -s -L 0
echo "\nReboot IDS...\n\n"
echo "====================================================="
onmode -ky
oninit
sleep 10
echo "\n====================================================="
echo "Well done! \n"
echo "====================================================="
最後修改onconfig.cs檔案
DBSPACETEMP tmpdbs # Default temp dbspaces
停止資料庫onmode -ky
重新啟動 oninit
如果需要,運行dbaccess可以建立一個新的資料庫,資料庫的LOCALE就會是配置的GB18030-2000,不過由於Redhat AS 4內部內建的字元集為zh_CN.UTF-8,所以term中通過dbaccess插入
或者輸入的中文都會是UTF-8編碼的,只能在伺服器上正常看,用戶端看到的就會亂碼了,相反,通過用戶端插入的中文為GB18030-2000編碼,dbaccess訪問查詢就是亂碼。
如果運行dbexport匯出資料庫,通過ftp下載到windows上就是正常的,在redhat上面如果需要正常查看,需要通過iconv把編碼從GBK轉為UTF-8就可以用more正常查看了。
對於這個dbaccess的亂碼問題,我還沒有找到一個好的辦法,修改term中的LC_ALL等參數都沒有效果。
×修改redhat防火牆
最後需要將連接埠1528加入到防火牆的允許中,可以vi /etc/sysconfig/iptables,加在這個位置
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -p tcp -m tcp --dport 1528 -j ACCEPT
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
...
然後service iptables restart重啟啟動防火牆,應該在用戶端就可以串連了。
四、用戶端配置
1、安裝windows版本的CSDK,運行setnet32:
Envirement中設定CLIENT_LOCALE=zh_cn.GB18030-2000,DB_LOCALE=zh_cn.GB18030-2000
Server Information中設定:
IBM Informix Server:cs_dbs
HostName:192.168.1.43
protcolname:onsoctcp
Service Name:1528,這個參數很噁心,其實就是連接埠號碼,如果你安裝windows版本的,可以使用turbo這類這樣的服務名,類似本文的sqlexec
2、串連測試
×DBRichTool 該程式通過setnet32的配置訪問資料庫,串連測試成功,對中文的支援也很好
×JDBC程式串連測試,好像URL如下配置就正常訪問沒有問題:
jdbc:informix-sqli://192.168.1.43:1528/newdb:informixserver=cs_dbs;DB_LOCALE=zh_CN.gb18030-2000;CLIENT_LOCALE=zh_CN.gb18030-2000;NEWCODESET=GBK,gb18030-2000,5488,utf-8
分析原因是與SUN JDK在windows下面檔案中編碼是GBK有關,而且必須使用NEWCODESET參數配置。
×AGS Service Studio測試
這個程式有點奇怪,參照網上的一篇文章,改造一下jdbc驅動之後串連很正常。
串連編輯視窗中Advanced..設定CLIENT_LOCALE=zh_cn.GB18030-2000,DB_LOCALE=zh_cn.GB18030-2000