Ulf Wendel

MaxDB starten und stoppen

Ich werde diese Woche einen kleinen Versuch starten und FAQ-Artikel zu MaxDB schreiben. The Themen der FAQ-Artikel entnehme ich den Weblogs des Servers. Wenn schon dieser Blog von Google verlinkt wird, dann scheint es bitter nötig, ein paar kurze FAQ-Artikel zu schreiben. Diese FAQ-Artikel sollen die offizielle MaxDB FAQ, die in der MySQL Developer Zone unter http://dev.mysql.com/doc/maxdb/maxdb_faq.html veröffentlicht ist, nicht ersetzen. Die FAQ sollte – nach anfänglichen Schwierigkeiten – inzwischen für jedermann sichtbar sein. Diese Blogeinträge sind eher als Vorläufer oder Ergänzungen zu verstehen. Thema heute: MaxDB starten und stoppen.

Inhalt

MaxDB Verwaltungstools

Die Verwaltung von MaxDB kann mittels dreier Tools erfolgen: der Database Manager GUI, dem WebDBM oder dem Database Manager CLI (dbmcli). Die drei Tool decken alle drei gängigen Varianten für Userinterfaces ab. Der Database Manager steht als GUI unter Windows zur Verfügung. Es ist nicht auszuschließen, daß in Zukunft eine neue GUI entsteht, die auch andere Betriebssysteme unterstützt. Ein Webinterface ist in Form des WebDBM vorhanden. Die Bedienung der GUI-Interfaces ist weitgehend identisch und selbsterklärend sobald man die Grundbegriffe der MaxDB Architektur verstanden hat. Das Kommandozeilentool dbmcli steht für alle zur Verfügung, die Verwaltungsaufgaben in Skripte einbinden möchten oder einfach lieber mit Kommandos statt mit einer Maus jonglieren.

Alle drei Tools haben einen gemeinsamen Namensteil: Database Manager. Der Database Manager ist eine Client-Server Komponente von MaxDB, die ausschließlich für die Verwaltungsaufgaben zuständig ist. Die Liste der bislang aufgeführten Client-Tools ist nicht vollständig. Im SAP-Umfeld existiert mit dem Database Manager RFC (DBMRFC) / SAP DBMFRC ein weiterer Client zur Verfügung. Wie üblich gehe ich nicht auf die Verwendung von MaxDB in SAP-Umfeld ein und werde deshalb diesen Client auch nicht weiter beschreiben.

Die Database Manager Clients kommunizieren mit dem Database Manager Server über den X Server. Der X Server ist die Kommunikations Komponente von MaxDB. Damit ergibt sich folgende Kette an beteiligten Komponenten: DBM Client -> X Server -> DBM Server [-> Kernel].

Das Senden von Verwaltungskommandos ist also nur dann möglich, wenn der X Server gestartet wurde. Unter Windows wird der X Server bei der Installation als Dienst eingetragen. Der Dienstname ist XServer, als Starttyp wird Automatisch verwendet. Man braucht sich also in der Regel nicht um den Start des X Servers nach einem Systemstart kümmern.

Startskript für MaxDB

Unter Unix wird der X Server manuell gestartet. Es empfiehlt sich ein Startskript einzurichten. Das MaxDB Handbuch enthält ein Beispiel für ein Startskript. Das Beispiel findet sich unter: MaxDB Library – Basic Information – Concepts of the Database System – Creating and Configuring a Database Instance – Automatic Start – Example: Start Script for a Database Instance (Linux) . Das vorgeschlagenen Startskript kümmert sich sowohl um den Start des X Servers als auch um den Start einer Datenbankinstanz.


#! /bin/sh
# Copyright (c) 2001-2004 SAP AG, Germany.
#
# Author: <maxdb @lists.mysql.com>
#
# init.d/maxdb
#
# and symbolic its link
#
#

### BEGIN INIT INFO

# Provides: MaxDB
# Required-Start: $remote_fs $syslog
# Required-Stop:  $remote_fs $syslog
# Default-Start:  3 5
# Default-Stop:   0 1 2 6
# Description:    Start MaxDB communication server.

### END INIT INFO

if [ -f /etc/rc.config ]; then
   . /etc/rc.config
fi

# where to find x_server executable

IND_PROG_DBROOT=""

if [ -f /etc/opt/sdb ]; then
    IND_PROG_DBROOT=`grep '^IndepPrograms=' /etc/opt/sdb | sed 's:IndepPrograms=::g'`
else
   exit 5
fi

X_SERVER=$IND_PROG_DBROOT/bin/x_server
X_PATH=$IND_PROG_DBROOT/bin 

MaxDB_BIN=$X_SERVER
test -x $MaxDB_BIN || exit 5

MaxDB_BIN=$X_PATH/dbmcli
test -x $MaxDB_BIN || exit 5

# find program fuser

FUSER=/bin/fuser
test -x $FUSER || FUSER=/sbin/fuser
test -x $FUSER || FUSER=/usr/sbin/fuser

# Shell functions sourced from /etc/rc.status:
#      rc_check         check and set local and overall rc status
#      rc_status        check and set local and overall rc status
#      rc_status -v     ditto but be verbose in local rc status
#      rc_status -v -r  ditto and clear the local rc status
#      rc_failed        set local and overall rc status to failed
#      rc_reset         clear local rc status (overall remains)
#      rc_exit          exit appropriate to overall rc status
#. /etc/rc.status
# First reset status of this service
#rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - misc error
# 2 - invalid or excess args
# 3 - unimplemented feature (e.g. reload)
# 4 - insufficient privilege
# 5 - program not installed
# 6 - program not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.

RETVAL=1
case "$1" in
    start)
        echo -n "Starting MaxDB services: "
        if [ ! -z "$X_SERVER" ]; then
       $X_SERVER start>/dev/null 2>&1
       # to enable auto start/stop demodb remove following comments
       DBMCLI=$X_PATH/dbmcli
       if [ ! -x $DBMCLI ]; then
              echo "dbmcli not found" >&2
              exit 5
       fi
       $DBMCLI -d DEMODB < < __EOD__ 2>&1 > /dev/null
      user_logon OLEG,MONDAY
      db_online
_EOD__
       _test=`echo $_o | grep ERR`
       if [ "$_test" = "" ]; then
         echo -n " database DEMODB started"
       else
           echo "cannot start DEMODB: $_o" >&2
         exit 7
       fi
       RETVAL=0
        fi
        touch /var/lock/subsys/maxdb
        ;;

    stop)
        echo -n "Shutting down MaxDB services: "
        if [ ! -z "$X_SERVER" ]; then
       # to enable auto start/stop demodb remove following comments
      DBMCLI=$X_PATH/dbmcli
        if [ ! -x $DBMCLI ]; then
         echo "dbmcli not found" >&2
            exit 5
        fi
        _o=`$DBMCLI -d DEMODB < < __EOD__ 2>&1
      user_logon OLEG,MONDAY
      db_offline
__EOD__`
       _test=`echo $_o | grep ERR`
        if [ "$_test" = "" ]; then
         echo -n "database DEMODB stopped"
        else
         echo "cannot stop DEMODB: $_o" >&2
            exit 1
        fi
      $X_SERVER stop > /dev/null  2>&1
       RETVAL=0
        fi
        rm -f /var/lock/subsys/maxdb
        ;;

    status)
        if [ ! -z "$X_PATH" ]; then
            if [ -x $FUSER ]; then
         _o=`$FUSER $IND_PROG_DBROOT/pgm/vserver`
               if [ $? -eq 0 ]; then
                   echo "communication server is running"
               # to enable auto start/stop demodb remove following comments
               DBMCLI=$X_PATH/dbmcli
               if [ ! -x $DBMCLI ]; then
                     echo "dbmcli not found" >&2
                      exit 5
                  fi
                  _o=`$DBMCLI -d DEMODB < < __EOD__
                  user_logon OLEG,MONDAY
                  db_state
__EOD__`
               _test=`echo $_o | grep ERR`
               if [ "$_test" = "" ]; then
                  _state=`echo $_o | sed s/.*State\ *// | sed s/\ .*//`
                  echo "database DEMODB is $_state"
               else
                  echo "cannot get state of DEMODB: $_o" >&2
               fi
               RETVAL=0
            else
                  echo "communication server is not running"
                  RETVAL=0
               fi
            else
            echo "status unkown  - fuser not found" >&2
         fi
      else
            echo "status unkown - x_server not found" >&2
        fi
        ;;

    restart)
        $0 stop
        $0 start
        ;;


    reload)
        $0 stop
        $0 start
       ;;

    *)
        echo "Usage: maxdb {start|stop|status|reload|restart}"
        exit 1
        ;;
esac

exit $RETVAL

(aus dem MaxDB Handbuch, Stand Oktober 2005)

Das Startskript aus dem Handbuch muß natürlich an die eigene Installation angepaßt und in die /etc/init.d Struktur des jeweiligen Systems eingepaßt werden.

MaxDB Instanz starten, stoppen und überwachen

Wie beschrieben wurde, kann eine MaxDB Instanz nur dann gestartet und gestoppt werden, wenn die Kommunikationskomponente X Server läuft. Ist dies der Fall, dann kann MaxDB mittels eines DBM Clients – Database Manager GUI, Web DBM, dbmcli – gestartet werden. Die Bedienung der GUI ist selbsterklärend. In der Database Manager GUI beispielsweise wählt man die gewünschte MaxDB Instanz in der Serverliste aus, stellt mit einem Doppelklick eine Verbindung zum X Server her und wählt im Menu Action eine der Optionen: Offline, Admin, Online.

Nur im Online-Modus können sich Datenbankclients mit der MaxDB Instanz verbinden und Anfragen ausführen. Dies ist im Modus Admin und Offline nicht möglich. Der Modus Admin wird von einigen Verwaltungsaufgaben vorrausgesetzt. In letzter Zeit versucht man bei der MaxDB Entwicklung die Gründe, die ein Umschalten in den Admin oder Offline-Modus verlangen, zu verringern. So können seit Version 7.6.00.x Datenbankparameter geändert werden, während die Datenbank sich im Online-Modus befindet. Der Offline-Modus letztlich stoppt die MaxDB Instanz.

Im dbmcli stehen drei Kommandos zur Verfügung, um in einen der drei Modi zu wechseln: db_online, db_admin, db_offline. Mittels db_state kann der aktuelle Modus abgefragt werden. Im Handbuch ist beschrieben welche Berechtigungen notwendig sind, um die Kommandos auszuführen.


# /opt/sdb/programs/bin/x_server start
     12798 NISERVER NI support started.
WNG  12453 NISSLSRV NISSL Init: SSL:   Init, SSSLERR_LIB_NOT_FOUND
     12902 XSERVER started, 'X32/LINUX 7.6.00  Build 012-121-102-632'
# /opt/sdb/programs/bin/dbmcli -u DBADMIN,DBADMIN -d MYINSTANCE db_online
OK
# /opt/sdb/programs/bin/dbmcli -u DBADMIN,DBADMIN -d MYINSTANCE db_state
OK
State
ONLINE

Zur Ãœberwachung der Datenbank können die Eventing Funktionen von MaxDB verwendet werden, mehr hierzu gibt es unter Eventing mit MaxDB.

Probleme beim Start von MaxDB

MaxDB verfügt über eine ganze Reihe von Logfiles, die bei der Fehlersuche herangezogen werden können. Die Logfiles sind tabellarisch in der offiziellen MaxDB FAQ unter http://dev.mysql.com/doc/maxdb/maxdb_faq.html aufgelistet. Da das Starten und Stoppen einer MaxDB Instanz über den Database Manager ausgeführt wird, gilt der erste Blick dem Database Manager Protokol (Datei: dbm.prt). Ein kleiner Tipp am Rande: Die Database Manager GUI (Client) sendet auch nur DBM-Kommandos an den Database Manager (Server). Die Kommandos erscheinen im Database Manager Protokoll. Wer eine Database Manager GUI Aktion gerne im dbmcli durchführen möchte, um z. B. ein Skript zu erstellen, der kann hier spionieren und Reverse Engineering betreiben.

Falls das Database Manager Protokol keine Aufschlüsse über mögliche Probleme gibt, dann sollte das Logfile Database Errors (Datei: knldiag.err) begutachtet werden.

Die Pfade der Logfiles und die Verwendung der Database Manager GUI zur Anzeige derselben sind in der MaxDB FAQ beschrieben.