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」であっさり駄目だった。