いよいよ、System i Access for linux をインストールして、AS400のデータベースに接続してみます。
ibmのサイト以外に参考させていただいたものは次の通り。
参考サイト
http://www.geocities.jp/sugachan1973/doc/funto51.html
http://www.geocities.jp/sugachan1973/doc/funto56.html
http://www.e-bellnet.com/special/vision/vision_0405.html
それと、supply saeki
rpmパッケージやドキュメントの入手
rpmパッケージは次のURLからdownloadできます。
ただし、ibmアカウント?を登録する必要があります。
http://www-03.ibm.com/systems/i/software/access/index.html
install
http://www-03.ibm.com/systems/i/software/access/linux/guide/index.html#requirements
によれば、
Linux requirements for running iSeries Access for Linux * GLibc 2.2 * RPM 3.0 * OpenMotif 2.0 or later for the 5250 emulator * unixODBC driver manager version 2.0.11 or later must be installed on the client...
らしく、unixODBC以外にも必要なものはありますが、
今回の目的はlinuxからのas400のDB接続にあるので、次のようにrpmをインストールします。
# rpm --nodeps -ihv iSeriesAccess-5.4.0-1.4.i386.rpm
libstdc++.so.5
この後で利用する cwbping には、libstdc++.so.5 が必要らしい。
$ ./cwbping 10.209.XXX.XXX ./cwbping: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
今さらですが、installします。
# yum install compat-libstdc++-33
接続テスト
pingコマンドでも構いませんが、iSeriesAccess に付属の cwbping コマンドを利用します。
.odbc.ini
今回、テスト用に用意した.odbc.ini は次の通りです。
※unixODBCの設定ファイルには、/usr/local/etc/odbc.ini , /usr/local/etc/odbcinst.ini , ~/.odbc.ini があります
$ vi ~/.odbc.ini [ODBC Data Sources] ASTEST = ASTEST [ASTEST] Description = iSeries Access ODBC Driver Driver = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so Setup = /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so System = 10.209.XX.XX UserID = Password = Naming = 0 DefaultLibraries = Database = ConnectionType = 0 CommitMode = 2 ExtendedDynamic = 1 DefaultPkgLibrary = QGPL DefaultPackage = A/DEFAULT(IBM),2,0,1,0,512 AllowDataCompression = 1 MaxFieldLength = 32 BlockFetch = 1 BlockSizeKB = 128 ExtendedColInfo = 0 LibraryView = 0 AllowUnsupportedChar = 0 ForceTranslation = 0 Trace = 0 CCSID = 1208
CCSID
.odbc.ini では文字コードをCCSID項目で指定する必要があります。
ibmから配布されているドキュメントを参照しながら、次のように設定しました。
※ちなみに System i Access では文字コード変換に iconv を使用しているそうです。
現行ロケールの確認
[colinux ~]$ locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL= [colinux ~]$
現行ロケールとCCSIDのマッピングを確認し、.odbc.iniに CCSID=1208を指定しました。
[colinux ~]$ /opt/ibm/iSeriesAccess/bin/cwbnltbl cwbnltbl - Download conversion table utility Usage: cwbnltbl source-code-page target-code-page [host] [uid] [pwd] Linux locale codeset=UTF-8 ccsid=1208 [colinux ~]$
sql テスト
$ isql ASTEST $USER $PASSWD
select する際の対象テーブルにはライブラリを指定する必要があるそうです。
次の例の場合、HOGEがライブラリにあたります。
SQL> [endo@colinux ~]$ isql ASTEST $USER $PASSWD
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Connected! |
sql-statement |
help [tablename] |
quit |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
㈱のような機種依存文字も問題なく取得できることまで確認できたので、今回はここまでにしておきます。