Aus Linux-Magazin 04/2001

Das Oracle-DBMS unter Linux

Oracle ist zum Synonym für Enterprise-Datenbanken geworden, seit mehr als zwei Jahren auch auf Linux. Lesen Sie, was beim Installieren zu beachten ist und was Oracle mit neuen Features wie LVM und Kernel 2.4 anfängt.

Das erste Oracle für Linux, Oracle 8.0.5, ist seit Oktober 1998 verfügbar und seit letztem Jahr wertet Oracle Linux als “strategisches Betriebssystem”, was bedeutet, dass Updates etwa zeitgleich mit denen für Solaris oder Microsoft NT erscheinen. Die Relevanz von Linux für Oracle unterstreicht zudem die im Februar dieses Jahres erschienene Version 8.1.7.0.1 mit dem Oracle Parallel Server. Damit ist es erstmals möglich, unter Linux Oracle-Cluster mit Lastverteilung aufzubauen.

Bei neueren GNU/Linux-Distributionen mit Kernel 2.4 lohnt sich zudem ein Blick auf Raw-Devices und das Logical Volume Management (LVM). Auf beides wird am Ende des Artikels eingegangen. Der erste Teil richtet sich eher an den Oracle-Neuling mit Erfahrungen bei SQL-Datenbanken und Linux.

Wichtiger Hinweis: Unter http://technet.oracle.com kann man sich nach einmaliger kostenloser Registrierung sämtliche Handbücher in Form von PDFs und teilweise auch in HTML herunterladen. Auch die Software selbst, mit einer kostenlosen Entwicklerlizenz, ist dort zu bekommen.

Das Oracle-DBMS benutzt die Pascal-ähnliche integrierte und prozedurale Programmiersprache PL/SQL zum Schreiben von Funktionen für Trigger sowie Stored Procedures und seit Oracle 8i auch Java. Die JVM ist dabei in der Datenbank selbst integriert. Oracle bewirbt seine Datenbank als “objekt-relational”, allerdings fehlt ein wichtiges Feature, mit dem Postgres aufwarten kann, nämlich die Vererbung zwischen Tabellen. So bleibt im Prinzip nur, dass man Tabellen Funktionen zuordnen kann.

 

Systemvoraussetzungen

Die Programmdateien benötigen in der Standard Edition (8.1.6.1) mindestens 600 MByte freien Plattenplatz In der Enterprise Edition (8.1.7) sind es bereits 770 MByte. Für die Datenbanken ist weiterer Speicherplatz nötig. An RAM sollte man 128 MByte oder mehr haben.

Entsprechend konfiguriert läuft Oracle aber auch auf einem Rechner mit 32 MByte, was zwar nicht für die Praxis, wohl aber für Schulung und Weiterbildung interessant sein kann. Zertifiziert ist Oracle unter anderem für die Linux-Distributionen Red Hat 6.2, SuSE 6.4 und Turbo Linux 6.0, doch im Prinzip läuft Oracle mit jedem Glibc-2.1.3 System.

Filesystem

Ist der Plattenplatz sichergestellt, muss man sich entscheiden, wohin Oracle installiert werden soll. In der “Oracle 8i Administrators Reference” findet sich dazu die OFA (Oracle Flexible Architecture), das ist ein Filesystem-Standard für Oracle Installationen. Dort ist festgelegt, dass es für jede Platte einen Eintrag im Root-Dateisystem geben soll, der mit Buchstaben anfängt und mit Ziffern endet, etwa /u01, /u02.

Man muss sich zwar nicht an die OFA halten, doch sobald man es mit Datenbanken auf unterschiedlichen Rechnern zu tun bekommt, erweist sich die OFA als große Hilfe.

User, Gruppen und Umgebungsvariablen

Vor der Installation müssen ein bis drei Unix-Gruppen angelegt werden:

  • Database Administrator ( dba) mit vollen Zugriff auf die gesamte Datenbank
  • Database Operator ( dboper), deren Gruppenmitglieder die Datenbank starten und beenden dürfen.
  • Oracle Installer ( oinstall): Mitglieder dürfen Oracle-Installationspro-gramme laufen lassen.

Im einfachsten Fall übernimmt die Gruppe dba die Funktionalität der anderen Gruppen. Weiter ist ein User anzulegen, dem die Installation gehört und der Mitglied der Gruppe dba sein sollte. Aus Sicherheitsgründen ist eine Installation als Root unmöglich.

Shared Memory

Oracle benutzt für die Kommunikation zwischen den verschiedenen Prozessen Shared Memory. Per Default ist die Größe von Shared-Memory-Segmenten auf 32 MByte limitiert. Oracle empfiehlt 4 GByte, allerdings spielt da Linux als 32-Bit-Betriebssystem nicht ganz mit, so dass man es mit 1 bis 2 GByte versuchen sollte:

echo 2147483647 > 
  /proc/sys/kernel/shmmax

Unter Debian oder Red Hat kann man diesen Wert zudem in /etc/sysctl.conf eintragen und unter SuSE das obige Kommando in /etc/rc.d/boot.local vermerken, so dass er bei jedem Systemneustart automatisch gesetzt wird.

Setzt man diese Grenze nicht, muss Oracle eventuell mehrere Shared- Memory-Segmente anlegen oder startet – je nach Konfiguration – überhaupt nicht.

Bereits vor der Installation empfiehlt es sich, die in dem Kasten auf der folgenden Seite beschriebenen Umgebungsvariablen zu setzen, da diese teilweise auch während der Installation verwendbar sind.

Installation

Auf der Installations-CD gibt es das Programm runInstaller, das den Universal Installer startet. Es ist GUI-basiert und in Java implementiert. Die CD enthält ein Java Runtime Environment 1.1.8 von IBM, so dass man kein eigenes Java installieren muss. Anschließend führt die Installation durch folgende Schritte:

  • Angabe, wo man die DBMS-Programmdateien installieren will. Die Vorgabe ist $ORACLE_HOME, falls diese Variable gesetzt ist.
  • Wenn es das erste installierte Oracle-Produkt ist, muss ein Pfad für das Inventory der Oracle Installationsprogramme bestätigt werden.
  • Ein Gruppenname, wer berechtigt ist, Oracle-Programme zu installieren, etwa dba.
  • Ein Skript als Root ausführen.
  • Entscheiden, ob ein Server oder ein Client zu installieren ist. Bei der Enterprise Edition hat man zudem die Wahl, einen Management Server zu installieren, der die Administration aller Oracle-Produkte über ein grafisches Front-End ermöglicht. Unter Linux macht das jedoch noch Probleme.
  • Beim Server kann man sich zwischen typical, minimal oder custom entscheiden. Da man Programmteile problemlos nachinstallieren kann, ist die Entscheidung an dieser Stelle unkritisch. Bei genügend Platz ist die Wahl von custom mit anschließender Auswahl aller Optionen keine schlechte Idee.
  • Man wird gefragt, ob man nach der Installation eine Datenbank erzeugen möchte. Hier kann man auch mit nein antworten und das dahinter stehende Tool dbassist später selber aufrufen.
  • Ein zweites Skript als Root ausführen.
  • Konfiguration des Netzwerkzugriffs auf die Datenbank mit netca.

Erfahrene Administratoren können den Installer auch nicht-interaktiv über eine Textdatei steuern.

 

Datenbank

Hat man das DBMS und eine Datenbank installiert, besteht Letztere aus mindestens vier unterschiedlichen Dateitypen:

  • Initialisierungsdatei: In dieser Textdatei stehen Initialisierungsparameter wie die verwendete Blockgröße, Buffergröße oder der Pfad des Controlfiles. Standardmäßig suchen einige Oracle-Tools nach einer Datei namens ${ORACLE _HOME}/dbs/init${ORACLE_SID}.ora, sonst muss man den Pfad der Datei von Hand übergeben.
  • Kontrolldatei: Hier sind unter anderem die Namen aller übrigen Dateien vermerkt. Sicherheitshalber ist die Kontrolldatei spiegelbar.
  • Datendatei: Hier legt Oracle die eigentlichen Daten der Datenbank ab. Jede Datendatei ist einem Tablespace zugeordnet und kann, da Oracle noch nicht den Large File Support unterstützt, maximal 2 GByte groß sein. Ein Tablespace nimmt Datenbankobjekte wie Tabellen-Indizes oder BLOBs auf. Er kann auch aus mehreren Dateien bestehen, doch das macht nur dann Sinn, wenn diese auf unterschiedlichen Platten liegen, da Oracle abwechselnd auf sie zugreift, um ein RAID0 zu simulieren. Oracle empfiehlt mehrere Tablespaces anzulegen, um die Verfügbarkeit der Datenbank zu erhöhen. So kann man beispielsweise einen Tablespace im laufenden Betrieb offline setzen und recovern, während die anderen Tablespaces verfügbar bleiben.
  • Redologs: Von diesem Typ braucht man mindestens zwei Dateien, da sie von Oracle rotiert werden. Für die Performance sind sie wichtig, weil Oracle alle Änderungen hier zunächst in kurzer Form notiert, noch bevor sie in den Datendateien landen. Außerdem spielen sie eine wichtige Rolle beim Backup und Recovery. Sie können von Oracle gespiegelt und auch archiviert werden.

Neben diesen Dateien schreibt Oracle noch einen Satz von Logdateien – den so genannten Tracefiles -, deren Pfad außerdem in der init.ora-Datei festgehalten ist.

Weitere Utilities

Ein kommandozeilenorientiertes Programm für den Zugriff auf die Datenbank ist sqlplus. Es besitzt eigene Befehle fürs Administrieren der Datenbank und kann PL/SQL- und SQL-Anweisungen an die Datenbank absetzen. Bis auf das Darstellen von binären Daten kann man mit diesem Tool praktisch alles mit der Datenbank machen.

Um das Starten und Herunterfahren der Datenbank in die Systeminitialisierung einzubinden, gibt es die zwei Skripte dbstart und dbshut. Sie verwenden jene in /etc/oratab eingetragenen Datenbanken, die mit einem Y als letztem Parameter vermerkt sind. Allerdings liefern die Skripte keine Fehlercodes zurück, so dass es auch dann zu einer Erfolgsmeldung kommt, wenn die Datenbank nicht gestartet oder heruntergefahren werden konnte.

Benötigte Umgebungsvariablen

ORACLE_HOME=/u01/app/oracle/product/8.1.7
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
ORACLE_NLS33=${ORACLE_HOME}/ocommon/nls/admin/data 
NLS_LANG=German_Germany.WE8ISO8859P1
LANG=de_DE
ORACLE_SID=INNO

Raw Devices

DBMS bringen in der Regel ihren eigenen Buffermechanismus beim Zugriff auf Datendateien mit. Da sie mehr über ihr IO-Verhalten wissen als ein darunter liegendes Betriebssystem, können sie in der Regel immer effizienter arbeiten als dieses.

Deshalb ist es sinnvoll, mit Raw Devices den Buffer des Betriebssystems zu umgehen. Bei Clustern mit dem Oracle Parallel Server sind Raw Devices unverzichtbar. Dann teilen sich mehrere Linux-Rechner eine Festplatte, und ein Buffering würde dazu führen, dass ein Rechner auf die gemeinsame Platte schreibt, während die anderen noch mit alten Daten in ihrem Buffer arbeiten würden.

Raw Devices sind ab Kernel 2.4 verfügbar, für die 2.2er Kernel existiert ein Patch, das beispielsweise Red Hat integriert hat. So legt man ein Raw Device an:

raw /dev/raw/raw1 /dev/sdc2 
chown oracle.dba /dev/raw/raw1

Bei der Benennung von Datendateien unter Oracle gibt man anschließend nur den Pfad auf das Raw Device an. Um den Inhalt des Raw Devices für Backups zu kopieren, braucht man allerdings eine neuere Version des dd, etwa aus den GNU-Fileutils 4.0.41 von ftp://alpha.gnu.org. Sonst erhält man die Fehlermeldung Invalid Argument. Red Hat 6.2 kommt bereits mit einer angepassten dd-Version, da es schon Raw Devices im 2.2er Kernel unterstützt.

Logical Volume Management

Wer Raw Devices verwendet, ist bei der Größe von Tablespaces an die Größe von zuvor angelegten Partitionen gebunden. Oft weiß man aber nicht, wie viel Platz ein Tablespace im Laufe der Zeit belegen wird. Mit dem ebenfalls ab Kernel 2.4 verfügbaren Logical Volume Management kann man diesen Nachteil wieder wettmachen. Die Utilities dafür sind unter http://www.sistina.com/lvm/ zu finden.

Das Konzept von LVM ist es, die bisherigen Partitionen – jetzt Physical Volumes genannt – zu einer Volume Group zusammenzufassen und diese anschließend in Logical Volumes aufzuteilen, die nachträglich in der Größe verändert werden können.

Partitionen, die man als Physical Volumes für LVM verwendet, müssen den Typ hexadezimal 8E haben. Ist dieser mit fdisk gesetzt, kann man ein Logical Volume mit

vgscan
pvcreate /dev/sdb1 
vgcreate odata /dev/sdb1
lvcreate -L1m -nuser odata

anlegen und darauf ein Raw Device einrichten:

raw /dev/raw/raw1 /dev/odata/user

Fazit

Oracle unter Linux steht anderen Oracle-Implementierungen inzwischen um nichts mehr nach: erstens durch wichtige Features wie die Unterstützung von Raw Devices und Logical Volume Management im 2.4er Linux-Kernel, zweitens durch die Wertung von Linux als strategisches Betriebssystem durch Oracle. ( uwo)

Der Autor

Mark-Andre Hopf arbeitet als Software-Entwickler bei der innominate AG in Berlin.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben