Ciao Vieri,
innanzitutto non dovresti aver perso i dati di tracciamento: non li vedono i tuoi utenti ne tu li vedi nei report ma - non ne posso però essere certo al 100% - sono ancora nel database, attestati agli ID degli SCO creati nella precedente versione.
Infatti Moodle, quando aggiorni il package, riattesta il tracciamento del corso aggiornato agli LO del nuovo corso che hanno lo stesso item@identifier così come scritto nel file imsmanifest.xml, cancellando poi i dati di tracciamento che non sarebbero più utili perché sono rimasti "orfani".
Se hai seguito la prassi di mantenere gli identificativi nel Manifest identici tra le due versioni (altrimenti il tracciamento lo perderesti "d'ufficio") l'errore sull'indice ha bloccato il processo proprio nella fase terminale, quella di ri-attestazione dei dati dal vecchio ID a quello nuovo:
UPDATE mdl_scorm_scoes_track SET scoid = 392 WHERE scoid = 354
la query che MySQL non ha gradito fa proprio questo, prende i dati di tracciamento del vecchio scoid (354) e li rimappa sul nuovo (392).
Cosa fare ora, tralasciando l'eventuale possibilità di ripristinare il tutto da un backup ragionevolmente recente?
Intanto dipende dal fatto se il tuo package sia multi-SCO: se è single-SCO, allora potresti riprovare ad applicare la query di cui sopra ma probabilmente fallirebbe per la stessa ragione se la causa dell'indice duplicato non sia imputabile ad un temporaneo problema di MySQL. Similmente se fosse multi-SCO ma devi riformulare tu il mappaggio tra i dati precedenti e nuovi.
Anche qui viene in aiuto il fatto che gli ID sono consecutivi per cui se il tuo package è fatto da 4 SCO (lineari, senza gerarchia) e il 392 è il primo allora il ri-mappaggio dovrebbe essere facile:
- 354 -> 392
- 355 -> 393
- 356 -> 394
- 357 -> 395
Se il package è più complesso (gerarchico) puoi sempre provare a pubblicarlo in un corso privato, annotarti la sequenza degli ID dalla tabella mdl_scorm_scoes, ripubblicare il corso e trovare la giusta logica per il mappaggio manuale.
Devi allora cercare la ragione del conflitto di duplicazione su quell'indice, che garantisce che la quintupla userid-scormid-scoid-attempt-element sia univoca (da qui la possibilità che ci sia stato un temporaneo problema a MySQL durante l'aggiornamento).
Dall'errore (3355-17-392-1-x.start.time) direi che i(l) record incriminato è facilmente individuabile se ci mappi la quintupla di cui sopra: elimina il record con il valore di x.start.time più alto se vuoi conservare la "prima" volta che l'utente ha acceduto.
Quanti altri casi ci possono essere?
Difficile a dirsi, potrebbe essere l'unico (fatale) caso isolato (magari residuo di un update del passato), potresti provare a verificarne il numero con qualcosa del genere - non l'ho testata e potrebbe anche avere impatti sulle performance del DB durante l'esecuzione, provala quindi su una copia del tuo DB! - :
SELECT userid, scormid, scoid, attempt, element, COUNT(*) c
FROM mdl_scorm_scoes_track
GROUP BY userid, scormid, scoid, attempt, element
HAVING c > 1;
Riconosco che la situazione non è delle migliori ma credo ci sia possibilità di recuperare, stante un po' di attento lavoro di fino.
Ovviamente prima di procedere a qualunque manipolazione della tabella dei dati di tracciamento fai un backup del database e se possibile fai tutte le tue prove prima su un DB replicato e poi in produzione, bloccando poi temporaneamente l'accesso agli utenti quando applicherai "la soluzione" in produzione.
HTH,
Matteo
P.S.: di che versioni di Moodle stiamo parlando esattamente?