Cette page a été traduite automatiquement. Lisez l'original en anglais. English

Bibliothèque IBSurgeon

Conversion rapide de bases de données Firebird 2.5 vers Firebird 3.0

Basil Sidorov, 02-APR-2019, (c) IBSurgeon

Chaque version de Firebird possède son propre format de base de données - O(n)D(isk)S(tructure). Jusqu’à la version 2.5, le moteur de base de données peut fonctionner avec l’ODS de la version précédente, mais le moteur Firebird 3 ne fonctionne qu’avec son propre ODS (version 12.0).

Pour mettre à niveau une base de données de Firebird 2.5 vers 3.0, il est nécessaire de sauvegarder le fichier de base de données avec l’outil gbak dans 2.5, puis de le restaurer dans 3.0.

Bien sûr, une base de données doit être préparée pour la conversion - les métadonnées et les requêtes doivent être vérifiées pour leur compatibilité avec Firebird 3.0, et après la restauration dans Firebird 3, tous les objets avec BLR (déclencheurs, procédures stockées, etc.) doivent être recompilés.

Si nous utilisons l’approche standard, nous devons effectuer une sauvegarde de la base de données sur 2.5, puis installer Firebird 3 et restaurer le fichier de sauvegarde.

C’est acceptable si vous avez assez de temps. Mais lorsque votre base de données est volumineuse, ou que vous avez des dizaines de bases de données à migrer, et que vous êtes limité en temps, vous pouvez utiliser la conversion en flux, qui est 25 à 30 % plus rapide.

L’idée est d’utiliser le convoyeur :

gbak -b … db25 stdout | gbak -c … stdin db30

Gbak -b de 2.5 écrit la sauvegarde séquentiellement et la dirige vers le flux stdout, qui est immédiatement lu depuis stdin par gbak de 3.0 et crée une nouvelle base de données.

Ce convoyeur doit utiliser l’accès local à la base de données (embarqué) car les transferts de données réseau (même via localhost) ralentiront considérablement le processus.

Ci-dessous, nous examinons comment effectuer une sauvegarde en flux sur Windows et sur Linux.

Windows

Il est préférable de créer un ensemble spécial de fichiers Firebird pour Windows. Nous devons prendre l’archive embarquée Firebird 2.5, renommer fbembed.dll en fbclient.dll, et ajouter gbak.exe et éventuellement isql.exe.

Pour Firebird 3.0, nous utiliserons l’archive standard.

L’ensemble minimal (qui ne nécessite pas l’exécution de VS2008/VS2010) contient ces fichiers :

Code
25/gbak.exe
25/fbclient.dll
25/firebird.conf
25/firebird.log
25/firebird.msg
25/ib_util.dll
25/icudt30.dll
25/icuin30.dll
25/icuuc30.dll
25/Microsoft.VC80.CRT.manifest
25/msvcp80.dll
25/msvcr80.dll
30/fbclient.dll
30/firebird.conf
30/firebird.msg
30/gbak.exe
30/ib_util.dll
30/icudt52.dll
30/icudt52l.dat
30/icuin52.dll
30/icuuc52.dll
30/msvcp100.dll
30/msvcr100.dll
30/intl/fbintl.conf
30/intl/fbintl.dll
30/plugins/engine12.dll

Un administrateur/développeur expérimenté peut noter que les fichiers 25/intl/fbintl.dll et 25/intl/fbintl.conf ne sont pas inclus. C’est vrai, car gbak n’utilise pas le jeu de caractères pour la connexion et ne convertit pas les données entre les jeux de caractères. Mais, côté récepteur, Firebird 3.0, les fichiers icu* sont nécessaires, car les jeux de caractères sont utilisés lors de la création des index (l’étape finale de la sauvegarde/restauration).

Il est recommandé d’ajouter deux lignes au firebird.conf de Firebird 3 :

Code
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

De plus, il est bon de définir des noms différents pour le paramètre IpcName pour Firebird 2.5 et Firebird 3.0.

D’autres paramètres, si vous le souhaitez, peuvent être modifiés en considérant que lors de la conversion de la base de données, Firebird 2.5 lit les données, et Firebird 3 écrit les données et crée les index.

Pour accélérer la création des index, nous recommandons d’augmenter le paramètre TempCacheLimit à environ 40 % de la RAM disponible (s’il s’agit d’un ordinateur ou d’un serveur dédié).

Par exemple, si vous avez 16 Go de RAM, vous pouvez définir

Code
TempCacheLimit=6G

Bien sûr, cette valeur ne peut être définie que si vous utilisez Firebird 3 64 bits, car tout processus 32 bits ne peut pas allouer plus de 2 gigaoctets de RAM.

Vous n’avez pas besoin de modifier ce paramètre pour 2.5, car il n’affecte pas la vitesse de sauvegarde, et Firebird 2.5 lui-même ne peut pas utiliser plus de 2 gigaoctets de RAM pour ce paramètre, même en version 64 bits.

De plus, avant de commencer, veuillez vérifier que la valeur « page buffers » est 0 sur la page d’en-tête de la base de données (gstat -h nomdelabase).

Si le paramètre « page buffers » est défini dans l’en-tête de la base de données, il remplace les paramètres de firebird.conf, et en cas de valeur élevée, peut entraîner une consommation de mémoire énorme et une dégradation des performances du processus de conversion.

Ensuite, copiez l’ensemble de fichiers préparé sur le système cible.

Veuillez noter que vous devez arrêter le service régulier de Firebird 2.5 avant la conversion.

Ensuite, démarrez l’invite de commande avec élévation des droits (Exécuter en tant qu’administrateur) :

Code
set ISC_USER=<spécifiez_le_propriétaire_de_votre_base_ou_sysdba>
set ISC_PASSWORD=motdepasse
"25/gbak" -z -b -g -v -st t -y 25.log db25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin db30

Ici, la ligne de commande complète est entourée de guillemets doubles, le symbole | est utilisé pour la concaténation, et le symbole ^est utilisé pour échapper le saut de ligne (c’est utile en cas de lignes de commande longues).

L’option -st(atus) a été introduite dans Firebird 2.5.8 et permet d’écrire plus d’informations sur le processus de sauvegarde dans le fichier journal.

Linux

Firebird 3 dépend de la bibliothèque tommath sur Linux. Sur CentOS (RHEL), cette bibliothèque se trouve dans le dépôt EPEL, sur Ubuntu (Debian) dans le dépôt système.

Sur CentOS, vous devez d’abord activer le dépôt EPEL et ensuite seulement exécuter « yum install libtommath».

Sur Ubuntu, vous n’avez pas besoin d’ajouter de dépôts supplémentaires, mais Ubuntu 16 et Ubuntu 18 ont des versions de paquets différentes - libtommath0 et libtommath1, respectivement.

Firebird 3 recherche tommath.so.0, et pour Ubuntu 18, vous devez créer un lien symbolique de tommath.so.0 vers tommath.so.1. Pour ce faire, vous devez d’abord trouver tommath.so.1. Le chemin habituel sur Ubuntu - /usr/lib/x86.64- linux -gnu/, mais il peut être différent dans d’autres distributions basées sur Debian.

Un autre problème est que jusqu’à Firebird 3.0.1 inclus, il n’y avait pas de moyen simple d’installer 2 versions différentes du serveur. L’option « compiler à partir des sources avec un préfixe » n’est pas envisagée ici.

Firebird 3.0.2 a le correctif CORE‑5204 : compilation avec -enable-binreloc, (http://tracker.firebirdsql.org/browse/CORE-5204), et l’option d’installation séparée -path.

Donc, si la bibliothèque tommath, et, si nécessaire, le lien symbolique tommath.so.0 ont été installés, vous pouvez installer la dernière distribution Firebird 3.0.4 dans /opt/fb3 avec la commande suivante : ./install.sh -path /opt/fb3

Après cela, vous pouvez arrêter le Firebird 2.5 existant et exécuter la conversion en flux.

Si vous utilisez Firebird 2.5 Classic, n’oubliez pas que Classic est généralement exécuté par xinetd - vous devez donc désactiver le service firebird pour xinetd ou arrêter complètement xinetd.

Vous n’avez pas besoin de définir les paramètres MaxUnflushed* dans firebird.conf de Firebird 3 (car ils ne fonctionnent que sous Windows), ni de modifier quoi que ce soit dans Firebird 2.5.

L’accès embarqué dans Firebird 2.5 sur Linux n’est pas comme sur Windows - Firebird 2.5 fonctionnera à l’intérieur du processus gbak (sans partie réseau), mais les droits d’accès seront vérifiés avec la base de données utilisateur, il est donc nécessaire de spécifier non seulement le nom d’utilisateur propriétaire de la base de données mais aussi le mot de passe :

Code
export ISC_USER=nomutilisateur ISC_PASSWORD=motdepasse
/opt/firebird/bin/gbak -b … db25 stdout\
|/opt/fb3/bin/gbak -c … stdin db30

Après la conversion réussie, vous devez supprimer « l’instance temporaire » de Firebird 3, puis désinstaller le 2.5 d’origine, et seulement après cela, vous pouvez effectuer l’installation propre de Firebird 3.

Il est préférable d’installer Firebird 3 à partir de tar.gz, pas à partir des dépôts, car tar.gz installe tout dans l’emplacement pratique /opt/ firebird , et aussi la version de Firebird dans les dépôts est généralement plus ancienne que dans tar.gz.

Après la fin de la conversion et l’installation de Firebird 3, vous devez vérifier que l’utilisateur « firebird » est le propriétaire du fichier de base de données.

Si ce n’est pas le cas, vous devez le corriger :

Code
chown firebird.firebird nomdelabase

Résumé

La conversion en flux est plus rapide que l’approche standard (gbak -b, puis gbak -c), car elle saute les opérations « d’écriture de sauvegarde » au milieu - par conséquent, le temps de conversion en flux est d’environ « temps de sauvegarde plus 10-15 % » plus « temps de création des index ».

Dans notre pratique, la conversion en flux est au moins 25 à 30 % plus rapide que la sauvegarde et la restauration « séquentielles » traditionnelles.

Outre l’économie de temps et la réduction de la demande d’espace disque libre, la conversion en flux a un autre avantage - elle ne nécessite pas de supprimer le Firebird 2.5 existant, ce qui vous permet de revenir rapidement à 2.5 en cas d’erreur pendant la conversion.

Contacts

Veuillez envoyer vos commentaires et demandes à l’équipe de support IBSurgeon.