How to find Oracle’s Database Edition version – Comment trouver la version Edition d’une base de données Oracle.

Here is the SQL command that show you important information about Oracle’s engine, such as the edition (Enterprise, Standard, Lite …).

Voici commande sql qui permet d’avoir les infos importantes sur la version du moteur Oracle, notamment l’éditions (Entreprise, Standard, Lite etc …).

 

SQL> select banner from v$version;
BANNER
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.7.2.0 - Production
PL/SQL Release 8.1.7.2.0 - Production
CORE    8.1.7.0.0       Production
TNS for DEC OSF/1 AXP: Version 8.1.7.2.0 - Production
NLSRTL Version 3.4.1.0.0 - Production

 

SQL> select banner from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

 

 

Définition d’un deadlock Oracle (ORA-00060)

deadlock Oracle

Juste pour faire le point avec mes amis développeurs.
Un deadlock n’est pas un problème Oracle (ou autre SGBD) ou système mais un problème de développement.
Un deadlock peut apparaitre quand 2 requêtes essayent simultanément de mettre un verrou sur une donnée que l’autre détient actuellement.
Les 2 requêtes s’attendent l’une l’autre.

Pour vous aider :
Sous Oracle on trouve en général des traces dans le répertoire « udump ». Un fichier .trc est généré à l’heure ou le deadlock (ORA-00060) est remonté dans les logs de vos traitements. Dans ce fichier se trouve des indices sur ce qui a provoqué le problème comme les SID des 2 requêtes incriminées, les rowid des enregistrements en question et les requêtes sql.

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
OK
END
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).

#!/bin/ksh
MAXDB_BIN="/Database/MaxDB/Software/programs/bin"
DB_NAME="MAXDB"
DB_PASS="DBADMIN,PASSWD"
# 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`" myemail@mydomain.com
fi

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

OK

./dbmcli on MDB>db_connect

OK

---

./dbmcli on MDB>db_admin

OK

---

Then list all backup mediums:

Ensuite lister les mediums de sauvegarde :

./dbmcli on MDB>medium_getall

OK

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

OK

 

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

OK

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

Errortext

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

OK

---

And switch to ONLINE state:

Et se mettre en mode ONLINE :

. /dbmcli on MDB>db_online

OK

---

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

OK

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

OK

---

./dbmcli on ADA>autolog_show

OK

AUTOSAVE IS ON

---