Monitor MaxDB state

Monitor MaxDB state

It’s quite simple to get vital information from a MaxDB database all you have to do is run the command “info state” when connected to dbmcli:

# ./dbmcli -d MAXDB -u DBADMIN,PASSWD
./dbmcli on MAXDB>info state
Name                    | Value


Data           (KB)     = 17682104
Perm Data      (KB)     = 17681528
Temp Data      (KB)     = 576
Data        (Pages)     = 2210263
Perm Data   (Pages)     = 2210191
Temp Data   (Pages)     = 72
Data            (%)     = 30
Perm Data       (%)     = 30
Temp Data       (%)     = 0
Log            (KB)     = 11008
Log         (Pages)     = 1376
Log             (%)     = 4
Sessions                = 31
Sessions        (%)     = 31
Data Cache      (%)     = 100
Converter Cache (%)     = 0
Data Max       (KB)     = 58719360
Log Max        (KB)     = 305872
Data Max    (Pages)     = 7339920
Log Max     (Pages)     = 38234
Sessions Max            = 100
Database Full           = No
Connect Possible        = Yes
Command Monitoring      = Off
Database Monitoring     = On
Kernel Trace            = Off
Autosave                = On
Bad Indexes             = 0
Log Full                = No
Bad Devspaces           = 0
Data Cache OMS      (%) = 0
Data Cache OMS Log  (%) = 0

./dbmcli on MAXDB>

You can easily retrieve that information with a custom script to monitor your database with nagios’ nrpe client for example.
Just to show you a quick example of script, this is what I did when I had an issue an application using MaxDB database.
(I had to be alerted if some unusual thresholds were exceeded).

# thresholds
MAX_DATA=50 # % data
MAX_TDATA=10 # % tempo data
MAX_LOG=50 # % log
MAX_SESS=50 # % sessions
echo "info state" | ${MAXDB_BIN}/dbmcli -d ${DB_NAME} -u ${DB_PASS} > /tmp/db_state.log
P_DATA=$(grep -E '^Data *\(\%\)' /tmp/db_state.log |awk -F"=" '{print $2}'|sed 's/ //g')
P_TDATA=$(grep -E '^Temp Data *\(\%\)' /tmp/db_state.log |awk -F"=" '{print $2}'|sed 's/ //g')
P_LOG=$(grep -E '^Log *\(\%\)' /tmp/db_state.log |awk -F"=" '{print $2}'|sed 's/ //g')
P_SESS=$(grep -E '^Sessions *\(\%\)' /tmp/db_state.log |awk -F"=" '{print $2}'|sed 's/ //g')
# if one of the parameters is higher than the thresholds an email is sent.
if [[ ${P_DATA} -gt ${MAX_DATA} ]] || [[ ${P_TDATA} -gt ${MAX_TDATA} ]] || [[ ${P_LOG} -gt ${MAX_LOG} ]] || [[ ${P_SESS} -gt ${MAX_SESS} ]]; then
echo "Data : ${P_DATA} %, Temp Data : ${P_TDATA} %, Log : ${P_LOG} %, Sessions : ${P_SESS} %" |mail -s "MaxDB alerte on `hostname`"

Fully recover MaxDB database following data corruption – Restauration complète d’une base MaxDB suite à une corruption de données

Fully recover MaxDB database following data corruption

I had to fully recover my MaxDB database due to a data corruption. Hopefully, I had a full backup dating from before the data corruption.

Here is how to recover a MaxDB database from a complete backup.

Suite à une corruption de ma base de donnée MaxDB, j’ai du effectuer une restauration complète. Heureusement, j’avais une sauvegarde complète récente datant de juste avant la corruption.

Voici comment restaurer une base de données MaxDB à partir d’une sauvegarde complète.


First connect to the database (start it if it’s not), and go to ADMIN mode.

ADMIN is a mode dedicated for administration tasks, the database first go OFFLINE and then in ADMIN operational state (kind of Oracle’s “startup restrict” mode).

En premier se connecter à la base de données (la démarrer si elle ne l’est pas déjà) et se mettre en mode ADMIN).

ADMIN est une mode dédié pour les taches d’administration, la base de données passe dans un premier temps OFFLINE, puis dans le mode opérationnel ADMIN (ressemble au mode “startup restrict” d’Oracle)


# cd /Database/MaxDB/Software/programs/bin

# ./dbmcli -d MDB -u DBADMIN,PASSWORD

./dbmcli on MDB>db_start


./dbmcli on MDB>db_connect



./dbmcli on MDB>db_admin



Then list all backup mediums:

Ensuite lister les mediums de sauvegarde :

./dbmcli on MDB>medium_getall


BACKMAXDB       /tmp/pipe       PIPE    DATA    0       8       NO      NO              20080520110904  20080520110904          BACK

BACKUP  /tmp/ADA.dat   UNKNOWN UNKNOWN 0       8       NO      NO              20080521093903  20080521095340          NONE


If you don’t have a medium that suit you, create it. I’m creating a medium named RESTORE referencing the backup file I want to use for the recover /tmp/maxdb.dat.

Si vous n’avez pas déjà de medium à votre convenance, créez-le. Dans l’exmple je créé un medium nommé RESTORE qui fait référence au fichier de sauvegarde que je veux utiliser pour la restauration /tmp/maxdb.dat.

./dbmcli on MDB>medium_put RESTORE /tmp/maxdb.dat



Start the recover (specify DATA for we are restoring a complete data backup) :

Démarrer le recover (spécifier DATA car c’est une restauration à partir d’une sauvegarde complète) :

./dbmcli on MDB>recover_start RESTORE DATA


Returncode              0

Date                    20080521

Time                    00161852

Server                  myserver1

Database                MDB

Kernel Version          Kernel    7.6.03   Build 015-123-173-107

Pages Transferred       2664

Pages Left              0

Volumes                 1

Medianame               BACKUP

Location                /tmp/maxdb.dat


Label                   DAT_000000043

Is Consistent           true

First LOG Page          625

Last LOG Page

DB Stamp 1 Date         20080521

DB Stamp 1 Time         00095848

DB Stamp 2 Date

DB Stamp 2 Time

Page Count              2643

Devices Used            1

Database ID             myserver1:MDB_20080520_151928

Max Used Data Page      0

Converter Page Count    8



Wipe out the old logs:

Nettoyer les anciens logs :

./dbmcli on MDB>util_execute clear log



And switch to ONLINE state:

Et se mettre en mode ONLINE :

. /dbmcli on MDB>db_online



You can restart the database to make sur everything is allright.

Vous pouvez redémarrer la base pour être sur que tout fonctionne correctement.


If you have to recover some operations that occurred between the complete backup and the corruption, you will have to recover from the backup log.

Si vous voulez récupérer certaines opérations qui auraient eu lieu entre la sauvegarde complète et la corruption, il faudra procéder autrement en passant par une restauration à partir des sauvegardes de log.


How to check MaxDB’s log backup mode – Verifier le mode de sauvegarde des logs MaxDB

check MaxDB log mode

Automatic log backup ensure that a log segment of the log area is saved as soon as it has been filled.

This log segment is then available again to be overwritten. It ensures that overflows (logged operations exceeding log area size) in the log area are practically impossible.

If you are more used to Oracle, this mechanism can be compared to the ARCHIVELOG mode.

Le mode “sauvegarde automatique des logs” s’assure que les “segments de log” de la “zone de log” soient sauvegardés dès qu’ils sont plein.

Le segment est alors à nouveau disponible. Cela permet d’éviter les problèmes d’engorgement de la zone de log.

Si vous êtes plus familier avec Oracle, ce mécanisme peut être comparé avec le mode ARCHIVELOG.


Here is the check command:

Voici la commande  de vérification :

./dbmcli on ADA> autolog_show


If the result is : AUTOSAVE IS OFF, then you can activate autolog by setting the backup medium (it can be a tape medium or a file medium).

Si le résultat est : AUTOSAVE IS OFF, il faut alors active l’autolog en définissant un medium de sauvegarde (de type cartouche ou fichier).


./dbmcli on ADA>medium_put LOGBACKUP /save/MaxDB/MDB_autosavelog FILE AUTO


I chose the file mode to save the log segments on disk. Each file will have the size of a log segment, and in my example, will be named MDB_autosavelog.XXX (XXX is a unique incremental number).

It’s the “AUTO” option that makes it an automatic log backup medium.

J’ai choisi le mode fichier pour sauvegarder les segments de log sur disque. Chaque fichier aura la taille d’un segment de log et dans mon exemple, sera nommé MDB_autosavelog.XXX (XXX est un numéro incrémental unique).

C’est l’option “AUTO” qui permet de spécifier que le medium sera utilisé pour la sauvegarde automatique des logs.


Then activate the automatic log backup and check the status again:

Ensuite il faut active le mode automatique et verifier à nouveau l’état du mode :

./dbmcli on ADA>autolog_on



./dbmcli on ADA>autolog_show