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 -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