Als PDF Downloaden!

Werbung
Tipps & Tricks: September 2013
Bereich:
DBA
Erstellung:
09/2013 HE
Versionsinfo:
11.2
Letzte Überarbeitung:
09/2013 HE
Perl und Oracle Instant Client
Installiert man die Oracle Datenbank Software, z. B. 11.2.0.3, so hat man alles was man braucht, um mit Perl SQL
Statements auf einer lokalen oder entfernten Datenbank zu verarbeiten.
Wenn sie aber lokal keine Perl Datenbank-Umgebung (wie im Monatstipp vom August 2012 beschrieben) zur
Verfügung haben, dann können Sie eine eigene Perl Umgebung mit dem DBI/DBD und dem Oracle Instant Client
aufbauen.
1. LINUX
a. Installation von Perl in eigenem Verzeichnis
Z. B. /home/oracle/perl - separat von dem eventuell schon vorinstallierten Perl
oracle:~> cd /home/oracle
/home/oracle:~> mkdir perl
/home/oracle:~> cd perl
Feststellen, welche Version von Perl zum Download bereitsteht: http://www.cpan.org/src
Download (hier verwenden wir die Version 5.16.1)
/home/oracle/perl:~> wget http://www.cpan.org/src/5.0/perl-5.16.1.tar.gz
Entpacken und installieren
/home/oracle/perl>:~ tar -zxvf perl-5.16.1.tar.gz
/home/oracle/perl:~> cd perl-5.16.1
/home/oracle/perl/perl-5.16.1:~>
/home/oracle/perl/perl-5.16.1:~> ./Configure -des -Dprefix=/home/oracle/localperl
/home/oracle/perl/perl-5.16.1:~> make install
Welche Perl Versionen sind nun installiert ?
Vorinstallertes Perl vom Linux
/oracle:~> which perl
/usr/bin/perl
oracle:~> perl -v
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 1 von 9
This is perl, v5.8.8 built for x86_64-linux-thread-multi
Neues, soeben installiertes Perl
PATH setzen für neues Perl
/home/oracle:~> export PATH=/home/oracle/perl/bin:$PATH
/home/oracle/perl/bin:~> ./perl -v
This is perl 5, version 16, subversion 1 (v5.16.1) built for x86_64-linux
b. Installation von DBI Modul
(Ist bei der Perl Installation nicht dabei)
oracle:~> cd /home/oracle
/home/oracle:~> mkdir perlmodule
/home/oracle:~> cd perlmodule
Feststellen, welche Version des DBI Modules zum Download bereitsteht :
http://search.cpan.org/CPAN/authors/id/T/TI/TIMB
Download (hier verwenden wir die Version 1.622)
/home/oracle/perlmodule:~> wget
http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.622.tar.gz
Entpacken und installieren
/home/oracle/perlmodule:~> tar -zxvf DBI-1.622.tar.gz
/home/oracle/perlmodule:~> cd DBI-1.622
/home/oracle/perlmodule/DBI-1.622:~> /home/oracle/perl/bin/perl Makefile.PL
PREFIX=~/localperl
/home/oracle/perlmodule/DBI-1.622:~> make
/home/oracle/perlmodule/DBI-1.622:~> make install
c. Installation von Oracle Instant Client
Oracle www.oracle.com/technetwork/index.html
- Downloads
- Database
- Instant Client (for Linux)
1.
2.
3.
Download the basic instant client
Download the sdk instant client
Download the sqlplus instant client
Hier verwenden wir die Instant Client Version: 11.2.0.3
Entpacken der Files
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 2 von 9
oracle:~> cd /home/oracle
/home/oracle:~> mkdir instant_client
oracle@s-tl-021 [HLT1]:~/instant_client> unzip
instantclient-basic-linux.x64-11.2.0.3.0.zip
oracle@s-tl-021 [HLT1]:~/instant_client> unzip
instantclient-sdk-linux.x64-11.2.0.3.0.zip
oracle@s-tl-021 [HLT1]:~/instant_client> unzip
instantclient-sqlplus-linux.x64-11.2.0.3.0.zip
d. Installation von DBD Modul Oracle
(Ist bei der Perl Installation auch nicht dabei)
Feststellen, welche Version des DBD-Oracle Modules zum Download bereitsteht:
http://search.cpan.org/CPAN/~pythian
Download (hier verwenden wir die Version 1.52)
oracle:~> cd /home/oracle/perlmodule
/home/oracle/perlmodule:~> wget
http://search.cpan.org/CPAN/~pythian/DBD-Oracle-1.52.tar.gz
Setzen der Umgebungsvariablen
/home/oracle/perlmodule:~> export
ORACLE_HOME=$HOME/instant_client/instantclient_11_2
/home/oracle/perlmodule:~> export LD_LIBRARY_PATH=$ORACLE_HOME
Entpacken und installieren
/home/oracle/perlmodule:~> tar -zxvf DBD-Oracle-1.52.tar.gz
/home/oracle/perlmodule:~> cd DBD-Oracle-1.52
/home/oracle/perlmodule/DBD-Oracle-1.52:~> /home/oracle/perl/bin/perl Makefile.PL
PREFIX=~/perl
/home/oracle/perlmodule/DBD-Oracle-1.52:~> make
/home/oracle/perlmodule/DBD-Oracle-1.52:~> make install
e. Testen der Installation
/home/oracle:~> perl -MDBI -le 'print DBI->VERSION()';
1.622
/home/oracle:~> perl -MDBD::Oracle -le 'print $DBD::Oracle::VERSION;'
1.52
f. Anlegen der TNSNAMES.ora
/home/oracle:~> cd instant_client/instantclient_11_2
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 3 von 9
/home/oracle/instant_client/instantclient_11_2:~> mkdir network/admin
/home/oracle/instant_client/instantclient_11_2:~> vi network/admin/tnsnames.ora
ORCL=
(DESCRIPTION =
(SDU = 32767)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST = <HOSTNAME>)
(PORT = <PORT>))
)
(CONNECT_DATA =
(SERVICE_NAME = <SID>)
)
)
g. Test mit einem Perl Skript
Skript: test_DBI_01.pl
#!/usr/bin/env perl
use strict;
use DBI;
use DBD::Oracle;
my @row;
my $oracle_user="scott";
my $oracle_password="tiger";
#### Connect zur Datenbank
my $dbh = DBI->connect("DBI:Oracle:ORCL",$oracle_user,$oracle_password,
{AutoCommit => 0, RaiseError => 1 });
if($dbh){
print "\n";
print("Connected als user $oracle_user\n");
} else {
print "\n";
print("Fehler beim connect!\n");
exit;
}
#### Prepare und Execute ein SQL Statement
my $sth = $dbh->prepare("SELECT table_name,tablespace_name FROM user_tables");
$sth->execute();
print "\n";
print("table_name \ttablespace_name\n");
print("-----------\t---------------\n");
while(@row = $sth->fetchrow_array()){
printf "%-15s %-15s\n",$row[0], $row[1];
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 4 von 9
}
#### Disconnect von der Datenbank
if($dbh->disconnect){
print "\n";
print("Disconnected\n");
} else {
print "\n";
print("Fehler beim disconnect\n");
}
Setzen der Umgebungsvariablen
/home/oracle/perlmodule/DBD-Oracle-1.52:~> export
ORACLE_HOME=$HOME/instant_client/instantclient_11_2
/home/oracle/perlmodule/DBD-Oracle-1.52:~> export LD_LIBRARY_PATH=$ORACLE_HOME
/home/oracle:~> export PATH=/home/oracle/localperl/bin:$PATH
Ausführen des Skripts
/home/oracle:~> ./test_DBI_01.pl
Wenn diese Fehlermeldung auftritt, dann ist NLS_LANG nicht gesetzt!
DBI connect('ORCL','scott',...) failed: ORA-12705: Cannot access NLS data files or
invalid environment specified (DBD ERROR: OCISessionBegin) at ./test_DBI_01.pl line
13.
oracle@[ORCL]:~/perl>
Setzen NLS_LANG z. B. auf AMERICAN_AMERICA.AL32UTF8
oracle@[ORCL]:~/perl_script> export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
/home/oracle:~> ./test_DBI_01.pl
Connected als user scott
table_name
----------DEPT
BONUS
SALGRADE
EMP
tablespace_name
--------------USERS
USERS
USERS
USERS
Disconnected
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 5 von 9
2. WINDOWS
a. Installation von Perl
Download: z. B. ActivePerl (Version 5.16)
Installation : Microsoft Installer (MSI) ActivePerl-5.16.1.1601-MSWin32-x64-296175.msi
C:\Program Files (x86)\Perl64
DBI/DBD::Oracle Modul wird mit installiert!
b. Test der installierten Perl Version
C:\Users\> set Path=C:\Program Files (x86)\Perl64\site\bin;%PATH% (Wird normalerweise
bei der Installation schon gesetzt) !
C:\Users\>perl -v
This is perl 5, version 16, subversion 1 (v5.16.1) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)
C:\Users\>perl -MDBI -le "print DBI->VERSION()";
1.622
C:\Users\>perl -MDBD::Oracle -le "print $DBD::Oracle::VERSION";
1.50
C:\Users\>
c. Installation von Oracle Install Client
Oracle www.oracle.com/technetwork/index.html
- Downloads
- Database
- Instant Client (for Microsoft Windows)
1.
2.
3.
Download the basic instant client
Download the sdk instant client
Download the sqlplus instant client
Hier verwenden wir die Instant Client Version: 11.2.0.3
Entpacken der 3 Files
z.B. nach
: c:\oracle\instant_client
Gibt dann Verzeichnis : c:\oracle\instant_client\instantclient_11_2
Oracle_Home setzen
: set ORACLE_HOME=c:\oracle\instant_client\instantclient_11_2
d. Installation eventuell des neuesten DBD Moduls
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 6 von 9
PPM (Programmer's Package Manager) ist ein Package Management Utility für ActivePerl. Es wird automatisch
mit ActivePerl installiert.
PPM ist häufig auf Microsoft-Windows-Betriebssystemen anzutreffen, da es dort üblicherweise keine C- und
C++-Kompiler gibt.
C:\Users\>ppm search DBD
(gekürzte Ausgabe)
................................
13: DBD-Oracle 1.52
................................
c:\Users\>
Man kann nun mit der Package Nummer 13 das DBD Modul installieren.
c:\Users\>ppm install 13
Downloading DBD-Oracle-1.52...done
Unpacking DBD-Oracle-1.52...done
Generating HTML for DBD-Oracle-1.52...done
Updating files in site area...done
34 files installed
c:\Users\>
e. Testen der Installation
C:\Users\>perl -MDBD::Oracle -le "print $DBD::Oracle::VERSION";
1.52
f. Anlegen der TNSNAMES.ora
Erstellen der TNSNAMES.ora in "c:\oracle\instant_client\instantclient_11_2\network\admin"
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <hostname>)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = ORCL)
)
)
e. Test mit einem Perl Skript
Skript: test_DBI_02.pl
#!/usr/bin/env perl
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 7 von 9
use strict;
use DBI;
use DBD::Oracle;
my $oracle_user="scott";
my $oracle_password="tiger";
my $oracle_sid="ORCL";
#### Connect zur Datenbank
my $dbh = DBI->connect("DBI:Oracle:$oracle_sid",$oracle_user,$oracle_password,
{AutoCommit => 0, RaiseError => 1 });
if($dbh){
print "\n";
print("Angemeldet als Benutzer $oracle_user\n\n");
} else {
print "\n";
print("Fehler beim connect!\n");
exit;
}
#### Prepare und Execute ein SQL Statement
my $sql = "SELECT empno,ename,job,mgr,sal,deptno FROM emp WHERE job LIKE ? AND sal > ? ";
my $sth = $dbh->prepare($sql);
$sth->bind_param(1,"MAN%");
$sth->bind_param(2,"1500");
$sth->execute();
my($empno, $ename, $job, $mgr, $sal, $deptno);
$sth->bind_columns(\$empno, \$ename, \$job, \$mgr, \$sal, \$deptno);
print "Ausgabe aller Manager deren Gehalt groesser als 1500 ist \n";
print "======================================================== \n\n";
printf "EMPNO %1s ENAME %2s JOB %7s MGR %4s SAL %2s DEPTNO \n";
printf "----- %1s ----- %2s --- %7s --- %4s --- %2s ------ \n";
print "\n";
while( $sth->fetch() ) {
printf "%4s %8s %10s %8s %8d %4s \n",$empno, $ename, $job, $mgr, $sal, $deptno;
}
$sth->finish();
$dbh->disconnect;
Setzen der Umgebungsvariablen
set ORACLE_HOME=c:\oracle\instant_client_11203\instantclient_11_2
set Path=C:\Program Files (x86)\Perl64\site\bin; (Sollte schon gesetzt sein) !
set PATH=c:\oracle\instant_client\instantclient_11_2;%PATH%
Ausführen des Skripts
c:\Users>perl test_DBI_02.pl
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 8 von 9
Angemeldet als Benutzer scott
Ausgabe aller Manager deren Gehälter groesser als 1500 ist
==========================================================
EMPNO
-----
ENAME
-----
JOB
---
MGR
---
SAL
---
DEPTNO
------
7566
7698
JONES
BLAKE
MANAGER
MANAGER
7839
7839
2975
2850
20
30
c:\Users>
Zusammenfassung
Wie man sieht, lassen sich auch mit einer eigenen installierten Perl Umgebung relativ einfach SQL-Statements
auf einer entfernten Oracle Datenbank ausführen.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 9 von 9
Herunterladen