Perl DBI::DBD und DB2 Connect Personal Edition
- Dieses Thema hat 6 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 17 Jahre, 5 Monaten von
Anonym.
-
AuthorPosts
-
21. April 2006 um 8:26 Uhr #2681
AnonymGastSehr geehrte Damen und Herren,
ist der auf https://www.ruban.de ausführlich dokumentierte Zugriff auf eine DB2 auf einer AS400 auch mit der DB2 Connect Personal Edition möglich und falls ja, was wäre hierbei zu beachten? Wir greifen mit von einem IBM-Server (64 Bit, 2 Intel XEON Prozessoren) auf eine AS400 zu, die DB2 Connect Personal Edition ist bereits konfiguriert.
Zum Hintergrund der Frage möchte ich noch kurz erläutern, dass wir bislang mit unixODBC und dem iSeries-Treiber und PHP auf die DB2 der AS400 zugegriffen haben und für stored procedures Perl DBI:DBD:ODBC verwendet haben, da PHP bislang keine Variablenbindung kannte. Der neue, von Zend mit IBM entwickelte DB2-Treiber unterstützt die Variablenbindung zwar, es gibt aber Probleme bei der Ausführung von in RPG geschriebenen stored procedures. Solange IBM und Zend dies Problem nicht gelöst hat, würden wir gerne wieder Perl einsetzen, da wir auf diese Weise die PHP-Installation nicht in die Tonne treten müßten.
Bin für jeden Hinweis dankbar!
Karl Prinz
21. April 2006 um 13:10 Uhr #3087
AnonymInaktivHallo Karl,
für den DB2 Zugriff von einem Win/Unix Client auf DB2 AS/400 (iSeries) oder DB2 z/OS Server ist ein DB2 Connect (Personal Edition) erforderlich.
Desweiteren das Perl DBI und DBD::DB2 Modul.
Das ist ausreichend.
Hier der Link zu DBD :: DB2: http://www-306.ibm.com/software/data/db2/perl/
Â
Weitere interessante Perl Infos im Internet:
http://www.cpan.org/ports/
http://www.perldoc.com/perl5.8.0/INSTALL.html
http://search.cpan.org/search?module=DBI
http://search.cpan.org/search?module=DBD::DB2Viel Erfolg
Gernot
21. April 2006 um 15:24 Uhr #3375
AnonymGastSehr geehrter Herr Ruban,
vielen Dank für Ihre Info. Leider gibt es bei der Installation von DBD::DB2 noch ein paar Probleme.
Ich habe das DBI-Modul installiert und auf Funktionsfähigkeit getestet perl -ce ‚use DBI‘
vor der Installation von DBD-DB2-0.78 habe ich gemäß Ihren Anleitungen:
– . /home/db2inst1/sqllib/db2profile eingegeben
– export DB2_HOME=/home/db2inst1 das home Verzeichnis des DB2 users exportiert
– perl Makefile.PL eingegeben, bekam ein prinzipielles OK, aber die Warnung:
Libraries: -L/opt/IBM/db2/lib -ldb2
Note (probably harmless): No library found for -ldb2
– der Aufruf von make lieferte folgende Fehlermeldung:
Constants.xs:16:20: sqlcli.h: No such file or directory
Constants.xs:18:21: sqlcli1.h: No such file or directory
Constants.xs:19:20: sqlext.h: No such file or directory
Constants.xs:25: warning: `not_here‘ defined but not used
make[1]: *** [Constants.o] Error 1
make[1]: Leaving directory `/root/DBD-DB2-0.78/Constants‘weitere Versuche mit anderen Werten von DB2_HOME:
– export DB2_HOME=/opt/IBM/db2 lieferte die o.a. Fehlermeldung
– export DB2_HOME=/opt/IBM/db2/V8.1 hier lief das Compilieren etwas länger, endet aber mit folgender Fehlermeldung:
LD_RUN_PATH="/opt/IBM/db2/V8.1/lib" cc -shared -L/usr/local/lib64 DB2.o dbdimp.o -o blib/arch/auto/DBD/DB2/DB2.so -L/opt/IBM/db2/V8.1/lib -ldb2
/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /opt/IBM/db2/V8.1/lib/libdb2.so when searching for -ldb2
/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/../../../../x86_64-suse-linux/bin/ld: cannot find -ldb2
collect2: ld returned 1 exit status
make: *** [blib/arch/auto/DBD/DB2/DB2.so] Error 1Ich vermute, es gibt hier ein Problem mit der 64 Bit-Architektur, Ihre in der Doku erwähnten Korrekturen konnte ich im Makefile nicht nachvollziehen.
Wie gesagt, für jeden Hinweis dankbar!
Karl Prinz
P.S. ein kleiner Korrekturhinweis:
in: Tipps, Tricks, Quellen hat sich der Link auf "Small observations about the big picture" geändert, er lautet jetzt:
https://www6.software.ibm.com/developerworks/education/l-perl/
24. April 2006 um 16:43 Uhr #3554
AnonymInaktivHallo Karl,
die C Header Files (sqlcli.h etc pp), die momentan nicht gefunden werden, stehen unter $INSTHOME/sqllib/inlcude.
Wenn Du DB2 64 Bit betreibst muß Perl auch mit 64 Bit verfügbar sein.
Check:
which perl (gibt z.B. /usr/bin/perl)
ls -al /usr/bin/perl (gibt /usr/opt/perl5/bin/perl5.8.0_64bit, also ok)Ciao
GernotPS: Wenn Du die Header Files auf dem Gerät nicht finden kannst, dann tut es auch jede andere Quelle (anderer PC, Server, Windows Client, oder irgendeine Quelle im Internet).
25. April 2006 um 8:41 Uhr #3680
AnonymGastHallo Gernot,
vielen Dank für Deine Antwort! Ich denke Perl im Allgemeinen ist nicht das Problem, ich habe zwar die von Dir angegebene Perl-Version nicht gefunden, aber das liegt daran, dass ich auf dem SUSE Enterprise Server Perl über yast installiert habe. Wenn ich die Perl-Version abfrage, dann erhalte ich die m.E. korrekte Antwort (s.u.). Von dem SLES 64 Bit-Server sollen stored procedures auf einer AS400 aufgerufen werden.
Was die fehlende Bibliothek betrifft, so ist sie zweimal vorhanden:
/opt/IBM/db2/V8.1/include64/sqlcli.h
/opt/IBM/db2/V8.1/include/sqlcli.hHeißt dies, dass mein zweiter Versuch DB2_HOME=/opt/IBM/db2/V8.1 korrekt war, die Frage ist nur, was man anstellen muss, damit der Compiler die richtige Bibliothek findet.
Ich habe von Michael Hoy bereits die Quellen der neuen Version des DBD::DB2-Treibers angefragt, aber nicht keine Antwort bekommen. Mit den binaries kann ich nichts anfangen und ich denke, hier würde das 64-Problem wieder voll zuschlagen…
Vielen Dank, ich halte Dich auf dem Laufenden
Karl
perl -v
This is perl, v5.8.3 built for x86_64-linux-thread-multi
(with 1 registered patch, see perl -V for more detail)Copyright 1987-2003, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl‘ or `perldoc perl‘. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.perl -V
Summary of my perl5 (revision 5.0 version 8 subversion 3) configuration:
Platform:
osname=linux, osvers=2.6.5, archname=x86_64-linux-thread-multi
uname=’linux mahler 2.6.5 #1 smp thu aug 25 06:20:45 utc 2005 x86_64 x86_64 x86_64 gnulinux ‚
config_args=‘-ds -e -Dprefix=/usr -Dvendorprefix=/usr -Dinstallusrbinperl -Dusethreads -Di_db -Di_dbm -Di_ndbm -Di_gdbm -Duseshrplib=true -Doptimize=-O2 -fmessage-length=0 -Wall -Wall -pipe‘
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=define use64bitall=define uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc=’cc‘, ccflags =‘-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64′,
optimize=‘-O2 -fmessage-length=0 -Wall -Wall -pipe‘,
cppflags=‘-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing‘
ccversion=“, gccversion=’3.3.3 (SuSE Linux)‘, gccosandvers=“
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype=’long‘, ivsize=8, nvtype=’double‘, nvsize=8, Off_t=’off_t‘, lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld=’cc‘, ldflags =‘ -L/usr/local/lib64′
libpth=/lib64 /usr/lib64 /usr/local/lib64
libs=-lm -ldl -lcrypt -lpthread
perllibs=-lm -ldl -lcrypt -lpthread
libc=/lib64//lib64/libc.so.6, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version=’2.3.3′
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=‘-rdynamic -Wl,-rpath,/usr/lib/perl5/5.8.3/x86_64-linux-thread-multi/CORE‘
cccdlflags=‘-fPIC‘, lddlflags=‘-shared -L/usr/local/lib64′Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY USE_ITHREADS USE_64_BIT_INT USE_64_BIT_ALL USE_LARGE_FILES PERL_IMPLICIT_CONTEXT
Locally applied patches:
SPRINTF0 – fixes for sprintf formatting issues – CVE-2005-3962
Built under linux
Compiled at Dec 17 2005 03:22:14
@INC:
/usr/lib/perl5/5.8.3/x86_64-linux-thread-multi
/usr/lib/perl5/5.8.3
/usr/lib/perl5/site_perl/5.8.3/x86_64-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.3/x86_64-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl25. April 2006 um 12:43 Uhr #3771
AnonymGastHallo Gernot,
dem Abgrund wieder einen Schritt näher, die vorletzte Version von DBD::DB2 konnte ich erfolgreich installieren, nachdem ich:
/opt/IBM/db2/V8.1/cfg/db2ln -w 64 ausgeführt habe, um 64 Bitversion der Bibliotheken zu nutzen!
– export DB2_HOME=/opt/IBM/db2/V8.1
– perl Makefile.PL meckerte nicht mehr wie ohne Ausführung von /opt/IBM/db2/V8.1/cfg/db2ln -w 64
– make test, make install lief erfolgreich durch
– Test des Moduls mit perl -ce ‚use DBD::DB2‘, perl -ce ‚use DBD::DB2::Constants‘; in beiden Fällen war die Meldung: -e syntax OKDoch dann hakt es:
– Fehlermeldung beim Versuch die Datenbank zu konnektieren:
failed: Total Environment allocation failure! Did you set up your DB2 client environment? at ./db2-storedproc.pl line 22
– Umgebungsvariablen im Testscript gesetzt:
$ENV{‚LD_LIBRARY_PATH‘}=’/home/db2inst1/sqllib/lib‘;
$ENV{‚DB2INSTANCE‘}= ‚db2inst1‘;
Fehlermeldung bei Versuch die Datenbank zu konnektieren:
DBI connect(‚database=S65BAD1A,host=IP-ADRESSE‘,’USER‘,…) failed: [IBM][CLI Driver] CLI0124E Invalid argument value. SQLSTATE=HY009 at ./db2-storedproc.pl line 21
Die Verbindung zum Datenbank (DB2 at node ) konnte nicht hergestellt werden!Tja nun frage ich mich, was ich der DB2 Connect Personal Edition noch alles mitgeben muß, damit der Zugriff auf die AS400 funktioniert?
Für die Konfiguration wurde folgendes gemacht:als user db2inst1
db2 catalog tcpip node ouidb remote <IP-Adresse der AS400> server 446
db2 catalog db S65BAD1A at node ouidb
db2 connect to <RDB name> user USER using PASSWORD
db2 "bind @ddcs400.lst blocking all grant public sqlerror continue"– db2level gibt aus:
DB21085I Instance "db2inst1" uses "64" bits and DB2 code release "SQL08022"
with level identifier "03030106".
Informational tokens are "DB2 v8.1.3.88", "s050422", "MI00118", and FixPak "9".
Product is installed at "/opt/IBM/db2/V8.1".Hier nochmals die Zeile, in der perl versucht, die DB2 zu konnektieren:
my $dbh = DBI->connect("DBI:DB2:database=S65BAD1A",host=$HOST","$USER","$PASSWORD");
mit leicht entnervten Grüßen
Karl
25. April 2006 um 14:21 Uhr #3829
AnonymGastHallo Gernot,
also jetzt klappt´s es lag an dem connect-Aufruf, mir ist für den DBD::DB2 connect-Aufruf die Syntax des DBD::ODBC-Aufruf reingerutscht, mit:
$dbh = DBI->connect("dbi:DB2:S65BAD1A",$USER,$PASSWORD);
funktioniert es bestens, auch die stored procedures, mit denen der neue Zend-PHP-Treiber Probleme hat, werden problemlos ausgeführt. Ich kann da nur sagen: ZUM GLÜCK GIBT ES PERL!!
vielen Dank für die Hilfe
Karl
-
AuthorPosts
You must be logged in to reply to this topic.