ushidayの日記

主に「IBMi」のメモに・・・

Zend Server CE 4.0.6 for Winを入れてみた

Zend Server CE(Community Edition)4.0.6をWindows環境に入れて、IBM i(AS/400)のDB2とゴタゴタやったので、メモしておきます。

■動作環境

DB2 Connectのセットアップ
  • DB2ランタイムで躓き...

これは、結果論で分かったのですが、Zend Server(以下ZS)には、DB2のランタイムがバンドルされていて、ZSインストール時に導入されます。しかしランタイム版は”Unix,Linux,Windows”のDB2を対象としている様で、”DB2 for i”は対象外の様です。以下のエラーが投げられました。

---- 接続文字列 ----
「DRIVER={IBM DB2 ODBC DRIVER};DATABASE=カタログ名;HOSTNAME=ホストIP;PORT=446;PROTOCOL=TCPIP;UID=ユーザー名;PWD=パスワード;」は接続出きません。

---- db2_conn_errormsg()の内容 ----
[IBM][CLI Driver] SQL8002N Connect processing failed; a valid product license was not found. SQLSTATE=42968 SQLCODE=-8002

AS/400と同時提供されている”DB2 Connect Personal Edtion”を入れる必要がありました。
IBMよりCDが提供され入るので、32bit Windwos版のインストールを行ないます。
インストール自体は、フルインストールにして、特に難しいところはありません。

  • カタログの作成

[スタート]→[プログラム]のDB2から、[セット・アップツール]→[構成アシスタント]を選び、カタログを構成します。

構成を追加するか?訪ねられるので”はい”を選びます。ウィザードを以下スナップショットの手順で、進めます。
ちなみにデータベース名は「WRKRDBDIREコマンド」で確認して、”*LOCAL”になっている項目です。










以下の設定が終わると、[管理ツール]の[データソース]でシステムDSNに、カタログが作成されています。

  • db2cli.lstのバインド

DB2のコマンドウィンドウでcliのバインド事前にしておく必要があります。しておかないと、DB2接続で以下のエラーが発生しました。

-------------------------------------------
[IBM][CLI Driver][AS] SQL0805N
パッケージ "NULLID .SYSSH200"
が見つかりませんでした。 SQLSTATE=51002
-------------------------------------------

cliのバインド
※参考(https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.qb.dbconn.doc/doc/c0005595.html

C:\Program Files\IBM\SQLLIB\BIN> db2 connect to カタログ名 user ユーザ名 using パスワード
C:\Program Files\IBM\SQLLIB\BIN> cd ../bnd

※DB2 LUWの場合は以下を実行
C:\Program Files\IBM\SQLLIB\bnd> db2 bind @db2cli.lst blocking all grant public
C:\Program Files\IBM\SQLLIB\bnd> db2 bind @db2ubind.lst blocking all grant public 

※IBMiの場合は以下を実行
db2 bind @ddcs400.lst blocking all grant public
(実行後に”NULLID”の中にSYSオブジェクトが作成される)

DB2クライアントのエンコーディングが、ローカル環境がデフォルトになるようで、DB2関数で返される結果が、SJISになって文字化けしました。以下のコマンドをDB2のコマンドウィンドウで実行して、エンコーディングUTF-8(CCSID 1208)にします。

db2set db2codepage=1208
---- 確認 ----
db2set -all

[構成アシスタント]の[DB2レジストリ]でも設定する事が可能です。


Zend Server CEのセットアップ

Zend.comより「Zend Server CE 4.0.6」のWindowsインストーラより導入します。
フルインストールをしないと、IBM系のExtension(ibm_db2,pdo_ibm)はインストールされないので、フルインストールします。最後に前述で入れたDB2 Connectについて、「既知のDB2 Clientがあるよ」と言われます。

  • ZendEnablerConf.xmlの修正

”C:\Program Files\Zend\ZendServer\etc\ZendEnablerConf.xml”の先頭に壊れたデータが入っています。この壊れたデータを除去します。この壊れたデータの影響で、http://localhost:89/ZendServer/ の表示が500 Internal Server Error になります。id:satoruyoshidaさんのこちらの日記で解決させて頂きました。助かりました。

新しい管理用UIは、設定変更時のリスタートもその場で出来るなど、使い易くて良い感じです。
php.iniやhttpd.confを適宜直して、実行すればWindwos Zend Serverの出来上がり?

DB2関数の接続は、カタログ接続の場合は、i5と全く同等です。「*LOCAL」を使わずカタログ名にしておけば、そのままソースを変更する事なく動作します。以下の様な感じです。

<?php
/*
// 非カタログ接続
$database = 'CSC2008';
$user = 'name';
$password = '****';
$hostname = '192.168.xxx.xxx';
$port = 446; // WRKRDBDIREで確認。デフォルトの*DRDAは「446」

$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
  "HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$password;";
$db = db2_connect($conn_string, '', '');
*/

// カタログ接続
$conn_string = "CSC2008"; //カタログ名
$db = db2_connect($conn_string, 'name', '****');

しかし、「ibm_db2.i5_dbcs_alloc=1」を設定してやっても、i5だと半角カナが切れないのに、Windowsだと半角カナが切れてしまいます。(UTF-8で3バイトで認識されて、フィールドのバイト数にあたる文字数になってしまう)これは未解決のままです。

一応ベンチマーク

以前i5でやったベンチマーク同じ条件でやったら、若干遅くなりました。
DB2関数

 time indexex time%
Start1266922322.48437600-0.00%
DB2 Start select1266922322.484397000.0000210.00%
DB2 End select1266922323.986329001.50193223.22%
DB2 Start insert1266922323.986358000.0000290.00%
DB2 End insert1266922328.558094004.57173670.68%
DB2 Start update1266922328.558126000.0000320.00%
DB2 End update1266922328.952449000.3943236.10%
Stop1266922328.952471000.0000220.00%
total-6.468095100.00%

■PDO

 time indexex time%
Start1266922241.96875100-0.00%
PDO Start select1266922241.968781000.0000300.00%
PDO End select1266922243.733597001.76481626.03%
PDO Start insert1266922243.733623000.0000260.00%
PDO End insert1266922248.343330004.60970767.98%
PDO Start update1266922248.343354000.0000240.00%
PDO End update1266922248.749533000.4061795.99%
Stop1266922248.749565000.0000320.00%
total-6.780814100.00%

先日行って来た、OS協議会のお話ですと、これからAS/400にもZend Serverがプリインストールされるみたいです。