Das Datenbanksystem Informix hebt seine Verbundenheit zu Unix- (ähnlichen-) Systemen durch die Endung (ix) hervor, so dass auch Linux als Plattform unterstützt wird. Dass die Installation gar nicht ganz so schwer ist, soll dieser Beitrag zeigen.
Etwas Geschichte
Wer erinnert sich noch um die heißen Grabenkämpfe, die sich Oracle und Informix lieferten? Während die eine Partei mit Statistiken aufwartete, nach denen sie die meisten verkauften Lizenzen verbuchen konnte, zückte die andere Zahlen, nach denen sie die meisten Installationen vorwies. Aber nun ist es ruhig um Informix geworden, seit es von IBM aufgekauft wurde, und Oracle mit der 9i eine "rundum"-Palette anbieten kann. Trotzdem ist Informix nach wie vor präsent; vor allem im Verwaltungsbereich der Universitäten und Hochschulen nimmt es eine besondere Stellung ein, da die "quasi-landeseigene" Softwareschmiede (HIS GmbH) seine Priorität entsprechend gesetzt hat.
Informix hat in Bezug auf Linux zudem eine besondere Stellung unter den Datenbanksystemen, da es das erste der "größeren" war, das einen Port für Linux zur Verfügung stellte. Während Oracle seine Ankündigung veröffentlichte, trumpfte Informix (ganz nach Hase-und-Igel-Manier) mit einer bereits verfügbaren Version auf. Dabei handelte es sich zwar "nur" um den SE-Server, doch war dieser komplett mit den anderen Modulen einsatzbereit.
Nach einer Erhebung der GULP vom Juli 2002 [1] ist es zusammen mit DB/2 das zweithäufigste Datenbanksystem, doch ist Dokumentation in den öffentlichen Foren recht dünn gesät, wenn auch IBM unter [3] die komplette englischsprachige Literatur online anbietet. Da weiterhin die Installation - wie es sich für ein Server-System gehört - textbasiert ist und auf die grafische Oberfläche verzichtet, ist sie für Anfänger relativ undurchsichtig.
Vorbereitung
Als Hardware-Voraussetzungen für 32Bit-Intel-Systeme gibt IBM/Informix selbst ein Minimum von 500 MB freier Festplattenkapazität (ohne die Daten-Dateien) und 128 MB RAM an. Für den praktischen Einsatz sind jedoch 256 MB RAM als absolutes Minimum zu betrachten.
Die Software-Voraussetzungen werden zwar in den Zertifizierungen untermauert, es eignen sich aber die glibc-Versionen >= 2.1 für die meisten Module. Als Kernelversion eignet sich 2.2.x ebenso wie 2.4.x.
Bevor die eigentliche Installation begonnen werden kann, muss der zukünftige Account für Informix und eine entsprechende Gruppe erzeugt werden. Das Homedirectory wird dabei meistens - jedoch nicht zwingenderweise - in /opt/informix erwartet. Am einfachsten wird dieses durch die folgenden Befehle erreicht:
# groupadd informix # useradd -g informix -d /opt/informix -m -k /etc/skel informix
Als nächste Aktion müssen die Umgebungsvariablen des neuen Users angepasst werden, damit Informix korrekte Informationen über die eigene Umgebung bekommt. Dazu wird die Datei ~/.profile, ~/.bashrc oder die jeweilig benötigte ergänzt:
# Informix environment export INFORMIXDIR=/opt/informix export INFORMIXSERVER=obi export DBDATE=dmy4. export DBMONEY=, export DBCENTURY=C export LD_LIBRARY_PATH=/lib:/usr/lib:$INFORMIXDIR/lib export PATH=$PATH:$INFORMIXDIR/bin
Die Variablen INFORMIXDIR und INFORMIXSERVER müssen natürlich an die Gegebenheiten angepasst werden.
Wenn alle Benutzer im System auf die Datenbank zugreifen müssen, bietet es sich an, diese Ergänzungen in der /etc/profile vorzunehmen. Da dieses aber durchaus ungewollte Folgen nach sich ziehen kann, ist die jeweils lokale Konfiguration vorzuziehen.
Eine weitere Einstellung, die vor der Installation vorgenommen werden sollte, ist die Festlegung des TCP-Ports, unter dem der Informix-Listener zu erreichen sein wird. Im Gegensatz zu anderen Systemen, wird der Port nicht von Informix willkürlich festgelegt, sondern aus der zentralen Datei /etc/services ermittelt. Der Name ist dabei frei wählbar, er sollte nur eindeutig und sprechend sein. Ein bewährter Eintrag ist der folgende:
informix 1526/tcp # Informix
Installation
Für die Installation selbst werden ein oder mehrere Module benötigt, wie sie von Informix (IBM) geliefert oder auch von [2] heruntergeladen werden können. Für die meisten Anwendungen genügen die folgenden drei Module:
1. csdk (Client Server Development Kit); der ESQL-Präcompiler, der die API für den Server bereitstellt. Falls von PHP oder Perl auf den Server zugegriffen werden soll, wird dieses Modul ebenfalls benötigt.
2. iconn (Informix Connect); der Listener, der den Datenbankserver netzwerkfähig macht.
3. IDS (Informix Dynamic Server); der eigentliche Datenbankserver Zu den eigentlichen Paketen wird von Informix ein zweiteiliger Schlüssel nach dem Schema
Serial: ABC#D123456 Key: ABCDEF
geliefert, durch den die Aktivierung des installierten Systems erfolgt. (Anmerkung: Der hier abgedruckte Schlüssel ist nicht funktionsfähig, er soll nur als Beispiel dienen).
Die erwähnten drei Module liegen für Linux in Form von RPM's vor, die in gewohnter Weise installiert werden, es sei denn, sie sollen nicht in das Default-Verzeichnis /opt/informix installiert werden. Ein abweichendes Verzeichnis muss dem rpm mittels des "relocate"- Parameters bekannt gegeben werden, so dass das Verzeichnis /data/informix mit dem folgenden Aufruf benutzt wird:
# rpm -i --relocate /opt/informix=/data/informix informix_dynamic_server.rpm
Wird jedoch das Verzeichnis /opt/informix als Installationsverzeichnis verwendet, so reicht der Befehl
# rpm -i informix_dynamic_server.rpm
Wichtig ist noch zu erwähnen, dass auf jeden Fall die oben angeführten Umgebungsvariablen korrekt gesetzt sein müssen, damit rpm die richtigen Pfade benutzt.
Für andere UNIX- und UNIX-ähnliche Plattformen sowie zusätzliche Module (z.B. ISQL, 4GL, JDBC etc.) liegen die Pakete ausschließlich in Tar-Form vor, bei denen bei der Installation immer gleich verfahren wird:
1. Im Informix-Homedirectory das Tar-Paket extrahieren
2. Als "informix"-User das jeweilige Installationsskript ausführen, in dem das von Informix mitgelieferte Activation-Schlüsselpaar abgefragt wird. Der Name des Skriptes ergibt sich üblicherweise aus dem Präfix install sowie dem Namen des Moduls, also beispielsweise "installserver" oder "installesql".
Der Unterschied zu den RPM's besteht lediglich in der Zusammenfassung beider Schritte.
Das Install-Skript stellt einige Fragen, die interaktiv beantwortet werden müssen. Das Installationsskript des Moduls ICONNECT äußert sich wie in Listing 1 dargestellt (Benutzereingaben sind fett dargestellt).
Is I-Connect being installed along with Informix database server version 9.x? (yes or no) yes Your existing INFORMIX shared libraries, if any, will be replaced and upgraded. Are you sure? [yes/no] yes Installation Script Installation Script Requirements: - A user "informix" and a group "informix" must be known to the system. - The product source files must have been loaded by user root - This installation procedure must be run by user root. - You must also set INFORMIXDIR to where you would like to install - the product on and make INFORMIXDIR as your current working directory. This script will change the owner, group, and mode of many of the files of this package in this directory. Installing I-Connect as user "root"... Press RETURN to continue, or the interrupt key (usually CTRL-C or DEL) to abort. Enter your serial number (for example, INF#X999999) > ABC#D123456 Enter your serial number KEY (uppercase letters only) > ABCDEF WARNING! This software, and its authorized use and number of users, are subject to the applicable license agreement with Informix Software, Inc. If the number of users exceeds the licensed number, the excess users may be prevented from using the software. UNAUTHORIZED USE OR COPYING MAY SUBJECT YOU AND YOUR COMPANY TO SEVERE CIVIL AND CRIMINAL LIABILITIES. Press RETURN to continue, or the interrupt key (usually CTRL-C or DEL) to abort. Installing directory . Installing directory etc Installing directory msg ... Installing directory gls/lc11/zh_cn Installing directory gls/lc11/zh_tw Informix Product: INFORMIX-Connect Installation Directory: /data/informix Performing root portion of installation of INFORMIX-Connect... Installation of INFORMIX-Connect complete.
In der Praxis zeigt sich, dass viele Probleme gemieden werden können, wenn der Server muss als letztes Paket installiert wird. Eine nochmalige Installation beeinflusst allerdings in der Regel nicht bereits angepasste Konfigurationsdateien, so dass auch bei einer bereits installierten Datenbank eine zusätzliche Modulinstallation problemlos möglich ist. Leider ist die Erstellung der RPM's bei Informix noch nicht komplett geglückt, so dass rpm sich weigert, nachfolgend Pakete einzurichten, da diese teilweise die bereits vorhandenen Dateien überscheiben. In diesem Fall hilft nur die Option --force, die die Installation zwangsweise durchführt:
# rpm -i --force informix_dynamic_server.rpm
Sind alle Module installiert, so muss als letzter Schritt das Skript RUN_AS_ROOT.server unter root-Berechtigung ausgeführt werden. Dieses erstellt unter anderem die benötigten Symlinks im entsprechenden lib-Verzeichnis (meistens /usr/lib), damit die dynamischen Libraries vom System gefunden werden können. Sollte das Betriebssystem ein Upgrade erfahren, so muss häufig dieses Skript aufgerufen werden, um die Links wieder herzustellen
Konfiguration
Die Software allein reicht zunächst jedoch nicht aus, um die Datenbank zu erstellen. Der erste Schritt besteht in der Konfiguration des Listeners, damit dieser die Datenbank überhaupt erst ansprechen kann. Dieses geschieht über die Datei $INFORMIXDIR/etc/sqlhosts. Die dort vorhandenen Demo-Einträge können getrost ignoriert und gelöscht werden. Die neuen Einträge teilen sich in Felder mit den Bedeutungen:
1. Name des Servers. Der Servername muss innerhalb der sqlhosts eindeutig sein und muss zudem mit Servernamen der Datenbank, wie in onconfig festgelegt, übereinstimmen
2. Das verwendete Protokoll nach Informix-Notation (für TCP/IP über SYSV-Sockets: "onsoctcp")
3. Der Name/Adresse des Rechners, auf dem der Server läuft
4. der Port, wie in der /etc/services eingetragen oder eine beliebige Zeichenkette für lokale Verbindungen.
obi onipcshm localhost obi
Unter dem Servernamen obi wird der Server angesprochen, der auf demselben Rechner (localhost) über Sys V-IPC verfügbar ist.
obi_tcp onsoctcp gandalf informix
In diesem Fall wird unter dem Namen obi_tcp das Protokoll TCP/IP verwendet, genauer gesagt über die UNIX-Socket-Schnittstelle. Angesprochen wird der Rechner mit dem Namen gandalf unter dem TCP-Port, der unter dem Eintrag informix in der /etc/services zu finden ist.
Wichtig: Einer der in der sqlhosts verwendeten Servernamen muss in der Umgebungsvariablen INFORMIXSERVER enthalten sein. Anderenfalls wird es nicht möglich sein, eine lokale Verbindung mit dem Server herzustellen.
Die zweite und wichtigste Konfigurationsdatei ist unter $INFORMIXDIR/etc/onconfig ansprechbar. Sie enthält alle Informationen, die für den Informix-Server benötigt werden. Änderungen in dieser Datei werden nur nach einem Neustart der Datenbank aktiv, da sie der Server nur beim Start liest.
Der erste Teil dieser Datei betrifft den "root database space", den initialen Datenbank-Bereich. Gemeint ist damit die Datei, in der das Data Dictionary abgelegt wird. Sie sollte nicht zu klein angelegt werden, auch wenn sie im Nachhinein mit weiteren Dateien (= Cunks) vergrößert werden kann, allerdings ist Informix unfähig, Dateien > 2GB verwalten. Diese Datei kann sowohl eine normale Datei, als auch ein "raw device" sein; genauer: ein Character-Device, wie es in einem Unixsystem beispielsweise eine unformatierte Festplattenpartition ist. Der Einfachheit halber sei hier lediglich auf normale Dateien Bezug genommen.
Um Die Übersicht zu behalten, ist es sinnvoll, im Informix-Verzeichnis ein Unterverzeichnis einzurichten, das die DBSpace-Dateien aufnimmt; z.B. $INFORMIXDIR/database. In diesem Beispiel ist der rootdbs eine Datei namens rootdbs mit einer Größe von ca. 100 MByte. Die entsprechenden Einträge sind beispielhaft in Listing 1 unter der Rubrik "Root DBspace Configuration" abgebildet.
Weitere Informationen betreffen die Orte, an denen Protokolle abgelegt werden. Speziell MSGPATH ist mit besonderer Aufmerksamkeit einzustellen, da das Online-Log oft der einzige Hinweis bei einer Fehlersuche ist.
Ist ein Bandlaufwerk angeschlossen (/dev/rmt0) , kann dieses auch dem Datenbanksystem unter "System Archive Tape Device" bekannt gegeben werden, um Datensicherungen zu vereinfachen. Fehlt ein solches, reicht zunächst das NULL-Device, da dieser Parameter zwingend ein gültiges und benutzbares Gerät verlangt. Daher muss der User informix auch bei einem vorhandenen Streamer das entsprechende Gerät lesen und beschreiben können.
Einer der wichtigsten Teile ist die Definition der Schnittstelle nach Außen, der in der Rubrik "System Configuration" konfiguriert wird. Unter DBSERVERNAME wird der Name festgelegt, wie er in der sqlhosts verwendet wird. Existiert eine zusätzliche Schnittstelle unter einem anderen Namen, muss dieser Name unter DBSERVERALIASES aufgeführt werden.
Der optionale Parameter NETTYPE kontrolliert die Zugänge der Datenbank auf zweierlei Weise: Einerseits kann eine Anzahl Threads vorgegeben werden, die ständig aktiv sind und auf Verbindungen von außen warten. Andererseits kann die Anzahl der maximal zulässigen Verbindungen beschränkt werden. Im unten angeführten Beispiel sind diese für die lokalen IPC- wie auch für die Netzwerk-Verbindungen auf 50 beschränkt.
Eine Multiprozessormaschine wird nicht automatisch von Informix erkannt, sondern muss exakt in der Variablen MULTIPROCESSOR konfiguriert werden. Die Default-Einstellung definiert eine Maschine mit nur einem Prozessor, läuft aber auch auf jeder Multiprozessormaschine, ohne allerdings alle Prozessoren zu nutzen.
Der letzte Bereich betrifft die Speichernutzung im Abschnitt "Shared Memory Parameters", in der vor allem der Parameter "SHMVIRTSIZE" die anfängliche Größe des gemeinsamen Speicherbereiches in KByte festlegt.. Jede Datenbank profitiert erheblich von einem gut dimensionierten Hauptspeicher, mehr als von einer leistungsfähigeren CPU. Da Informix den Shared Memory-Bereich jedoch dynamisch vergößern kann, besteht zunächst keine Notwendigkeit, die eingetragenen Werte zu verändern.
# Root Dbspace Configuration ROOTNAME rootdbs # Root dbspace name # Path for device containing root dbspace ROOTPATH /opt/informix/database/rootdbs ROOTOFFSET 0 # Offset of root dbspace into device (Kbytes) ROOTSIZE 100000 # Size of root dbspace (Kbytes) # Disk Mirroring Configuration Parameters MIRROR 0 # Mirroring flag (Yes = 1, No = 0) MIRRORPATH # Path for device containing mirrored root MIRROROFFSET 0 # Offset into mirrored device (Kbytes) # Physical Log Configuration PHYSDBS rootdbs # Location (dbspace) of physical log PHYSFILE 1000 # Physical log file size (Kbytes) # Logical Log Configuration LOGFILES 6 # Number of logical log files LOGSIZE 500 # Logical log size (Kbytes) # Diagnostics MSGPATH /opt/informix/online.log # System message log file path CONSOLE /dev/console # System console message path ALARMPROGRAM /opt/informix/etc/log_full.sh # Alarm program path TBLSPACE_STATS 1 # Maintain tblspace statistics # System Archive Tape Device # TAPEDEV /dev/tapedev # Tape device path TAPEDEV /dev/null # Tape device path TAPEBLK 16 # Tape block size (Kbytes) TAPESIZE 10240 # Maximum amount of data to put on tape (Kbytes) # Log Archive Tape Device # LTAPEDEV /dev/tapedev # Log tape device path LTAPEDEV /dev/null # Log tape device path LTAPEBLK 16 # Log tape block size (Kbytes) LTAPESIZE 10240 # Max amount of data to put on log tape (Kbytes) # Optical STAGEBLOB # Informix Dynamic Server 2000 staging area # System Configuration SERVERNUM 0 # Unique id corresponding to a OnLine instance DBSERVERNAME obi # Name of default database server DBSERVERALIASES obi_tcp # List of alternate dbservernames NETTYPE ipcshm,,50, # Configure poll thread(s) for nettype NETTYPE soctcp,,50,CPU # Configure poll thread(s) for nettype DEADLOCK_TIMEOUT 60 # Max time to wait of lock in distributed env. RESIDENT 0 # Forced residency flag (Yes = 1, No = 0) MULTIPROCESSOR 0 # 0 for single-processor, 1 for multi-processor NUMCPUVPS 1 # Number of user (cpu) vps SINGLE_CPU_VP 0 # If non-zero, limit number of cpu vps to one NOAGE 0 # Process aging AFF_SPROC 0 # Affinity start processor AFF_NPROCS 0 # Affinity number of processors # Shared Memory Parameters LOCKS 2000 # Maximum number of locks BUFFERS 1000 # Maximum number of shared buffers NUMAIOVPS # Number of IO vps PHYSBUFF 32 # Physical log buffer size (Kbytes) LOGBUFF 32 # Logical log buffer size (Kbytes) LOGSMAX 6 # Maximum number of logical log files CLEANERS 1 # Number of buffer cleaner processes SHMBASE 0x10000000L # Shared memory base address SHMVIRTSIZE 8000 # initial virtual shared memory segment size SHMADD 8192 # Size of new shared memory segments (Kbytes) SHMTOTAL 0 # Total shared memory (Kbytes). 0=>unlimited
Der Rest der onconfig ist zunächst von geringer Bedeutung, so dass an dieser Stelle nicht weiter darauf eingegangen wird. Fehlen darf er jedoch nicht; die Datenbank wäre sonst nicht lauffähig.
Sind alle Parameter zur Zufriedenheit gefüllt, muss der Root-DBS eingerichtet werden. Es reicht dabei, eine Datei mit dem korrekten Namen und der Größe 0 anzulegen und die Zugrifsrechte auf "0660" zu setzen:
$ cat /dev/null > $INFORMIXDIR/database/rootdbs $ chmod 660 $INFORMIXDIR/database/rootdbs
Wird statt einer normalen Datei ein raw device verwendet, muss es nicht initialisiert sein, lediglich der verfügbare Speicherplatz muss größer oder gleich der Angabe in der onconfig-Datei sein.
Start und Stopp
Um den Server zu starten, bietet Informix den Befehl oninit der nicht nur den Datenbankserver, sondern auch den Listener startet. Im Gegensatz zu den meisten anderen Systemen generiert kein separater Prozess eine neues Datenbanksystem, sondern der Datenbankserver selbst. Notwendig dazu ist lediglich der Schalter "-i", der den Server anweist, nach den Angaben in der onconfig ein Root-DBS zu erzeugen. Ein bereits eingerichtetes System wird dabei unwiderruflich überschrieben.
Wird also der Befehl oninit -i aufgerufen, bleibt das Shell-Prompt - je nach Größe der Datenbank - nach einer Sicherheitsabfrage recht lange verschwunden. Nach erfolgter Initialisierung gibt die Datei online.log Auskunft über Erfolg oder Misserfolg. Der sicherste Hinweis für eine erfolgreiche Initialisierung ist die Meldung "Complete Disk Initialized" in dieser Datei.
Ab diesem Zeitpunkt sollte ein beliebiger Client auf die Datenbank zugreifen können. Der erste Test findet natürlich mit dem Informix-Tool dbaccess statt, das dem Server als allgemeines Administrationstool beiliegt. Auch dieses Tool ist vollkommen textorientiert, und lässt sich mit den Cursortasten steuern (Abbildung 1).
dbaccess1.gif Abbildung 1: Das Tool dbaccess ist vollkommen Text-orientiert
Nach der Initialisierung des DBS sind vom Server automatisch die Datenbanken sysmaster und sysutils angelegt worden, die das Data Dictionary sowie sämtliche Systemtabellen enthalten. Um das System auszuprobieren, können eigene Objekte dort zwar angelegt werden, sinnvoller ist es jedoch, mittels create database eine eigene zu erstellen.
Ist die Datenbank erst einmal ausgewählt (Abbildung 2), werden in der aktuellen Sitzung sämtliche neu angelegte Objekte in dieser Datenbank eingerichtet.
dbaccess2.gif Abbildung 2: Im dbaccess wird eine Datenbank ausgewählt
Soll der Datenbankserver heruntergefahren werden, so wird der Befehl onmode -k verwendet, der nach einer Sicherheitsabfrage die gewünschte Aktion durchführt.
Fazit
Das Datenbanksystem Informix ist nach wie vor ein mächtiges und vielseitig einsetzbares Werkzeug, dass - von kleinen Schwächen abgesehen - nicht nur aufwandsarm zu installieren ist, sondern auch durch seinen ökonomischen Umgang mit Systemressourcen besticht. Durch die modularisierte Form der Software müssen auch nur die Teile installiert werden, dir unmittelbar zur Funktion beitragen. Grafische Tools stehen zwar optional zur Verfügung, trotzdem lässt sich das gesamte System recht komfortabel mit den textbasierten Mitteln verwalten, was gerade bei Server-Computern sehr sinnvoll ist.
Quellen
[1] Statistik über Datenbanken: http://www.gulp.de/kb/mk/chanpos/numberonedatabase_f.html
[2] Quelle der Informix-Software: http://www.informix.com/evaluate
[3] Dokumentation zu Informix http://www-3.ibm.com/software/data/informix/pubs/library/