- PR -

DB2 V5.1へのODBCアクセス "iSeries for Linux 8.10"

1
投稿者投稿内容
きのこ
ぬし
会議室デビュー日: 2004/09/01
投稿数: 256
投稿日時: 2006-02-09 08:59
AS400/400e上でOS V5.1で動くDB2に
LINUX FEDORA CORE 4の
UnixODBCを使ってをアクセスしようとしてます 

いろいろ試行錯誤して失敗した上で
いろいろ苦しみながらもなんとかドライバを
http://www-03.ibm.com/servers/eserver/iseries/access/
からドライバーをとてきて
http://www-03.ibm.com/servers/eserver/iseries/access/linux/guide/
を参考にすすめています

いま
ODBCINST.ini
に、
[iSeries Access ODBC Driver]
Description = iSeries Access for Linux ODBC Driver
Driver = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup = /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
Threading = 2
DontDLClose = 1
UsageCount = 1

がiSeriesAccess-5.2.0-1.10.i386.rpmをインストールしたときに
自動追加されさらに
ODBCConfigで
odbc.iniを正常につながっているWINDOWSのものを参考にしながら

[MYAS400]
Description = iSeries Access ODBC Driver
Driver = iSeries Access ODBC Driver
System = xxx.xxx.xxx.xxx
UserID = MYUSER
Password = MYPASS
Naming = 1
DefaultLibraries = MYGRP
Database =
ConnectionType = 0
CommitMode = 0
ExtendedDynamic = 0
DefaultPkgLibrary = MYGRP
DefaultPackage =
AllowDataCompression = 1
LibraryView = 0
AllowUnsupportedChar = 0
ForceTranslation = 1
Trace = 0

のように設定しました
構造としては
MYTABLEというテーブルがMYGRPというライブラリ?にありそれが
QSYSという器〔上位のライブラリ)にはいってます

TELNETでアクセスしてエミュレータで、STRSQLコマンドを実行して、
select * from MYGRP/MYTABLE
などとやると、普通にSQLが実行できます

ただしODBCのテストだと以下のように

# cd /opt/ibm/iSeries/bin
# ./rmtodbc /DSN:MYAS400 /USER:MYUSER /PASSWORD:MYPASS "Select * from QSYS.MYGRP.MYTABLE"

IBM iSeries Access for Linux
Version 5 Release 2 Level 0
Remote Command via ODBC utility V1.2
(C) Copyright IBM Corporation and Others 1984, 2003. All rights reserved.
U.S. Government Users Restricted Rights - Use, duplication or disclosure
restricted by GSA ADP Schedule Contract with IBM Corp.
Licensed Materials - Property of IBM

Running: Select * from QSYS.MYGRP.MYTABLE
SQL5016 - Qualified object name QCMDEXC not valid.

なぜかエラーになります。
そもそもこのODBCがV5.1と相性がよくないのか
ODBC.iniの設定がだめなのか
SQLの書き方がだめなのか、さっぱりわかりません

AS400のDB2のODBCを通じての設定たSQLの書き方でなに
か注意することはあるでしょうか?
アドバイスいただければうれしいです
dodo
ベテラン
会議室デビュー日: 2004/05/12
投稿数: 99
お住まい・勤務地: 東京都渋谷区
投稿日時: 2006-02-09 14:31
引用:

きのこさんの書き込み (2006-02-09 08:59) より:

# cd /opt/ibm/iSeries/bin
# ./rmtodbc /DSN:MYAS400 /USER:MYUSER /PASSWORD:MYPASS "Select * from QSYS.MYGRP.MYTABLE"

Running: Select * from QSYS.MYGRP.MYTABLE
SQL5016 - Qualified object name QCMDEXC not valid.

なぜかエラーになります。
そもそもこのODBCがV5.1と相性がよくないのか
ODBC.iniの設定がだめなのか
SQLの書き方がだめなのか、さっぱりわかりません
レスいただければうれしいです



rmtodbcの使い方が間違っているような気がします。
きのこさんの参考にしているページに説明が書いてあります。
そもそも、rmtodbcは、AS/400上のCLを実行するためのもので、SQLを投げるツールではないと思います。

引用:

RTMODBC - Run an iSeries batch/CL command using the ODBC driver

Use this command from a console prompt to run a single iSeries command or a group of iSeries commands.

Syntax to run a single command

rmtodbc [command]

Syntax to run a group of commands

rmtodbc [/I:fileName]

Parameters
o /system:systemName = iSeries system name
o /dsn:dsnName = unixODBC DataSource name
o /user:userName = iSeries user profile
o /password:password = iSeries user profile password
o /Q = no error prompts
o /Z = no banners

Examples
o To run command foo on iSeries system bigblue, run:
rmtodbc foo /system:bigblue /user:UserProfile /password:UserPassword

o To run a groups of command listed in a file, run:
rmtodbc /i:foocmds.txt /system:bigblue /user:UserProfile /password:UserPassword



それと、rmtodbc は結果を直接受け取れないのですが、その点は大丈夫ですか?
引用:

iSeries Access for Linuxのrmtcmd,rmtodbcコマンドは、i5上の実行結果を受け取ることは出来ません。
物理ファイルなどに実行結果を出力して、Linux側に転送するなどの代替策が必要になります。


http://www-1.ibm.com/support/docview.wss?uid=std31c04155ddbc4f20449256fa8001fc390

[ メッセージ編集済み 編集者: dodo 編集日時 2006-02-09 14:36 ]
きのこ
ぬし
会議室デビュー日: 2004/09/01
投稿数: 256
投稿日時: 2006-02-09 18:11
DoDoさん
ありがとうございました
isqlでやりましたら問題なく接続して、結果がとれました
#isql MYAS400 MYUSER MYPASS
>select * from mylib/mytable

実際に最終的にPHPから結果をとりたいもで
$DSN="MYAS400";
 $db = odbc_connect($DSN,"MYUSER","MYPASS")
   or die(odbc_error().":".odbc_errormsg());
 print "Connected!";

などをPHP5(FEDORA4のCD付属)を実行すると

Warning: odbc_connect()
[function.odbc-connect]:
SQL error: [unixODBC][IBM][iSeries Access ODBC Driver]
Communication link failure. comm rc=10013 - CWBCO1003 - Sockets error,
function returned 10013, 192.168.xxx.xxx,
SQL state 08S01 in SQLConnect in /var/www/html/con3.php on line 3

08S01:[unixODBC][IBM][iSeries Access ODBC Driver]
Communication link failure. comm rc=10013 - CWBCO1003 - Sockets error,
function returned 10013, 192.168.xxx.xxx

というエラーになりますね
isqlでODBCをつかって接続、SQL実行ガまったく問題ないので
PHP5もしくはAPACHEとUnixODBCがうまく連携されていないのでしょうね。

httpd.conf
php.ini
/etc/rc.d/init.d/httpd
あるいはその他でチェックするべき設定がありましたらどうかご教授ください
たびたびすみません
1

スキルアップ/キャリアアップ(JOB@IT)