Restauration d’une base Sybase IQ 15.1

Logo

Introduction

Le cas doit être rare surtout dans un contexte de restauration de tera de données d’un datawarehouse, mais il peut arriver d’avoir à restaurer une base Sybase IQ. Voici un guide rapide décrivant la restauration d’une base de données Sybase IQ 15.1 en mode "full" (complète) avec la base factice utility_db.

Le serveur IQ SPA_U1_ASQ est restauré avec une sauvegarde du serveur DAS_P1_ASQ et la localisation des fichiers des dbspaces est différente entre les deux serveurs.

schema restore database

Dans cet article, les serveurs IQ sont normalisés (Installation et normalisation de Sybase IQ 15.1 sous Solaris).

Étapes de la restauration d’une base de données IQ

Génération de la commande restore database

Dans cet article, les fichiers des dbspaces du serveur IQ source sont localisés dans /DAS/sybase/DAS_P1_ASQ. Au cours de la restauration vers SPA_U1_ASQ, ils seront déplacés vers /DAS/sybase/SPA_U1_ASQ.

La table système sysfile du serveur source IQ DAS_P1_ASQ est très précieuse pour générer la commande RESTORE DATABASE :

DAS_P1_ASQ> iqisql -Usa

select dbspace_name, file_name
from sysfile
dbspace_name                 file_name
---------------------------- ------------------------------ 
system                       /DAS/asiq/DAS_P1_ASQ/DAS.db
IQ_SYSTEM_MAIN               IQ_SYSTEM_MAIN_01.iq
IQ_SYSTEM_TEMP               IQ_SYSTEM_TEMP_01.iqtmp
IQ_SYSTEM_MSG                DAS.iqmsg
IQ_MAIN                      IQ_MAIN_01.iq 

Dans DAS_P1_ASQ, les fichiers de la base de données IQ source ont été créés en chemin relatif par au catalogue système (/DAS/asiq/DAS_P1_ASQ/DAS.db) : les chemins relatifs par rapport au catalogue système sont conservés lors de la restauration.

Dans ce cas de figure, la commande RESTORE DATABASE est très simple, commande sauvegardée dans le fichier $CFG/script/restore.sql pour plus tard :

RESTORE DATABASE '/DAS/sybase/SPA_U1_ASQ/DAS.db'
FROM '/DAS/sybase/SPA_U1_ASQ/export/DAS_20100721_v1.bak'

Cette notion de chemin relatif ou chemin absolu est très importante : si les fichiers des dbspaces sont en chemin absolu et que les clauses RENAME ne sont pas spécifiées dans la commande RESTORE DATABASE, IQ tentera de restaurer ces fichiers dans leur répertoire absolu d’origine.

Pour déplacer par exemple les fichiers de bases de données durant la restauration grâce aux clauses RENAME :

RESTORE DATABASE '/DAS/sybase/SPA_U1_ASQ/DAS.db'
FROM '/DAS/sybase/SPA_U1_ASQ/export/DAS_20100721_v1.bak'
RENAME IQ_SYSTEM_MAIN to './data/IQ_SYSTEM_MAIN_01.iq'
RENAME IQ_SYSTEM_TEMP to './tempo/IQ_SYSTEM_TEMP_01.iqtmp'

N.B. : Les sauvegardes IQ se présentent sous la forme backupfile.# lorsque du stripping est appliqué. La clause FROM de la commande RESTORE DATABASE ne doit spécifier que backupfile sans aucun suffixe (FROM '...../DAS_20100721_v1.bak').

-rw-r--r--   1 sybase   dba      1999963188 Jul 21 22:48 DAS_20100721_v1.bak.1
-rw-r--r--   1 sybase   dba      1999914460 Jul 21 22:52 DAS_20100721_v1.bak.2
-rw-r--r--   1 sybase   dba      1999914460 JUl 21 22:55 DAS_20100721_v1.bak.3

Démarrage de la base factice utility_db

La base factice utility_db qui permet de lancer les commandes restore database est démarrée avec le binaire start_iq :

%> start_iq -n UTL_SRVUNXFR30_ASQ -x tcpip{port=30070} -gu utility_db

Pour plus d’informations au sujet de la base factice utility_db : IQ 12.7 : la base factice utilitaire IQ (utility_db). Avec la version 12.7, le démarrage est réalisé avec start_asiq, à partir des versions 15.x, start_asiq est renommé en start_iq.

Consultation de l’entête de la sauvegarde (RESTORE DATABASE ... CATALOG ONLY)

Avec la base utility_db, il est possible de visualiser l’entête d’une sauvegarde afin de vérifier quand elle a été réalisée, si il s’agit d’une sauvegarde complète (full) et non incrémentale, etc. L’option CATALOG ONLY de la commande RESTORE DATABASE donne ces informations dans un fichier backup.syb généré par défaut dans le répertoire $IQDIR15/logfiles.

L’option CATALOG ONLY ne déclenche aucune restauration de données, aucune crainte à avoir à ce sujet.

%> dbisql -c "uid=DBA;pwd=*******;eng=UTL_SRVUNXFR30_ASQ;dbn=utility_db" -nogui

RESTORE DATABASE '/DAS/sybase/SPA_U1_ASQ/DAS.db' 
FROM '/DAS/sybase/SPA_U1_ASQ/export/DAS_20100721_v1.bak'
CATALOG ONLY
$IQDIR15/logfiles/backup.syb
RESTORE, 6.0, DAS.db, ASIQ, '2010-07-21 22:01:00.000', sa, Full, Arch, /DAS/sybase/DAS_P1_ASQ
/export/dmp/DAS_20100721_v1.bak, ''

L’entête de la sauvegarde montre qu’il s’agit d’une sauvegarde complète (Full) réalisée le 21/07/2010 à 22h01 par le compte sa dans le répertoire /DAS/sybase/DAS_P1_ASQ/export/dmp.

Lancement de la commande restore database

Le script SQL contenant la commande restore database est exécuté dans l’environnement de la base factice utility_db avec dbisql ou dbisqlc.

%> dbisqlc -c "uid=DBA;pwd=********;eng=UTL_SRVUNXFR30_ASQ;dbn=utility_db" $CFG/script/restore.sql

Le compte et le mot de passe (uid/pwd) sont stockés dans le fichier util_db.ini (en lecture seule pour le compte qui démarre le serveur IQ), fichier localisé dans $IQDIR15/bin64 pour une version 64 bits.

Suivi de la restauration (*.srvlog, *.stderr)

Le statut de la restauration peut être consulté avec les fichiers <base_factice>.xxxx.stderr et <base_factice>.xxxx.srvlog créés par défaut dans le répertoire $IQDIR15/logfiles si l’option -o n’est donnée au démarrage de la base factice.

Le fichier <base_factice>.xxxx.stderr donne l’état d’avancement de la restauration des blocs, etc. :

%> tail -f UTL_SRVUNXFR30_ASQ.0012.stderr

Total number of IQ blocks being restored: 25
Total number of IQ blocks being restored: 50026
Total number of IQ blocks being restored: 100051
Total number of IQ blocks being restored: 150076
Total number of IQ blocks restored: 184567  at 2010-08-17 15:03:24
    IQ blocksize = 8192
    backup blocksize = 8232
    blocking factor = 25
    buffersize = 205816
ValidateRestore
PrepareForRestore
DoRestore 

Le fichier <base_factice>.xxxx.srvlog mentionne des restaurations avec des messages indiquant le démarrage d’une base de données IQ <a_restore> :

%> tail -f UTL_SRVUNXFR30_ASQ.0012.srvlog
I. 08/17 15:03:24. Starting database "a_restore" (/DAS/sybase/SPA_U1_ASQ/DAS.db) a
t Tue Aug 17 2010 15:03
I. 08/17 15:03:24. Database recovery in progress
I. 08/17 15:03:24.     Last checkpoint at Tue Aug 17 2010 15:01
I. 08/17 15:03:24.     Rollback log...
I. 08/17 15:03:24.     Checkpointing...
I. 08/17 15:03:24. Recovery complete

Cas d’échec si les fichiers existent déjà

Aucun fichier de la base IQ ne doit déjà exister, sinon la commande restore database tombe en échec :

Si les fichiers du catalogue .db et .log existent déjà :

Exception Thrown from db_backupCmds.cxx:1307, Err# 191, tid 146 origtid 146
   O/S Err#: 0, ErrID: 4098 (db_sqlexception); SQLCode: -1012025, SQLState: 'QUA25
', Severity: 14
[20948]: .db or .log file exists.  Full restore will not be done.
-- (db_backupCmds.cxx 1307)

Si les fichiers de la base de données existent déjà :

Exception Thrown from db_backupCmds.cxx:1346, Err# 198, tid 146 origtid 146
   O/S Err#: 0, ErrID: 4098 (db_sqlexception); SQLCode: -1012037, SQLState: 'QUA37
', Severity: 14
[20960]: IQ store dbfile /DAS/sybase/SPA_U1_ASQ/DAS_01.iqmaint exists. Restore will not be done.
-- (db_backupCmds.cxx 1346)

Restaurations et Sysam (iq.default.lmp)

Bien entendu il faut disposer de la licence adéquate : nombre de CPU, licence CP, DT (Development & Testing)… pour démarrer le serveur IQ cible.

À l’issue de la restauration, IQ créé un fichier <dbname>.lmp (DAS.lmp dans cet exemple) dans le même répertoire que le catalogue <dbname>.db en prenant comme modèle le fichier $IQDIR15/Sysam/iq.default.lmp.

Si le fichier $IQDIR15/Sysam/iq.default.lmp est défini par exemple avec PE=EE (Edition=Enterprise Edition) et LT=DT (License Type=Development & Testing), ces paramètres de licence peuvent être incompatibles avec ceux définis dans Sysam : PE=EE;LT=CP (CPU Edition). Dans ce cas de figure, le démarrage du serveur IQ restauré est en échec :

Failed to obtain 1 license(s) for IQ_CORE feature from license file(s) or server(s).
Licenses exist for Sybase IQ, but a license containing the configured (PE=EE;LT=DT) attributes could not be obtained. 
Verify that Sybase IQ is configured to use the correct type of license, and either reconfigure; 
or generate and deploy the desired license from the Sybase Product Download Center.

Pour contourner ce point, il suffit d’éditer le fichier <dbname>.lmp généré lors de la restauration et d’appliquer les paramètres adéquats pour Sysam. Dans cet article, LT=DT est remplacé par LT=CP dans le fichier DAS.lmp. Pour éviter de retrouver ce petit inconvénient lors d’une prochaine restauration, corriger directement le fichier source modèle $IQDIR15/Sysam/iq.default.lmp.

Réinitialisation du journal avec dblog

Le journal <dbname>.log de la base IQ est reconstruit avec l’option -t du binaire dblog :

%> cd /DAS/sybase/SPA_U1_ASQ
%>
%> dblog -t DAS.log DAS.db
SQL Anywhere Transaction Log Utility Version 11.0.1.5027
"DAS.db" was using log file "DAS.log"
Transaction log filename not changed
"DAS.db" is using no log mirror file
Transaction log starting offset is 0000926901
Transaction log current relative offset is 0029322265