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