jeudi 9 janvier 2014

Charger des données d'une instance DB2 à une autre sans (gros) fichier

on utilisera 3 pour cela 3 sessions SSH, testé avec 30 Go de données, mais doit pouvoir aller plus loin

session 1
mkfifo -m 777 /tmp/input

mkfifo -m 777 /tmp/output

session 2
db2 connect to base1

db2 "export to /tmp/input of ixf select * from matable"

session 3
db2 connect to base2

db2 "load from /tmp/output of ixf replace into matable nonrecoverable"

retour à la session  1
cat /tmp/input > /tmp/output

vendredi 3 janvier 2014

Erreur PHP Startup: Unable to load dynamic library

L'erreur complète est la suivante :

PHP Warning:  PHP Startup: Unable to load dynamic library 'XXX' 
- XXX: undefined symbol: php_pdo_register_driver in Unknown on line 0

La solution est toute bête, le driver PDO qu'on cherche à lancer est simplement démarré avant PDO lui même ! Il faut donc modifier l'ordre de chargement des extensions PHP, ensuite plus de soucis !



jeudi 2 janvier 2014

Comment compiler le module PDO_IBM pour PHP (RHEL/Fedora)

Prérequis

  1. Avoir déja installé le driver db2 voir ici 
  2. Télécharger les sources PDO_IBM-1.3.3 sur http://pecl.php.net/package/PDO_IBM

Etape 1: compiler le module

tar -zxf /tmp/PDO_IBM-1.3.3.tgz

cd PDO_IBM-1.3.3/

phpize --clean

phpize

cp /opt/IBM/dsdriver/include/* .

./configure --with-pdo-ibm=/opt/IBM/dsdriver/lib

make

sudo make install

Etape 2: Installer le module

echo "extension=pdo_ibm.so" > /etc/php.d/pdo_ibm.ini

Etape 3: Tester !

<?php

$database = 'test';
$user = 'test';
$password = 'test';
$hostname = 'localhost';
$port = 50000;
$string= sprintf("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=%s;HOSTNAME=%s;PORT=%d;PROTOCOL=TCPIP;",
         $database ,
         $hostname ,
         $port);

try {
  $connection = new PDO(
         $string,$user,$password);

        $req=$connection->query("select * from table");
        foreach ($req as $row) {
                print_r($row);
        }
}
catch (Exception $e) {
  echo($e->getMessage());
}
?>

Comment compiler le module db2_ibm pour PHP (RHEL/Fedora)


Prérequis


  1. télécharger le fichier ibm_data_server_driver_package_linuxx64_v10.5.tar.gz depuis le site IBM
  2. télécharger les sources du module sur http://pecl.php.net/package/ibm_db2
  3. avoir installé php-devel (yum install php-devel)
  4. avoir installé le korn shell (yum install ksh)

Etape 1 : Installer le driver DB2

mkdir -pv /opt/IBM;cd /opt/IBM;tar -zxf /tmp/ibm_data_server_driver_package_linuxx64_v10.5.tar.gz

chmod 755 /opt/IBM/dsdriver/installDSDriver

ksh installDSDriver

Etape 2 : Compiler le module

tar -zxvf ibm_db2-1.9.5.tgz; cd ibm_db2-1.9.5

phpize

export IBM_DB_HOME=/opt/IBM/dsdriver/

./configure

make

sudo make install

Etape 3 : Installer le module

echo "; Enable ibm_db2 extension module" > /etc/php.d/ibm_db2.ini

echo "extension=ibm_db2.so" >> /etc/php.d/ibm_db2.ini


service httpd restart

Etape 4 : Test !

<?php
$database = 'test';
$user = 'test';
$password = 'test';
$hostname = 'localhost';
$port = 50000;

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

if ($conn) {
    echo "Connexion résie.";
    db2_close($conn);
}
else {
    echo "Connexion éoué";
}
?>