Oracle DB – Schulungsumgebung auf dem Netbook

Um grundlegende Erfahrungen mit Oracle’s Vorzeigeprodukt zu sammeln benötigt man – entgegen hartnäckigen Gerüchten – beileibe keine Rechenboliden. Mein Playground-Setup läuft momentan in einer virtuellen Maschine mit schlappen 380MB RAM und 7 GB Festplattenspeicher – auf einem aktuellen Netbook mit gerade mal 1GB RAM! :-)

Wie man die Oracle DB Software in der kostenfreien XE-Variante schmerzfrei unter Debian Squeeze installiert, die notwendigsten Basics konfiguriert und via Python darauf zugreift ist Inhalt dieses Artikels. Er richtet sich an Oracle Newbies (wie mich).

Download der Software

Nachdem man sich in der VM-Software seiner Wahl ein frisches Debian eingerichtet hat, ist noch die Linux kernel AIO access library nachzuinstallieren:

apt-get install libaio1

Anschließend holt man sich die Oracle Software in der sog. “Express Edition” (XE). Diese ist kostenfrei nutzbar, jedoch im Funktionsumfang eingeschränkt (z.B. Datenvolumen <= 4GiB, CPU & RAM Beschränkungen, bla) - für's Lernen von Basics reicht sie allemal aus. :-)
Man achte darauf, Server- und Client-Package zu ziehen, also folgende:

	oracle-xe-client_10.2.0.1-1.0_i386.deb
	oracle-xe-universal_10.2.0.1-1.0_i386.deb

Und wenn wir gerade dabei sind, ziehen wir auch gleich noch das Python-Modul cx_Oracle in der Variante cx_Oracle-5.0.4-10g-unicode-py25-1.i386.rpm.

Installation

Die Installation ist eigentlich idiotensicher. Defaultwerte kann man übernehmen, allerdings sollte man die Frage, ob die DB beim Booten automatisch gestartet werden soll, IMHO unbedingt mit No beantworten. Dies schont zum einen die Ressourcen bei Nichtgebrauch der DB und zum anderen lernt man dadurch etwas hilfreiches (später), also:

dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb
dpkg -i oracle-xe-client_10.2.0.1-1.0_i386.deb

/etc/init.d/oracle-xe configure

Damit ist die DB einsatzbereit und ein hübsches (nützliches) Webinterface bereits über http://127.0.0.1:8080/apex zu erreichen. Da wir in unserer schlanken VM natürlich keinen X-Server laufen lassen, nützt uns das aber noch nix. ;-)

Console, oder “In the beginning there was the TTY”

Wir werden daher User Oracle

su - oracle

sollten so automatisch im verzeichnis /usr/lib/oracle/xe landen, setzen notwendige Environment-Variablen (ORACLE_HOME etc.)

. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh

und sollten nun das Tool sqlplus nutzen können, um mit der Datenbank zu sprechen.

Um sich als User sys mit dem beim configure-script vergebenen Passwort (hier “password”) anzumelden, tippe man:

oracle@vmora:~$ sqlplus system/password@xe

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 8 14:10:13 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL>
SQL> SELECT SYSDATE from dual;
SYSDATE
---------
08-MAR-11
SQL> SELECT SQRT(2) FROM dual;
   SQRT(2)
----------
1.41421356
SQL> quit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Klicki-Bunti Interface

OK. So obiges funktioniert ist es jetzt an der Zeit, dem Webinterface abzugewöhnen nur auf’s Loopback (127.0.0.1) zu lauschen. Googlen fördert eine mitgelieferte PL/SQL-Procedure zu Tage, die man lediglich aufrufen muss.

Also wieder via sqlplus mit der DB verbinden:

oracle@vmora:~$ sqlplus system/password@xe

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 8 15:34:30 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Die Procedure aufrufen:

SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

PL/SQL procedure successfully completed.

SQL> quit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Und schon ist das Webinterface über alle im OS konfigurierten NICs erreichbar. Innerhalb einer VM ohne X-Server ist das sehr praktisch (ja, das VM-Netzwerkinterface muss an das des Wirts gebridged sein).

…oder lieber Python

sqlplus geht mangels History, Cmd-Completion etc. ziemlich schnell auf den Senkel, weswegen – zumindest ich – lieber gleich meine momentane Lieblingssprache Python verwenden will. An Bord hat Python IMHO leider keine Oracle-Bindings. Es gibt aber z.B. das Python-Modul cx_Oracle. Für’s Kompilieren dieses Moduls benötigt man noch einige Development-Packages – diese kann man zwar von Oracle frei herunterladen, aber den Aufwand sparen wir uns. Stattdessen haben wir ja schon einen passenden RPM-Build heruntergeldaen. Dieses wandeln wir via alien in ein DEB um und installieren es.

alien cx_Oracle-5.0.4-10g-unicode-py25-1.i386.rpm
dpkg -i cx-oracle_5.0.4-2_i386.deb

Fertig. :-) Jetzt können wir – vorausgesetzt die Environment-Variablen sind passend gesetzt (LD_LIBRARY_PATH) so komfortabel wie von anderen DBs (MySQL,SQLLite etc.) gewohnt auf die DB zugreifen:

#!/usr/bin/env python
import cx_Oracle

if __name__ == '__main__':
    sSQL = unicode('SELECT SYSDATE FROM dual')
    print type(sSQL)

    con = cx_Oracle.connect(unicode("system/password@127.0.0.1"))
    print con.version
    cur = con.cursor()

    cur.execute(sSQL)

    for result in cur:
        print result
    cur.close()
    con.close()

Falls es hier zu einem “ImportError: libclntsh.so.10.1: cannot open shared object file: ” kommt, hat man höchstwahrscheinlich nicht aufgepasst bzw. vergessen obiger Erwähnung zum LD_LIBRARY_PATH zu folgen. ;-) (siehe cat $ORACLE_HOME/app/oracle/product/10.2.0/server/bin/oracle_env.sh).

Voila! Ein großer Teil des Rattenschwanzes von Oracle-Terminologie liegt nun – empirisch erfahrbar & mobil – vor uns. Jetzt müssten wir uns eigentlich nur noch aufraffen eine hübsche Django-Applikation darauf zu deployen, Backups & Restores zu triggern, das Data Dictionary zu erforschen oder Ähnliches. Happy playing!

Autoboot OFF, reboot und nun???

Achso, wer – wie ich – keine nebulösen Automatismen mag (Kontrollfreak?) und die DB nicht automatisch starten lässt, hat als Oracle Newbie nach einem Reboot ein Problem.

Die DB lässt sich NICHT – wie man naiv erwarten könnte – einfach über das runlevel-script /etc/init.d/oracle-xe start starten! Das wäre zu einfach. :-)

Deshalb:

su - oracle

# 1. datenbank starten

$ sqlplus /nolog
SQL> CONNECT SYS/sys_password as SYSDBA
SQL> STARTUP

# oder (wenn man 'ne BASH hat) als einzeiler:

echo -e "CONNECT SYS/password as SYSDBA\nSTARTUP" | sqlplus /nolog

# 2. listener starten

lsnrctl start
This entry was posted in Enterprise, Tutorial and tagged , , , , . Bookmark the permalink.
  • pbauss

    Sehr hilfreich, ich danke Ihnen! (“Debian Newbie”) Ein Tip: Nutzen Sie doch den Oracle-eigenen SQL Developer (kostenlos) – SQLPlus ist tatsächlich eine Krücke.