 
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.
 
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 -Usaselect dbspace_name, file_name from sysfiledbspace_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.3Dé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_dbPour 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" -noguiRESTORE 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.sqlLe 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.stderrTotal 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.srvlogI. 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.dbSQL 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