DB-Schemaupgrade bei Upgrade von 2.13.1 auf 2.14.2 schlägt fehl - SQLite

  • Scheinbar gibt es auch unter SQLite manchmal Probleme mit dem Upgrade:


    Upgrading database schema...
    - /usr/sbin/liveconfig: Database driver loaded: SQLite (3.37.0)
    - /usr/sbin/liveconfig: Upgrading database schema (r214002 -> 2.14.0-3)
    - /usr/sbin/liveconfig: - migrating RRD_TRAFFIC
    - /usr/sbin/liveconfig: Database connection failed: UNIQUE constraint failed: RRD_TRAFFIC_new.RRD_ARCHIVEID, RRD_TRAFFIC_new.RRD_SLOTID
    dpkg: Fehler beim Bearbeiten des Paketes liveconfig (--configure):



    Die vorliegende Datenbank habe ich schon überprüft, ob es hier Dupletten gibt. Soweit ich das sagen kann, sind die Werte UNIQUE.


    Betraf auch nur einen von ca. 30 Servern, die aktualisiert wurden. Aber mit dem Problem lässt sich LiveConfig auch nicht mehr starten.

  • Führen Sie bitte mal folgenden SQL-Befehl aus, um eventuelle Dupletten zu finden:


    SQL
    SELECT RRD_ARCHIVEID, RRD_SLOTID, COUNT(*)
    FROM RRD_TRAFFIC
    GROUP BY RRD_ARCHIVEID, RRD_SLOTID
    HAVING COUNT(*) > 1


    Doppelte Daten hätten da eigentlich auch früher (vor dem Update) gar nicht drin landen dürfen.
    Wir prüfen derweil mal, ob LiveConfig eventuelle Dupletten automatisch löschen kann.

  • Mit folgendem SQL müssten Sie die Dupletten löschen können. Bitte an das Datenbank-Backup vorher denken.


    SQL
    DELETE r1 FROM RRD_TRAFFIC r1
    JOIN RRD_TRAFFIC r2 ON (r1.RRD_ARCHIVEID = r2.RRD_ARCHIVEID AND r1.RRD_SLOTID=r2.RRD_SLOTID AND r1.RRD_TIMESTAMP < r2.RRD_TIMESTAMP);
  • SQL
    SELECT RRD_ARCHIVEID, RRD_SLOTID, COUNT(*)
    FROM RRD_TRAFFIC
    GROUP BY RRD_ARCHIVEID, RRD_SLOTID
    HAVING COUNT(*) > 1



    Die Ausgabe der Query ist leer.


    Ich hatte auch vor dem Foreneintrag ähnliches versucht, um doppelte Einträge zu finden. Aber war ebenso ergebnislos.



    SQL
    DELETE r1 FROM RRD_TRAFFIC r1
    JOIN RRD_TRAFFIC r2 ON (r1.RRD_ARCHIVEID = r2.RRD_ARCHIVEID AND r1.RRD_SLOTID=r2.RRD_SLOTID AND r1.RRD_TIMESTAMP < r2.RRD_TIMESTAMP);


    Rückgabe: Error: near "r1": syntax error

  • Öhem, sorry, ich war da gerade irgendwie auf MySQL fixiert (wir haben heute den ganzen Tag nur am MySQL-Support gearbeitet...)


    Es kann durchaus sein, dass die SQLite-Datenbank an der Stelle irgendwo korrupt ist.
    Am besten wäre es daher, die Datenbank mal zu dumpen und neu zu erzeugen:


    Code
    systemctl stop liveconfig
    cd /var/lib/liveconfig
    mv liveconfig.db liveconfig.db.ORIG
    sqlite3 liveconfig.db.ORIG .dump >liveconfig.sql
    sqlite3 liveconfig.db <liveconfig.sql
    rm liveconfig.sql
    chown liveconfig:liveconfig liveconfig.db*

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!