Après moult documentation lue sur le sujet : wiki, presentation pdf online, forum, formation, etc.
Je souhaiterais faire le point sur cette stratégie de backup/restore afin d'avoir l'esprit tranquille le jour où j'utilise réellement mon backup (ça m'est arrivé une fois où un process avait ruiné la base suite à sa coupure en arrêtant le serveur "alfresco.sh stop").
1) Le backup de la base doit être antérieur au backup du alf_dataC'est une bonne pratique en effet. Vous ne mentionnez nulle part le backup des indexes Lucene. relire donc la page "Backup and restore". Vous pouvez backuper les indexes J-1 et faire une indexation différentielle à la restauration. vous devrez rédindexer la dernière partie manquante, à mesurer en fonction de vos SLA.
2) Les fichiers .bin dans le alf_data sont considérés comme orphelin lorsqu'ils ne sont plus référencés en base.Vrai jusqu'en 3.2, une référence est alors gardée dans une table à part.
3) Un scheduler qui se lance tous les 7 jours (par défaut) nettoie les fichiers orphelins en les déplaçant du contentstore au contentstore.deleted.Un scheduler ne se lance pas. Un scheduler lance des jobs qui sont schedulés. Erreur de terminologie. Le job auquel vous faites référence (contentStoreCleaner) se lance tous les jours à 4 heures du matin. Les contenus supprimés il y a plus de 14 jours (par défaut) identifiés par ce job sont déplacés dans contentstore.deleted.
4) Une base référençant des fichiers .bin (et donc plus récente que le alf_data) non existant abouti à un repository corrompuCa dépend des versions d'Alfresco, et de la position des .bin manquants dans l'historique des transactions, et de certaines options de démarrage. Le repository n'est pas corrompu, c'est la cohérence de l'ensemble qui n'est pas respectée.
5) Un alf_data contenant des fichiers .bin non référencés en base (et donc plus ancienne que le alf_data) abouti à un repository fonctionnel.Ce n'est pas un aboutissement, mais c'est vrai.
Je souhaiterais donc à partir de là mettre en place une stratégie de backup.Affirmation pour le moins étrange. Je ne connais pas votre cas d'usage. Vous ne modifiez que des métadonnées et n'ajoutez jamais ni ne modifiez de documents dans votre repository ? Comme expliqué sur la page wiki Backup and restore que vous dites avoir lu, le plus important est la cohérence de l'ensemble. pour faciliter cela, il est utile de backuper les 3 composants ensemble ( repository, base de données, indexes Lucene qu'encore une fois vous ne mentionnez pas).
Un expert alfresco m'a recommandé de sauvegarder souvent la base et moins fréquemment le alf_data, pourquoi ?
Scénario 1 :
Le mercredi 2 du mois je sauvegarde la base + alf_data.
Chaque jour suivant, je sauvegarde uniquement la base.
Le lundi 7 du mois, un crash matériel survient, je décide de restorer.
Selon les règles citées ci-dessus, je ne peux restorer que la sauvegarde du mercredi 2 car mon plus récent backup de alf_data et du mercredi 2 : conclusion , 3-4jours de travail perdu. Le client rentre en conflit avec le prestataire .
En quoi l'affirmation de l'expert est-elle donc juste ?
Scénario 2
Le mercredi 2 du mois je sauvegarde la base + alf_data.
Aucune sauvegarde n'est faite par la suite.
Le lundi 7 du mois, un crash matériel survient uniquement sur le serveur de base de donnée, je décide de restorer juste la base.
L'application tourne donc avec une base du mercredi 2 et un alf_data à jour du lundi 7.
Tous les documents injectés dans l'application entre le 2 et le 7 sont donc orphelin car non référencés en base.
Au jour 2+7=9 du mois, le scheduler effectue son job et décide donc de supprimer définitivement tous les documents injectés entre le 2 et le 7 du mois : conclusion , 3-4jours de travail perdu. Le client rentre en conflit avec le prestataire .
En quoi la notion de la durée autorisée pour la protection (propriété "protectDays") est-elle "safe" car les documents orphelins ont été nettoyés ?
Merci de vos éclaircissements.De rien. Je note toutefois qu'à partir du moment où il y a des clients, des prestataires, des contrats , et visiblement des lacunes, un contrat de souscription au support permettrait de vous aider à faire les bons choix et à vous aider avec des engagements contractuels en cas de problème.
Par exemple, j'ai déplacé plusieurs milliers de fichiers dans une seule et même transaction.Hum … ça sent à plein nez le non respect des bonnes pratiques, en ce qui concerne la gestion des transactions par exemple.
Les logs étant terminés (ceux décrivant le process), je pensais que ce processus lourd était terminé.
Faux, des traitements arrière plan ont eu lieu : par ex. maj des indexes.
RetryingTransactionCallback<Object> txnWork = new RetryingTransactionCallback<Object>()
{
public Object execute() throws Exception
{
// Do stuff
Object result = …
return result;
}
};
TransactionService transactionService = serviceRegistry.getTransactionService();
Object result = transactionService.getRetryingTransactionHelper().doInTransaction(txnWork, true);
Content from pre 2016 and from language groups that have been closed.
Content is read-only.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.