Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  2/2006  Pfeil  Datenbanken
suche: 
Der Artikel richtet sich an Oracle Datenbank- administratoren, die den Mac für ihre Oracle Datenbanken nutzen.

Glossar

NetInfo Directory
Interner Verzeichnisdienst,der unter Mac OS unteranderem zur Verwaltung der lokalen Benutzer und Gruppen dient.
LDAP3
Verzeichnisdienst unter Unix, ähnlich NetInfo Directory unter Mac OS.
Open Flexible Architecture (OFA)
Genormte Verzeichnisstruktur für den Aufbau eines Oracle DB Servers.
SystemStarter
Daemon unter Mac OS zum Starten von Diensten, vergleichbar mit inetd unter Unix.

Larry E. auf der Apfelplantage

Oracle unter Mac OS X

Wer den Begriff Apple hört, denkt entweder an iPods und iTunes oder an Golden Delicious, Boskop und Cox Orange. Dieser Artikel wird allerdings weder eine Reise zu den unterschiedlichen Apfelplantagen in dieser Welt, noch eine Abhandlung über Apples kleines "Kultobjekt". Vielmehr soll die produktive Seite des Apfels gezeigt werden, der Einsatz von Mac OS X als Oracle Datenbankserver.

Mac OS X und Datenbanken

Schon seit der Oracle Version 9i existiert ein Release für das Betriebssystem Mac OS X, das jedoch nie den Entwicklungsstatus verlassen hat. Erst mit Version 10 schaffte Oracle den kompletten Sprung auf den Mac.

Zuvor hatten Anwender nur die Wahl zwischen den beiden "Datenbanksystemen": FileMaker Pro und Sybase. Um der Konkurrenz das Feld nicht kampflos zu überlassen, fiel bei Oracle Anfang 2000 die Entscheidung, auch Mac OS X in das Portfolio der zu unterstützenden Architekturen aufzunehmen.

Ob Larry Ellison schon damals von Steve Jobs Plänen wusste, zur Intel Plattform zu wechseln, bleibt wohl ein Geheimnis der beiden Freunde und Geschäftspartner.

Vorbereitungen für die Installation

Zur Zeit ist ausschließlich Oracle 10g Release 1 für Mac OS Server 10.3 verfügbar. Doch auch die Installation unter der Standard Mac OS 10.4 Version ist möglich, wenngleich diese nicht vom Oracle Support abgedeckt wird. Vorausgesetzt wird die Installation der Apple Developer Tools [1].

Die Installation von Oracle auf Mac OS X unterscheidet sich nicht fundamental von der bisherigen Herangehensweise. Vielmehr gibt es kleine Unterschiede, vergleichbar mit einer Installation unter Windows zu einer Installation unter Solaris.

Dies fängt beim Einrichten der Benutzer gleich an. Mac OS X verwaltet die lokalen Benutzer-Accounts und Gruppen nicht, wie üblich, in der /etc/passwd bzw. der /etc/group.

Diese werden bei Mac OS zentral in einem Verzeichnis (NetInfo Directory) hinterlegt, vergleichbar mit einem LDAP3-Dienst. Zum Erstellen des Benutzers "oracle" und der beiden Gruppen "oinstall" und "dba" kann die grafische Oberfläche "NetInfo Manager" herangezogen werden. Effizienter geschieht dies über das Terminal.

Anlegen der Gruppen "oinstall" und "dba":

sudo nicl . -create /groups/oinstall
sudo nicl . -append /groups/oinstall gid 600
sudo nicl . -append /groups/oinstall passwd "*"
sudo nicl . -create /groups/dba
sudo nicl . -append /groups/dba gid 600
sudo nicl . -append /groups/dba passwd "*"

Anlegen des Benutzers Oracle:

sudo nicl . -create /users/oracle
sudo nicl . -append /users/oracle uid 500 
sudo nicl . -append /users/oracle gid 600
sudo nicl . -append /users/oracle shell /bin/bash
sudo nicl . -append /users/oracle home /Users/oracle

Dem Benutzer Oracle die Gruppe "dba" zuteilen:

sudo nicl . -append /groups/dba users oracle

Im Anschluss erfolgt das Erstellen des Home-Verzeichnisses unter /Users/oracle und die Zuweisung eines Passworts in gewohnter Unix-Manier.

sudo mkdir /Users/oracle
sudo chown oracle:oinstall /Users/oracle
sudo passwd oracle

Zu den weiteren Vorbereitungen zählen das Anlegen der OFA-Verzeichnisstruktur und das Überprüfen von Kernel-Parametern. Vorgaben für letztere können dem Dokument "Oracle Installation Guide for Mac OS X" entnommen werden, welches im Installationsarchiv liegt und unter [2] heruntergeladen werden kann.

Die Kernel-Parameter können mit dem Kommando sysctl abgefragt und gesetzt werden, wie auf den meisten Unix-Systemen. Auf unserem Testrechner mussten nur zwei Parameter erhöht werden:

sudo sysctl -a | grep maxproc
sudo sysctl -w kern.maxproc=2048
sudo sysctl -w kern.macprocperuid=2048

Damit die Änderungen auch nach einem Reboot gesetzt bleiben, ist es ratsam, diese unter /etc/sysctl.conf zu hinterlegen.

Das Setzen der Shell Limits ist wiederum Mac OS spezifisch. Die Limits werden in der Datei /System/Library/StartupItems/IPServices eingetragen. Abbildung 1 zeigt diese Datei. Die eingetragenen Erweiterungen sind rot markiert.

StartService()
(
  if [ -a /etc/com.apple.named.conf.proxy ]
  then
  echo "Starting Internet address sharing"
  /usr/libexec/InternetSharing
  fi
  ulimit -Hu 2068	
  ulimit -Su 2068
  ulimit -Hn 65536
  ulimit -Sn 65536
}
Abb. 1: Das Setzen der Shell Limits. Die Erweiterungen sind farblich hinterlegt.

Damit ist der größte Teil der Vorbereitungen getroffen. Als nächstes sollte nach Möglichkeit die Benutzerumgebung des Benutzers Oracle definiert werden, indem die folgenden Variabeln in der Konfigurationsdatei .bash_profile gesetzt werden:

umask 022
export ORACLE_BASE=/Users/oracle/install
export ORACLE_HOME=/oracle/product/10g
export ORACLE_SID=BOSKOP
export PATH=$PATH:$ORACLE_HOME/bin

Installation der Software

Nun kann die Installation der Software unter dem Benutzer Oracle erfolgen. Dazu muss man das heruntergeladene cpio-Archiv entpacken und den Installer starten. Die nachfolgenden Java Dialoge dürften nun jedem DBA vertraut sein (siehe Abbildung 2).

Abb. 2: Der bekannte Oracle Installer. (vergrößern)

Die einzelnen Schritte der Installation sind identisch mit denen unter Unix bzw. Windows. Ist die Software erfolgreich installiert, kann anschließend mit Hilfe des Database Configuration Assistant (dbca) die Datenbank erstellt werden. Das Einrichten von Oracle Net wird vom Net Configuration Assistant (netca) im Anschluss übernommen. Abbildung 3 zeigt Oracle unter Mac OS X im Einsatz.


Abb. 3: Nach der Installation: Oracle unter Mac OS X in Aktion. (vergrößern)

SystemStarter statt inet Daemon

Mac OS X nutzt für das Starten und Stoppen von Diensten den SystemStarter und nicht, wie auf anderen Unix Systemen, den inet Daemon. Der SystemStarter sucht die Start-/Stoppskripte unter den folgenden Verzeichnissen:

Um eine Oracle Instanz nun automatisch beim Booten hochzufahren, können die in Abbildung 4 und 5 abgedruckten Beispielskripte verwendet werden. Hierfür müssen diese im Verzeichnis /Library/StartupItems/Oracle/ abgelegt werden.

#!/bin/bash
# Globale Variabeln
ORACLE_HOME=/oracle/product/10g
PATH=$PATH:$ORACLE_HOME/bin
ORACLE_OWNER=oracle
ORACLE_OWNER_PATH=/Users/oracle
ORACLE_SID=BOSKOP
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

export ORACLE_HOME PATH ORACLE_SID LD_LIBRARY_PATH

StartService()
{
  ConsoleMessage 'Starting Oracle listener...'
  su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"
  ConsoleMessage 'Started Listener.'

  ConsoleMessage 'Starting Oracle databases...'
  su - $ORACLE_OWNER -c $ORACLE_HOME/bin/dbstart
  ConsoleMessage 'Started Oracle database.'
}
StopService()
{
  ConsoleMessage 'Stopping Oracle databases...'
  su - $ORACLE_OWNER -c $ORACLE_HOME/bin/dbshut
  ConsoleMessage 'Stopped Oracle database.'

  ConsoleMessage 'Stopping Oracle listener...'
  su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/onsctl start"
  su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop"
  su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/onsctl stop"
  ConsoleMessage 'Stopped Listener.'
}
RestartService()
{
  StopService
  StartService
}
RunService "$1"
Abb. 4: Ein Beispielskript zum automatischen Starten und Stoppen von Oracle /Library/StartupItems/Oracle/Oracle).

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
	"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Description</key>
  <string>Oracle 10g Database Server</string>

  <key>Provides</key>
  <array>
    <string>Oracle 10g Database</string>
  </array>

  <key>Requires</key>
  <array>
    <string>Disks</string>
  </array>

  <key>Uses</key>
  <array>
    <string>Disks</string>
    <string>Network</string>
    <string>NFS</string>
  </array>

  <key>OrderPreference</key>
  <string>Late</string>
</dict>
</plist>
Abb. 5: Die zum Start- und Stoppskript dazugehörige plist Datei (/Library/StartupItems/Oracle/StartupParameter.plist).

Fazit

Während ich diesen Artikel schreibe, läuft die Datenbank nun schon seit drei Wochen unter Mac OS X. Bis auf die Schwierigkeiten bei der Installation (siehe Kasten "Wurm im Apfel"), läuft das System stabil.

Wurm im Apfel - Mögliche Fehler während der Installation

Bei der Installation von Oracle, insbesondere beim Erstellen der Datenbank mit Hilfe des Database Configuration Assistants, kann es unter Mac OS X 10.4 zu Problemen kommen. Bricht der Installer mit einer Fehlermeldung ab, so kann dies über die Wahl des richtigen C-Compilers "gefixt" werden. Hierfür ist vor der Installation von Oracle der folgende Befehl abzusetzen: sudo gcc_select 3.3

Da Oracle die Version 10g offiziell nur bis Mac OS Server 10.3.4 unterstützt, kommt es beim Linken zu Problemen mit der gcc Version 4, die den Mac OS X Versionen > 10.4.x beiliegt. Danach sollte die Installation sauber verlaufen.

Treten dann beim Erstellen der Datenbank folgende charakteristische Fehler auf,

dyld: Symbol not found: 
  _SSL_ALG_CLIENT_AUTH_MODE_RSA_SIGN_CLIENTSIDE_BS
  Referenced from: /oracle/product/10g/lib/libnnz10.dylib
  Expected in: flat namespace
ORA-12547: TNS: lost contact error
so kann dies durch einen kleinen Workaround behoben werden:
mv $ORACLE_HOME/lib/libnnzLC.dylib $ORACLE_HOME/lib/libnnzLC.dylib.bak
cd $ORACLE_HOME/bin
relink all
mv $ORACLE_HOME/lib/libnnzLC.dylib.bak $ORACLE_HOME/lib/libnnzLC.dylib

Dieses Problem taucht jedoch nur bei Mac OS X Version 10.4.x auf und wird hoffentlich durch das nächste Oracle Release behoben.

Ein bekannter Fehler schlägt beim Stoppen des Listeners zu. Der Befehl wird abgesetzt, bleibt jedoch hängen. Der Listener ist anschließend in einem unbrauchbaren Zustand. Er lässt sich weder Stoppen noch Starten. Auch hierfür gibt es einen Workaround:

onsctl start
lsnrctl stop
onsctl stop

Zu wünschen wäre, dass Oracle die Weiterentwicklung vorantreibt, so dass auch das zweite Release von Oracle 10g für die Mac Plattform erscheint - ohne die Kinderkrankheiten eines ersten Releases.

Die Zahlen sprechen dafür: Apple konnte nicht nur im Konsumentenbereich bei Desktop-Systemen und iPods einen Zuwachs verzeichnen, sondern auch im Storage- und Server-Markt. Wie Gartner berichtete, hat Apple den Umsatz mit Speichersystemen im letzten Jahr verdoppeln können und liegt damit auf Platz 10 der Rangliste. Der Umstieg von Apple zur Intel Architektur könnte weitere Portierungen bei Oracle vereinfachen und gleichzeitig die Kosten hierfür senken.

Michael Lindermann (info@ordix.de).