Je suivais /var/log/system.log
et a remarqué un soudain mur de texte. En regardant de plus près, j'ai vu qu'il s'agissait d'une erreur que CalendarAgent avait reçue en essayant d'enregistrer quelque chose :
Nov 18 11:42:45 rainbow-dash.local CalendarAgent[12321]: CoreData: error: (11) Fatal error. The database at /Users/blackl/Library/Calendars/Calendar Cache is corrupted. SQLite error code:11, 'database disk image is malformed'
Nov 18 11:42:45 rainbow-dash.local CalendarAgent[12321]: Core Data: annotation: -executeRequest: encountered exception = Fatal error. The database at /Users/blackl/Library/Calendars/Calendar Cache is corrupted. SQLite error code:11, 'database disk image is malformed' with userInfo = {
NSFilePath = "/Users/blackl/Library/Calendars/Calendar Cache";
NSSQLiteErrorDomain = 11;
}
2 messages répétés plusieurs fois
Nov 18 11:42:49 rainbow-dash.local CalendarAgent[12321]: [com.apple.calendar.store.log.subscription] [WARNING: CalSubscriptionSession :: persistError :: save failed]
Cette séquence est répétée plusieurs fois dans le journal.
file
a dit que le dossier en question était un SQLite 3.x database
J'ai donc fait quelques recherches et j'ai trouvé un moyen de les vérifier.
blackl% cp -i ~/Library/Calendars/Calendar\ Cache /tmp
blackl% sqlite3 /tmp/Calendar\ Cache
SQLite version 3.7.12 2012-04-03 19:43:07
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> pragma integrity_check ;
*** in database main ***
Main freelist: Bad ptr map entry key=863 expected=(2,0) got=(5,21)
On page 21 at right child: 2nd reference to page 863
Cette phrase est suivie de quelques dizaines de lignes comme celles-ci :
rowid <number> missing from index <name>
et ensuite :
wrong # of entries in index <name>
Je ne sais plus quoi faire. Je n'ai rien trouvé sur la façon de fixer les erreurs que j'ai trouvées. En outre, ce serait probablement une bonne idée de désactiver Calendar Agent afin qu'il n'essaie pas d'utiliser la base de données pendant qu'il est réparé (c'est pourquoi je l'ai copié sur /tmp
avant d'exécuter sqlite3
sur elle.)
Comment désactiver CalendarAgent et réparer son cache ?