Tilgang til Oracle via Perl (Del 1)

Hvorfor Perl? Vel …. både Oracle 10g and 11g server programvaren kommer med en Perl installasjon. Hvis du har en Oracle 10g eller 11g database gående på din laptop, vil du også ha Perl modulene DBI og DBD:Oracle som gjør at du kan koble deg til en Oracle instans. Ingen ekstra installasjon er nødvendig. Alt ligger klart for deg.
Fremdeles … Hvorfor Perl? Vel … Med Perl kan du enkelt skrive dine egne verktøy for testing, monitorering eller f.eks. for å generere last mot din test server.

“Perl is designed to make the easy jobs easy, without making the hard jobs impossible!”


Hvordan kommer du så i gang? Selv om alt er ferdig installert trengs litt konfigurasjon.
Først setter vi noen miljø variabler:

export PATH=$ORACLE_HOME/perl/bin:$PATH
export PERL5LIB=$ORACLE_HOME/perl/lib:$ORACLE_HOME/perl/lib/site_perl
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

Stien til våre Oracle bibioteker er avhengig om vi kjører 32-bits eller 64-bits perl. Samtidlig er navnet på parameteren avhengig av hvilket OS vi kjører(søk etter “shared library” i oracle dokumentasjon for ditt OS). I linux (og mange andre OS) settes LD_LIBRARY_PATH (som vist over).

For å sjekke om vi kjører 32-bits eller 64-bits perl kan du utføre følgende:

oracle@ubuntu:~/bin$ file `which perl`
$ORACLE_HOME/perl/bin/perl: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), _
                     dynamically linked (uses shared libs), for GNU/Linux 2.4.0, not stripped

I dette tilfelle så vi at det helt klart var 64-bits. I noen tilfeller vil du ikke se at dette er angitt. Da kan du nok gå ut i fra at du har med 32-bits perl å gjøre.
Så må vi finne riktig versjon av “Oracle client shared library (libclntsh.so)”, dvs 32 -eller 64-bits versjon. For noen operativsystemer finnes Oracle programvaren både i 32-bits eller 64-bits versjon. Hvis vi har installert 64-bits Oracle, vil vi finne 64-bits lib-filer under $ORACLE_HOME/lib, og 32-bits lib-filer under $ORACLE_HOME/lib32. På min laptop kjører jeg linux x86_64 (altså 64-bits).

oracle@ubuntu:~/bin$ uname -a
Linux ubuntu 2.6.32-30-generic #59-Ubuntu SMP Tue Mar 1 21:30:46 UTC 2011 x86_64 GNU/Linux

For å sjekke at aktuelle filer er tilstede, og hvilke filer som eventuelt mangler:

oracle@ubuntu:$ file $ORACLE_HOME/lib/libclntsh.so* $ORACLE_HOME/lib32/libclntsh.so*
/u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so:    _
        symbolic link to `/u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1'
/u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.10.1:   _ 
        symbolic link to `/u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so'
/u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1:    _
        ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
/u01/app/oracle/product/11.2.0/dbhome_1/lib32/libclntsh.so*:    _
        ERROR: cannot open `/u01/app/oracle/product/11.2.0/dbhome_1/lib32/libclntsh.so*' 
       (No such file or directory)

En sjekk på at miljøet er satt opp riktig er følgende:

oracle@ubuntu:~$ echo "use DBI;use DBD::Oracle" | perl
oracle@ubuntu:~$

Hvis alt er satt opp ok, så returnerer denne kommandoen ikke noe (som over). I motsetning hvis noe er galt vil du få noe tilsvarende:

oracle@ubuntu:~$ echo "use DBI;use DBD::Oracle" | perl
Can't load '$ORACLE_HOME/perl/lib/site_perl/5.10.0/x86_64-linux-thread-multi/auto/DBD/Oracle/Oracle.so' _
      for module DBD::Oracle: libclntsh.so.11.1: cannot open shared object file: No such file or directory at _
      $ORACLE_HOME/perl/lib/5.10.0/x86_64-linux-thread-multi/DynaLoader.pm line 203.
 at - line 1
Compilation failed in require at - line 1.
BEGIN failed--compilation aborted at - line 1.

Når alt er satt opp riktig kan jeg f.eks. kjøre en liten programsnutt som lister opp alle drivere og data sources:

oracle@ubuntu:~/bin/perl$ cat show_drivers.pl
#Script: show_drivers.pl
use DBI;
 
### Probe DBI for the installed drivers
my @drivers = DBI->available_drivers();
 
die "No drivers found!\n" unless @drivers; # should never happen
 
### Iterate through the drivers and list the data sources for each one
foreach my $driver ( @drivers ) {
    print "Driver: $driver\n";
    my @dataSources = DBI->data_sources( $driver );
    foreach my $dataSource ( @dataSources ) {
        print "\tData Source is $dataSource\n";
    }
    print "\n";
}
 
exit;
##### Output ######
oracle@ubuntu:~/bin/perl$ perl show_drivers.pl 
Driver: DBM
	Data Source is DBI:DBM:f_dir=.

Driver: ExampleP
	Data Source is dbi:ExampleP:dir=.

Driver: File
	Data Source is DBI:File:f_dir=.

Driver: Gofer

Driver: Oracle	
	Data Source is dbi:Oracle:ORCL.JCON.NO
	Data Source is dbi:Oracle:ORCL11.JCON.NO
	Data Source is dbi:Oracle:DESC.JCON.NO

Driver: Proxy

Driver: Sponge

For en rask innføring i Perl kan du f.eks. laste ned og installere “perl-doc” applikasjonen:

oracle@ubuntu:~# sudo apt-get install perl-doc
...
Setting up perl-doc (5.10.1-8ubuntu2) ...
oracle@ubuntu:~# perldoc perlintro

NAME
       perlintro -- a brief introduction and overview of Perl

DESCRIPTION
       This document is intended to give you a quick overview of the Perl programming language, along with pointers
       to further documentation.  It is intended as a "bootstrap" guide for those who are new to the language, and
       provides just enough information for you to be able to read other peoples' Perl and understand roughly what
       it's doing, or write your own simple scripts.
...

oracle@ubuntu:~# man perldoc
NAME
       perldoc - Look up Perl documentation in Pod format.

SYNOPSIS
       perldoc [-h] [-v] [-t] [-u] [-m] [-l] [-F] [-i] [-V] [-T] [-r] [-ddestination_file] [-oformatname]
       [-MFormatterClassName] [-wformatteroption:value] [-nnroff-replacement] [-X] [-L language_code]
       PageName|ModuleName|ProgramName

       perldoc -f BuiltinFunction

       perldoc -L it -f BuiltinFunction

       perldoc -q FAQ Keyword

       perldoc -L fr -q FAQ Keyword

       See below for more description of the switches.

DESCRIPTION
       perldoc looks up a piece of documentation in .pod format that is embedded in the perl installation tree ...

...

Eventuelt gå til http://docstore.mik.ua/orelly/perl4/prog/index.htm.

Post a Comment

Your email is never published nor shared. Required fields are marked *