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

---

How to mount a shared folder from Buffalo LinkStation NAS on Windows 7/Vista/2008

If you have a Buffalo LinkStation (LS model for me) and want to mount a SMB network share from the LinkStationon to a Windows 2008/7/Vista, you will have the following error message:
Error code 0x80070035

Si vous possédez un Buffalo LinkStation (model LS pour moi) et que vous voulez monté un partage réseau du LinkStation vers un Windows 2008/7/Vista) vous aurez l’erreur suivante :
Code erreur 0x80070035

NAS from QNAP, for instance, use NTLM v2 authentication as for Buffalo’s LinkStation, it uses only the (old and weak) LN authentication.
The network authentication level on Windows 2008/7/Vista is defined to send NTLMv2 response only. You will have to tune it correctly to mount the LinkStation’s network share.

Les NAS QNAP, par exemple, utilisent l’authentification NTLM v2, le LinkStation quant à lui n’utilise que l’authentification LN (faible et ancienne).
Le niveau d’authentification réseau sur Windows 2008/7/Vista est défini à : envoyer uniquement des réponses NTLMv2. Il faudra modifier cela pour monter le partage réseau LinkStation.

On Windows 2008, Windows 7 and Vista:


Go to “Administrative Tools > Local Security Policy“.
Then “Security Settings > Local Policies > Security Options > Network security : LAN Manager authentication level
Send LM & NTLM responses” or “Send LM & NTLM – use NTLM2 session security if negotiated” depending your type of network.

Sur Windows 2008, Windows 7 et Vista :


Aller dans :”Outils d’Administration > Stratégie de sécurité locale“.
Puis, “Paramètres de sécurité > Stratégies locales > Options de sécurité > Sécurité réseau : niveau d’authentification LAN Manager
Envoyer les réponses LM et NTLM” ou “Envoyer LM et NTLM – utiliser la sécurité de session NTLM2 si négociée” en fonction de votre type de réseau.

You will be able to mount your Windows SMB share.
Vous pourrez ensuite monter votre partage SMB Windows.

It might work for some other Buffalo products (I only have a LinkStation so I can’t test it) !
Ca doit également fonctionner pour d’autres produits Buffalo (je n’ai qu’une LinkStation donc je ne peux pas tester) !

How to setup iSCSI on Linux (RedHat)

Definitions:

iSCSI initiator : the endpoint that initiates a iSCSI session.  An iSCSI initiator sends SCSI commands over an IP network. It’s the client endpoint.

iSCSI Target : refers to a storage resource located on an iSCSI server (most of the time it’s a “storage array”). It’s the server endpoint.

LUNs (Logical Number Units): number used to identify a logical unit, which is a device addressed by the SCSI protocol (thus Fiber Channel or iSCSI). It usually represents slices of large RAID disk arrays.

IQN (iSCSI Qualified Name) : iSCSI name of the target or initiator.

 

On the Storage Server:

Enable and configure the iSCSI Target on your storage server.

Mine is a QNAP Turbo NAS. I’ve got 1 target with 5 LUNs configured.

SCSI Portal
 
X Enable iSCSI Target Service
 
iSCSI Service Port:           3260
 
mytarget (iqn.2004-04.com.qnap:ts-859:iscsi.mytarget.c5884b)     Connected
 
id:0 - lun1 ( 2024.00 GB)               Enabled
 
id:1 - lun2 ( 2024.00 GB)               Enabled
 
id:2 - lun3 ( 2024.00 GB)               Enabled
 
id:3 - lun4 ( 2024.00 GB)               Enabled
 
id:4 - lun5 ( 1804.13 GB)               Enabled

I have two network interfaces:

1-       for QNAP management, IP : 10.0.0.5

2-      iSCSI access, directly connected to the server : 192.168.0.1

 

For more security you can enable “LUN masking”. It will restrain iSCSI target to be accessed to only by the initiator of your client (the client initiator name IQN can be found on /etc/iscsi/initiatorname.iscsi).

 

On the Linux client (see tips ** for VMware configuration) :

Install “iscsi-initiator-utils” on the server that will connect to the iSCSI volume:

# rpm –Uvh iscsi-initiator-utils-6.2.0.865-6.el5.x86_64.rpm

Set up iscsi automatic start on boot and start iscsi services:

# chkconfig iscsid on
# service iscsid start
# chkconfig iscsi on
# service iscsi start

 

Discover your iSCSI targets:

# iscsiadm -m discovery -t st -p 192.168.0.1

In my case it will show 2 targets (one for each network connection):

192.168.0.1:3260 iqn.2004-04.com.qnap:ts-859:iscsi. mytarget.c5884b
10.0.0.5:3260 iqn.2004-04.com.qnap:ts-859:iscsi. mytarget.c5884b

I have 2 routes for the same target.

 

Log to the target through IP 192.168.0.1 :

# iscsiadm -m node -T iqn.2004-04.com.qnap:ts-859:iscsi.mytarget.c5884b -p 192.168.0.1 -l

Add automatic login at boot :

# iscsiadm -m node -T iqn.2004-04.com.qnap:ts-859:iscsi.mytarget.c5884b -p 192.168.0.1 --op update -n node.startup -v automatic

As I have another access to the target, I will disable it in order to not disturb the previous configuration:

# iscsiadm -m node -T iqn.2004-04.com.qnap:ts-859:iscsi.mytarget.c5884b -p 10.0.0.5 --logout
# iscsiadm -m node -T iqn.2004-04.com.qnap:ts-859:iscsi.mytarget.c5884b -p 10.0.0.5 --op update -n node.startup -v manual

 

At this point you will see the iSCSI LUNs as block devices on your client.

On my system the five iSCSI block devices are /dev/sdc, sdd, sde, sdf and sdg.

 

You will have create partitions and format them to either standard Linux partition or LVM partition.

I chose LVM because I need large file systems.

You can use parted or fdisk (if < 2To), see article: ” How To Make Partitions Larger Than 2To With Parted GPT Support“.

So here is the result:

# fdisk -l
Disk /dev/sdc: 2173.2 GB, 2173253451776 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1      264216  2122314988+  8e  Linux LVM
Disk /dev/sdd: 2173.2 GB, 2173253451776 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1      264216  2122314988+  8e  Linux LVM
Disk /dev/sde: 2173.2 GB, 2173253451776 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1      264216  2122314988+  8e  Linux LVM
Disk /dev/sdf: 2173.2 GB, 2173253451776 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1      264216  2122314988+  8e  Linux LVM
Disk /dev/sdg: 1937.1 GB, 1937169711104 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/sdg1               1      235514  1891766173+  8e  Linux LVM

 

Then create you LVM volume group and logical volume :

# pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1
# vgcreate -s 256M vol_vg /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1
# lvcreate -l 28672 vol_vg -n vol_lv1
# lvcreate -l 10924 vol_vg -n vol_lv2

File system creation:

# mkfs -t ext3 -b 4096 -N 100000 /dev/vol_vg/vol_lv1 -L VOL1
# mkfs -t ext3 -b 4096 -N 100000 /dev/vol_vg/vol_lv2 -L VOL2

Then mount the file systems:

# mkdir –p /VOL1 /VOL2
# mount -t ext3 /dev/vol_vg/vol_lv1 /VOL1
# mount -t ext3 /dev/vol_vg/vol_lv2 /VOL2
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vol_vg-vol_lv1 7.0T  6.3T  395G  95% /VOL1
/dev/mapper/vol_vg-vol_lv2 2.7T  1.5T  1.2T  57% /VOL2

If you will want to automatically mount your iSCSI file systems at startup (see article: How To Use UUID And Blkid To Manage Devices).

Get the UUID for each file system:

# blkid /dev/vol_vg/vol_lv1
/dev/vol_vg/vol_lv1: LABEL="VOL1" UUID="4a496f92-6840-4736-a0d5-5b9916113835" SEC_TYPE="ext2" TYPE="ext3"
# blkid /dev/vol_vg/vol_lv2
/dev/vol_vg/vol_lv2: LABEL="VOL2" UUID="cab5e3ec-4797-4227-98e8-e9bca3c3f766" SEC_TYPE="ext2" TYPE="ext3"

The add UUIDs to /etc/fstab :

UUID=4a496f92-6840-4736-a0d5-5b9916113835       /VOL1   ext3 _netdev    0 0
UUID=cab5e3ec-4797-4227-98e8-e9bca3c3f766       /VOL2   ext3 _netdev    0 0

 

** Tip :

If your Linux is a VM on ESXi :

–          Dedicate a network adapter to connect directly the Storage Array to the VMware server.

CAT 5e/6 RJ45 cable (through dedicated hardware switch, if needed).

–          Create a “vSwitch” using the dedicated network adapter with vShere Client.

vswitch iscsi

vswitch iscsi

–          Add a network adapter using the new vSwitch on your virtual host configuration.

Now you have a direct iSCSI connection to you storage array. You can start the configuration.