version 6.0
bk_Debut sauvegarde integrale Entier
| Paramètre | Type | Description | ||||
| Cette commande ne requiert pas de paramètre | ||||||
| Résultat | Entier | 0 si l'exécution est correcte, sinon | ||||
| Code d'erreur | ||||||
Description
La commande bk_Debut sauvegarde integrale lance le process de sauvegarde de 4D Backup. Cette fonction réalise des opérations préparatoires nécessaires à la sauvegarde de la base : elle attend que toutes les transactions soient terminées et verrouille la base en écriture.
Toutes les commandes et fonctions de 4D Backup doivent être encadrées par les routines bk_Debut sauvegarde integrale (ou bk_Debut mise a jour miroir) et bk_FIN SAUVEGARDE quatre routines autonomes font exception à ce mode de fonctionnement (reportez-vous à la section Structure des instructions).
bk_Debut sauvegarde integrale retourne 0 lorsque son exécution est correcte. Dans le cas contraire, un numéro d'erreur est renvoyé (reportez-vous à la liste fournie à l'Annexe A, Codes d'erreurs de 4D Backup). Nous vous recommandons de tester systématiquement la valeur retournée. En effet, si bk_Debut sauvegarde integrale retourne une valeur autre que 0, les instructions suivantes seront toutes ignorées.
Accès à la base durant la sauvegarde
Lors de l'appel à bk_Debut sauvegarde integrale, les accès à la base sont restreints de la manière suivante :
Avec 4e Dimension monoposte : tous les process autres que le process qui a appelé la sauvegarde sont endormis, ils ne seront libérés qu'après l'exécution de la commande bk_FIN SAUVEGARDE. Ainsi, la base ne risque pas d'être modifiée pendant la sauvegarde.
Note : La combinaison de touches Alt+Majuscule+Clic bouton droit (sous Windows) ou Contrôle+Option+Majuscule+Clic (sous MacOS) permet, en cas de nécessité, de "tuer" le process de sauvegarde.
Avec 4D Server : Les clients connectés à 4D Server pourront consulter les enregistrements, mais sans pouvoir les modifier ni les effacer. Si un poste client envoie une requête d'ajout, de suppression ou de modification au serveur, il obtient une fenêtre l'invitant à attendre la fin de la sauvegarde. Une fois la base sauvegardée, la fenêtre disparaît d'elle-même et l'action est effectuée.
Le bouton Annuler l'opération permet à l'utilisateur d'annuler sa requête en cours pour ne pas avoir à attendre la fin de la sauvegarde.
Cependant, si l'action en attente provient d'une méthode lancée avant la sauvegarde, il est déconseillé de l'annuler car seules les opérations restant à effectuer seront annulées. Or, une méthode "à moitié" exécutée peut conduire à des incohérences logiques dans la base.
Note : Lorsque l'action en attente provient d'une méthode et que l'utilisateur clique sur le bouton Annuler l'opération, 4D renvoie l'erreur -9976.
Vous verrez également apparaître dans la fenêtre d'administration du serveur le process de sauvegarde.
Traitement des transactions
bk_Debut sauvegarde integrale attend pour démarrer que toutes les transactions soient terminées. Si dans le même process vous démarrez une transaction par la commande de 4e Dimension DEBUT TRANSACTION et que vous appelez ensuite la commande bk_Debut sauvegarde integrale, sans avoir exécuté ni VALIDER TRANSACTION ni ANNULER TRANSACTION, la fonction bk_Debut sauvegarde integrale retournera l'erreur 1404.
Dans le même ordre d'idée, évitez de présenter à l'utilisateur une boîte de dialogue de saisie au cours d'une transaction. Si un utilisateur part déjeuner en laissant sa machine allumée avec un dialogue ouvert pendant une transaction, vous ne pourrez pas sauvegarder la base. De plus, la base sera verrouillée en écriture pour tous les utilisateurs tant que cette transaction ne sera pas validée.
Il est donc plus astucieux d'effectuer vos transactions après les boîtes de dialogue. Ce n'est que lorsque l'utilisateur valide son opération que la transaction est lancée, puis validée ou annulée. De cette façon, non seulement vous optimisez le fonctionnement général de votre base, mais vous évitez de bloquer la sauvegarde à cause d'une transaction bloquée par un utilisateur.
A noter également que l'ensemble de la base étant verrouillé, si vous souhaitez mettre à jour un enregistrement, par exemple pour stocker des informations sur la sauvegarde, vous devrez le faire après la commande bk_FIN SAUVEGARDE. En effet, il n'est pas possible de modifier, ajouter ou supprimer un enregistrement entre les instructions bk_Debut sauvegarde integrale et bk_FIN SAUVEGARDE.
Exemples
(1) Voici la méthode la plus simple permettant de déclencher une sauvegarde intégrale :
C_ENTIER($vErreur) $vErreur:=bk_Sauvegarde integrale
(2) Cette méthode, plus complète, déclenche également la sauvegarde :
Si(bk_Debut sauvegarde integrale=0) `Ouverture du process de sauvegarde Si (bk_Lancer copie =0) `Déclenchement de la sauvegarde Repeter Jusque (bk_Lire etat #4) `Fin de la copie Fin de si bk_FIN SAUVEGARDE `Fermeture du process de sauvegarde Fin de si
(3) Vous pouvez affiner la méthode précédente en gérant les éventuelles erreurs :
C_ENTIER($vErreur;$vEtat)
$vErreur:=bk_Debut sauvegarde integrale
Si ($vErreur#0)
ALERTE("Impossible de démarrer la sauvegarde : erreur N° " +Chaine($vErreur))
Sinon
$vErreur:=bk_Lancer copie
Si ($vErreur#0)
ALERTE("Impossible de démarrer la copie : erreur N° " + Chaine($vErreur))
Sinon
Repeter
$vEtat:=bk_Lire etat
Jusque ($vEtat#4)
Si ($vEtat#5)
ALERTE("Problème durant la copie : erreur N° " + Chaine($vEtat))
Fin de si
Fin de si
bk_FIN SAUVEGARDE
Fin de si
Référence
bk_Debut mise a jour miroir, bk_FIN SAUVEGARDE, bk_Lire etat.