Une base de données interne propre ?

Une base de données interne propre ?

par Séverin Terrier,
Nombre de réponses : 31
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Comme vous le savez, Moodle utilise une base de donnée pour le stockage des informations nécessaires à son fonctionnement.

Il peut arriver que cette base de données "interne" ne soit pas très "propre" triste

J'avais déjà évoqué le sujet il y a plus de 2 ans, et on en a reparlé récemment à propos de sauvegardes/restauration de cours et de banque de question.

Il existe dans Moodle deux éléments qui permettent de trouver des erreurs internes dans la base de données :

  • moodle/admin/tool/health
  • Administration du site > Développement > Éditeur XMLDB

A ce propos, j'ai trouvé cette page dans la documentation, mais elle date de 2008/2009, et était adaptée pour Moodle 1.9, je ne sais pas dans quelle mesure les informations sont encore valides et utiles...

Est-ce que certains parmi vous ont beaucoup d'erreurs qui ressortent depuis ces outils, et ont trouvé des façons propres de corriger complètement les problèmes rencontrés (outre les quelques requêtes SQL indiquées via "health") ?

Parce qu'à l'époque, j'étais en 1.9, et suis maintenant en 2.7 : certaines tables ont changé, et les informations et requêtes ne sont plus forcément adaptées.

Séverin

Moyenne des évaluations Utile (2)
En réponse à Séverin Terrier

Re: Une base de données interne propre ?

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour Séverin,

J'utilise régulièrement le "moodle/admin/tool/health" et c'est un peu le beans. Surtout la partie "Question categories should belong to a valid context" qui ne fait qu'empirer au fil du temps... Certaines se soignent, d'autres... moins.

Je suivrai ce fil avec intérêt. Merci d'avoir initié cette demande.

A bientôt,
Patrick

En réponse à Patrick Lemaire

Re: Une base de données interne propre ?

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Ne connaissant pas la seconde méthode, je m'y suis essayé.

Au début, j'étais plutôt content "...trouvés: 0" grand sourire Trop la classe. Mon Moodle est "propre".

Mais tout à coup, on m'annonce que 31 clefs extérieures ont été violées !!! DIANTRE !? Comment cela est-il possible ? Moi qui croyait mon Moodle de bonne réputation pensif

Et pis, là, on se sent seul face à une telle situation. Où dois-je porter plainte ?!! Je sens que je ne vais plus dormir tranquille...

En réponse à Patrick Lemaire

Re: Une base de données interne propre ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Oui, je rencontre aussi (depuis bien longtemps) ce genre de problème sur mes instances Moodle triste

Et j'aimerais bien arriver à remettre tout cela propre et clair !

D'autant que je ne sais pas trop quelle influence cela peut avoir (pour le futur) pensif

En réponse à Séverin Terrier

Re: Une base de données interne propre ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Selon mes instances Moodle, j'ai 9, 11 ou 15 clefs qui "subissent des violations" (les pauvres) incertain

Et parfois, cela représente des milliers de lignes pensif

Je crois que je vais d'abord essayer de régler les problèmes révélés par "health", avant de voir pour le reste...

En réponse à Séverin Terrier

Re: Une base de données interne propre ? XMLDB et violation de clefs extérieures

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Concernant ce qui est signalé par XMLDB et les violations de clefs extérieures, j'avais ouvert une discussion à ce propos (il y a un an et demi).

Je pense qu'il faut mieux continuer à en discuter dans ce fil dédié.

Séverin

En réponse à Séverin Terrier

Re: Une base de données interne propre ? XMLDB et violation de clefs extérieures

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles

Bonjour,

La page récapitulant les requêtes à appliquer pour corriger la banque de questions semble indiquer des solutions non fonctionnelles.

  • Ou bien la requête ne produit rien.
  • Ou bien on signale une erreur de syntaxe de la requête SQL elle-même.surprise

On n'est pas sorti de l'auberge...triste

Daniel

En réponse à Daniel Méthot

Re: Une base de données interne propre ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Daniel : tu n'as pas répondu au bon endroit : cette branche de la discussion était orientée vers d'autres soucis, visibles depuis XMLDB...

En fait, je crois que la page de documentation utilise (plus ou moins) les mêmes requêtes que ce que l'on peut trouver via admin/tool/health clin d’œil

Séverin

En réponse à Patrick Lemaire

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Concernant l'erreur "Question categories should belong to a valid context", si les catégories ne contiennent pas de question, il est possible de les supprimer grâce à la commande SQL fournie sourire

Par contre, si les catégories contiennent des questions, c'est (un peu) plus compliqué :

il faudra modifier le contexte, afin de l'attribuer à un cours (spécifique), pour pouvoir accéder aux questions (via ce cours), et les supprimer. Mais si on veut faire ça proprement, il faut s'assurer que les questions (en question langue tirée ) ne sont pas utilisées, et référencées dans d'autres tables ! Ou sinon, assurer un nettoyage de ces autres tables ?

Pour ma part, sur une de mes plateformes, j'ai une seule catégorie qui remonte, avec 4 questions.

Pour avoir quelques détails, j'ai lancé la commande suivante :

SELECT id, category, qtype, from_unixtime(timecreated) AS created, createdby, from_unixtime(timemodified) AS modified, modifiedby, name, questiontext FROM mdl_question WHERE category IN (87);

Qui m'indique les questions suivantes : 516,517,518,519

Et j'ai vérifié l'utilisation éventuelle dans certaines tables, avec les commandes :

SELECT COUNT(1) FROM mdl_question_answers WHERE question IN (516,517,518,519);
SELECT COUNT(1) FROM mdl_question_attempts WHERE questionid IN (516,517,518,519);

Ces requêtes n'ayant renvoyé aucun résultat, je suppose que je pourrai modifier la catégorie, pour supprimer les questions (puis la catégorie) sans problème...

Séverin




Moyenne des évaluations Utile (2)
En réponse à Séverin Terrier

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bon,

J'ai également posé la question en anglais.

Séverin

Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles

Bonjour,

Je vais ces prochains jours essayer de corriger des banques de questions en utilisant les requêtes proposées dans la page indiquée par Séverin.

Peu coutumier des tests, donc des catégories et des questions, je trouve étrange que Moodle ne signale pas, dès l'élaboration des questions, ces défauts structurels.

On éviterais de se trouver ensuite devant des restaurations impossibles en raison de défauts insoupçonnés dans la banque de question.

Je tente de migrer actuellement tout un ensemble de cours à partir du clone d'une plateforme 2.5 qui présentait des dysfonctionnements (sauvegardes impossibles, mauvaises versions de php...).

Le clone fonctionne correctement chez o2switch. Tous les paramètres sont OK et les sauvegardes manuelles et automatiques fonctionnement à présent.

Pour redémarrer proprement j'ai préféré installer une nouvelle PF 2.7 sur laquelle je restaure les cours un à un.

Or la plupart des restaurations bloquent en signalant une erreur au niveau de la banque de questions.

Après transfert des très nombreuses catégories de la banque de questions (étonnant qu'un transfert global ne puisse être fait...) je vais appliquer "à l'aveugle" les différentes requêtes proposées afin de voir ce que cela provoque.

Au pire recréer certaines catégories et questions...

Je suis loin de mes préférences habituelles : Tout faire en trois clics !!! sourire

 

Daniel

En réponse à Séverin Terrier

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

La suite, avec une vérification supplémentaire :

SELECT COUNT(1) FROM mdl_quiz_slots WHERE questionid IN (516,517,518,519);

Qui m'a renvoyé 0 résultat, très bien.

Je vais donc pouvoir m'attaquer à la partie modification puis suppression.

Je commence par chercher le contexte correspondant à un cours (spécifique : id=2) dans lequel je vais "(dé)placer" la catégorie de questions :

SELECT id FROM mdl_context WHERE contextlevel = 50 AND instanceid = 2;

Il me renvoi l'information du contexte : 18

Je modifie donc la catégorie de question qui pose problème (id=87), pour la rattacher à ce contexte :

UPDATE mdl_question_categories SET contextid=18 WHERE id = 87;

Maintenant, en allant dans le cours dédié (id=2), je retrouve dans ma banque de question cette catégorie, ainsi que les questions qu'elle contient, et je peux les supprimer sourire

Une fois ceci fait, je n'ai plus l'erreur en relançant moodle/admin/tool/health sourire

Séverin


Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Sur une autre instance Moodle, j'avais le même genre de problème.

Et par contre, j'avais des enregistrements correspondants dans la table mdl_question_answers. Mais cela correspond aux réponses possibles (à une question). Du coup, en supprimant ces questions (via l'interface Moodle), les réponses possibles ont également été supprimées sourire

Allez, encore une autre instance à traiter, et je pourrais passer au problème suivant...

En réponse à Séverin Terrier

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

J'avais fait ces constats il y a un temps de cela et comme cela n'impactait visiblement pas la stabilité de la plateforme, j'étais passé à plus urgent. Cependant, à laisser trainer, je m'aperçois que le phénomène s'étend.

Je suppose que ce sont des questions qui sont dupliquées lors de restauration de cours. Pourtant, pas de message d'erreur de Moodle à l'usage.

Il est dommage que les tests d'intégrité n'aient pas lieu lors de la phase de duplication des éléments. En effet, une simple notification serait déjà un signe de suspicion.

A suivre !
Patrick

En réponse à Patrick Lemaire

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Pour ma part également, ces éléments traîn(ai)ent depuis des années, et sont (étaient) de plus en plus nombreux, j'imagine aux gré des sauvegardes/restaurations.

D'où l'envie de "faire du propre", pour m'en débarrasser définitivement, en espérant qu'il n'y aura personne pour ré-utiliser de vieilles sauvegardes, et ré-implanter ce genre de désagrément...

Séverin

En réponse à Séverin Terrier

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Peut-être une pistounette sur ce fil de discussion : Test et catégories de questions ?

On y découvre que supprimer un test avec des questions les fait disparaitre de l'interface mais elles sont toujours présentes dans la Base de données ! DIANTRE !!!

A-t-on une idée sur cycle de vie des données ? Est-ce qu'il y a une fonction dans le CRON qui purge les tables des questions obsolètes plus tard ? Un peu comme les fichiers dans Moodle.

Patrick

En réponse à Patrick Lemaire

Re: Une base de données interne propre ? "Question categories should belong to a valid context"

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles

En effet...

Purger, et réorganiser automatiquement la base de données par rapport aux banques de questions suite à des erreurs constatées de structure serait un + très appréciable.

Avec le temps et les mises à jour tout cela semble devenir un vrai "bric à brac".

Daniel

En plein dedans...

En réponse à Daniel Méthot

Re: Une base de données interne propre ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Ce serait bien... mais j'ai peur que cela ne soit pas possible : quand la pagaille est mise, il est parfois impossible de retrouver les éléments qui auraient dus être liés ensemble.

Il suffit qu'il y ait eu une erreur à un moment donné, et cela peut tout perturber !

Et même si des correctifs sont intégrés dans Moodle pour corriger le problème, entre ceux qui n'auront pas appliqué les mises à jour, ceux qui auront utilisé des vieilles sauvegardes et ré-introduit des problèmes, ce n'est pas évident...

Séverin

En réponse à Séverin Terrier

Re: Une base de données interne propre ? - Différents problèmes liés aux (banques de) questions

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Après avoir corrigé les problèmes liés à "Question categories should belong to a valid context" (que je rencontrais sur mes différentes plateformes), je continue.

Je rencontre, sur ma plateforme principale uniquement (en 2.7 actuellement, mais avec des contenus issus de 10 ans de Moodle, depuis Moodle 1.5), différentes erreurs liées aux (banques de) questions :

  • "Multi-answer questions data consistency"
  • "Only multianswer and random questions should be the parent of another question"
  • "Question categories should belong to the same context as their parent"

Est-ce que certain(e)s parmi vous ont déjà rencontré ces soucis là ?

Si oui, avez vous réussi à les corriger, et comment ?

Séverin

En réponse à Séverin Terrier

Re: Une base de données interne propre ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Les années passent, et les versions de Moodle utilisées changent : j'utilise maintenant Moodle 2.9.2, qui intègre plusieurs outils de vérifications dans /admin/cli/ comme on l'a évoqué dans cette discussion à propos d'outils de diagnostique technique, et dans cette page de documentation sur les vérifications techniques.

Après avoir effectué des mises à jour de plugins, j'ai trouvé en lançant admin/cli/check_database_schema.php des erreurs dans le schéma de la base de données. J'ai ouvert des discussions (en anglais) à ce propos, concernant :

Vous pourrez peut-être trouver des informations utiles dans ces discussions, ou contribuer à aider.

Séverin

Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Une base de données interne propre ? Schéma de la base de données et plugins

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Quelques années plus tard, maintenant avec Moodle 3.7.4, je ré-alimente cette discussion.

En effet, en lançant le script de vérification du schéma de la base de données (check_database_schema.php), j'obtiens ces erreurs qui signalent des problèmes avec plusieurs plugins :

-------------------------------------------------------------------------------
offlinequiz
* column 'algorithmversion' should allow NULL (I)
-------------------------------------------------------------------------------
offlinequiz_scanned_pages
* column 'info' length is 255, expected (C)
-------------------------------------------------------------------------------
offlinequiz_p_lists
* column 'listnumber' length is 4, expected at least 10 (I)
* column 'listnumber' has default '0', expected '1' (I)
-------------------------------------------------------------------------------
offlinequiz_scanned_p_pages
* column 'status' should be NOT NULL (C)
-------------------------------------------------------------------------------
offlinequiz_queue
* column 'status' has incorrect type 'X', expected 'C'
-------------------------------------------------------------------------------
offlinequiz_queue_data
* column 'status' should be NOT NULL (C)
-------------------------------------------------------------------------------
questionnaire_question
* column 'surveyid' should be NOT NULL (I)
* column 'surveyid' has default 'NULL', expected '0' (I)
-------------------------------------------------------------------------------
questionnaire_response_rank
* column 'rankvalue' has default 'NULL', expected '0' (I)
-------------------------------------------------------------------------------
questionnaire_fb_sections
* column 'surveyid' should be NOT NULL (I)
* column 'surveyid' has default 'NULL', expected '0' (I)
-------------------------------------------------------------------------------
questionnaire_feedback
* column 'sectionid' should be NOT NULL (I)
* column 'sectionid' has default 'NULL', expected '0' (I)
-------------------------------------------------------------------------------
tool_attestoodle_training
* column 'startdate' should be NOT NULL (I)
-------------------------------------------------------------------------------
tool_attestoodle_user_style
* column 'userid' should be NOT NULL (I)
* column 'trainingid' should be NOT NULL (I)
* column 'templateid' should be NOT NULL (I)
-------------------------------------------------------------------------------
tool_attestoodle_learner
* column 'userid' should be NOT NULL (I)
* column 'trainingid' should be NOT NULL (I)
* column 'categoryid' should be NOT NULL (I)
-------------------------------------------------------------------------------
tool_coursearchiver_optout
* column 'optoutlength' should be NOT NULL (I)
-------------------------------------------------------------------------------
tool_coursearchiver_archived
* column 'timetodelete' should be NOT NULL (I)
-------------------------------------------------------------------------------
offlinequiz_statistics
* table is missing
-------------------------------------------------------------------------------
offlinequiz_q_statistics
* table is missing
-------------------------------------------------------------------------------
offlinequiz_q_response_stats
* table is missing
-------------------------------------------------------------------------------
report_filetrash
* table is not expected
-------------------------------------------------------------------------------

J'imagine qu'il faudra(it) écrire aux différents développeurs, afin qu'ils adaptent les fichiers db/upgrade.php afin de mettre les informations en cohérence avec les contenus des fichiers db/install.xml.

Séverin

Moyenne des évaluations Utile (2)
En réponse à Séverin Terrier

Re: Une base de données interne propre ? Schéma de la base de données et plugins

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Voila, j'ai déclaré mes différents problèmes, pour :

En espérant que des solutions pourront rapidement être trouvées.

Et je me dis qu'un bon réflexe à adopter serait, à chaque fois que l'on doit mettre à jour un (ou plusieurs) plugin, de lancer auparavant admin/cli/check_database_schema.php, puis le relancer après la mise à jour. Ainsi, si un problème s'affiche après la mise à jour, alors que l'on fait des mises à jour régulières (toutes les versions), on sait que c'est lié à cette version précise ! Et on peut ainsi remonter l'information au développeur immédiatement sourire

Séverin

Moyenne des évaluations Utile (2)
En réponse à Séverin Terrier

Re: Une base de données interne propre ? Schéma de la base de données et plugins

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles
Bonjour,
Voici les résultats de mes tests sur mes deux PF principales.
Je vois bien les modules en défaut mais ne sais pas comment aller plus loin.
Sauf à les désinstaller...
Daniel
En réponse à Daniel Méthot

Re: Une base de données interne propre ? Schéma de la base de données et plugins

par Gilles Le Page,
Avatar Moodleurs particulièrement utiles
Bonjour,
vos échanges m'ont inquiété !!!
J'ai testé sur un Moodle pas trop important et pas utilisé, en version Moodle 3.8.1 
En utilisant l'éditeur XLMDB de l'onglet Développement de l'admin de Moodle, j'ai résultats effrayants pour un non-informaticien comme moi !
  • Valeurs par défaut incohérentes dans la base de données : 921 !
  • Clefs extérieures trouvées subissant des violations : 15

Voir les deux PJ qui en donnent le détail.

J'ai la même question que Daniel : quelle procédure suivre ?

Gilles

En réponse à Gilles Le Page

Re: Une base de données interne propre ? Schéma de la base de données et plugins

par Christian Bocquet,
Avatar Moodleurs particulièrement utiles

Bonjour Gilles,

  • En ce qui concerne les valeurs dites erronées (921! chez vous), par exemple, j'ai moi-même la ligne (parmi 34):

Table: question. Champ: defaultmark, Valeur attendue '1' Valeur actuelle '1.0000000'

mais 1 et 1.0000000 sont mathématiquement égaux et si on lance la requête SQL proposée ou si on essaie de modifier directement la valeur attendue, la requête ou la modification n'aboutit pas. Donc cela ne me semble pas bien grave.

De même rien comme valeur attendue ou valeur actuelle '', ne doit pas être bien grave. Mais je n'ai pas ce type de valeur dite erronée dans ma liste.

  • En ce qui concerne les clefs extérieures (chez moi, 11 clefs extérieures trouvées subissant des violations), je ne sais pas.
Christian
Moyenne des évaluations Utile (1)
En réponse à Christian Bocquet

Re: Une base de données interne propre ? Schéma de la base de données et plugins

par Gilles Le Page,
Avatar Moodleurs particulièrement utiles

Merci Christian,

ça me rassure, ... je vais mieux dormir clin d’œil

Gilles

En réponse à Gilles Le Page

Re: Une base de données interne propre ? Schéma de la base de données et plugins

par Christian Bocquet,
Avatar Moodleurs particulièrement utiles

Bonjour Gilles,

Pour supprimer "La clef extérieure dpo sur la table tool_dataprivacy_request subit 19 violations sur un total de 19 rangées.", aller sur la page:
Administration du site -> Utilisateurs -> Protection des données et politiques -> Demandes de données

puis gérer (accepter ou refuser) les 19 demandes qui devraient s'y trouver.

Christian

En réponse à Daniel Méthot

Re: Une base de données interne propre ? Schéma de la base de données et plugins

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour Daniel,

Il faudrait, comme je l'ai fait, prendre contact avec les développeurs des plugins concernés pour leur signaler ces problèmes. Avec un peu de chance, ils prendront directement le relais afin de corriger cela, dans une prochaine version.

Séverin