ushidayの日記

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

DB2 for i copy to DB2 LUW

DB2 for iからDB2 LUWへデータコピーをしたかったので、phpで作った。
処理自体は、簡単なものでスキーマ名とテーブル名をのfrom toを受け取って、DELETE and INSERTするだけ。
CREATE TABLEは既にされているという前提で...

<?php

//Db2 for i
$db2I = Zend_Db::factory($conf);

//SQL
$select = $db2I->select()
              ->from($schema . '.' . $table);
$stmt = $db2I->query($select) ;
$fromRows = $stmt->fetchAll();

//DB2 LUW

$db2LUW = Zend_Db::factory($conf2);

//削除
$count = $db2LUW->delete($schema . '.' . $table);

//追加
foreach ($fromRows as $row ) {
    $db2LUW->insert($schema . '.' . $table, $row);
}

?>

これを、Windows版 Zend Serverで動かすと、DB2 LUWにデータは書かれるのだけど、Zend Server for i上で動かすと、LUW側のコネクションも、IPアドレスやポートは、無視されて、自己参照してしまう。
今回のケースは、たまたまiもLUWもデータベース名、ユーザ、パスワード全てが、両方で同じだったので、自己参照をしたという結果になった。
DB2のドライバが違うんだろうね。確かに接続パラメータも違うしね。

と言うことは、「iの方でDRDA使えば更新出来んじゃね?」と言うことは容易に想像がつくのだが...「'分散データベースの接続の試みで認可が正常に実行されません。 SQLCODE=-30082」であっさり駄目だった。

とりあえず、Windows鯖をかまして、バッチコピーは出来たから良いか。(  ̄σ・・  ̄ )ホジ