AppWorx, Dollar Universe and Sysload Community

Management Server : Réparation d’une base SQLite

  • 1.  Management Server : Réparation d’une base SQLite

    Posted 12-12-2017 03:41 AM
    Il arrive parfois que la base de données du Management Server soit corrompue. L'erreur ci-dessous apparaît dans les logs du MS <sysload>\sldmgts\sldmgts.log"

    DD.MM  HH:MM:SS YYYY: LPtrVerif - OBaseOfObjects.c[1479] - Invalid Pointer Error
    DD.MM  HH:MM:SS YYYY: sldmgts - ODbMgrResultSet_FreeResult() failed: couldn't delete compiled statement: database disk image is malformed (DB rc=11)

    Les problèmes se situent à 2 niveaux :
    • Au niveau du fichier de données SQLite, ne concerne pas les objets Sysload.
    • Sur la base des objets Sysload : les ACL, les agents, les events, les modèles…

    La réparation du fichier SQLite entraîne de manière systématique des incohérences sur les objets Sysload : un objet auquel il manque une propriété, un objet sans son ACL associée…  Dans un premier temps, vous devez d’abord réparer le fichier SQLite puis ensuite rétablir la cohérence de la base des objets Sysload.

    NB : Veuillez lire attentivement la procédure en entier avant d'effectuer des manipulations sur la base de données. Si vous n'êtes pas certain de pouvoir effectuer ces opérations, nous vous recommandons d'ouvrir un incident sur notre Portail et de nous faire parvenir les [DEAD LINK https://community.automic.com/discussion/8533/sysload-fichiers-de-configuration-logs-du-management-server#latest]fichiers suivants ainsi que votre base de données. Cette procédure peut nécessite des compétences approfondies en base de données. 

    Réparation du fichier de données (SQL Lite) :

    • Arrêter le Management Server
    • Effectuer une sauvegarde de la base de données
                  - Windows : <sysload>\sldmgts\storage\sldat\sld_objects_repository
                  - Linux : /usr/local/sysload/sldmgts/storage/sldat/sld_objects_repository
    • Utiliser le client SQLite en ligne de commande : 
    $ sqlite3 sld_objects_repository
    sqlite> pragma integrity_check;

    sqlite> .quit
    $ echo .dump | sqlite3 sld_objects_repository > sld_objects_repository_repaired.sql
    $ sqlite3 -init sld_objects_repository_repaired.sql sld_objects_repository_repaired
    Le nouveau fichier de base de données est : sld_objects_repository_repaired

    Rétablissement de la cohérence de la base des objets Sysload


    *** Nous vous recommandons de nous envoyer votre base de données afin que nous effectuons cette opération.***

    Vous devez utiliser un requeteur SQL pour SQLite, tel que SQLiteSpy. Il s'agit de manipuler directement les enregistrements constituant les objets Sysload. La connaissance du schéma de la base des objets est primordiale.

    Exemple : Impossible d'ajouter une alerte unitaire "EVN|Unix-FS|"

    •  Récupérer les IDs SQL de l’event et de l’ACL associée : 
    select * from sld_object where sld_object_key="EVN|Unix-FS|" -- ID de l’objet 14420
    select * from sld_object where sld_object_key=14420 --

    -- l'ACL est14421

     

    •  Vérification des propriétés :

     

    select * from sld_property where sld_object_id=14421

    select * from sld_property where sld_object_id=14420

     

     

    •  Supprimer les ACL:

     

    delete from sld_object where sld_object_id=14421

    delete from sld_property where sld_object_id=14421

     

    •  Supprimer l’objet associé:

     

    delete from sld_object where sld_object_id=14420

    delete from sld_property where sld_object_id=14420

     

    Le fichier sld_objects_repository_repaired obtenu est le nouveau fichier de données SQLite. Il suffit ensuite de remplacer le fichier 'sld_objects_repository' par le fichier sld_objects_repository_repaired et de redémarrer le Management Server.