Wenn ihr wie ich ein oder zwei Nextcloud-Instanzen hosted, dann seit ihr nicht nur am Cutting Edge der Informationsfreiheit, sondern habt vielleicht auch wie ich das Problem, dass Nextcloud motzt, dass alle Tabellen in eurer Datenbank das falsche Zeilen Format „Compressed“ anstatt „dynamic“ haben.
Ich weiß nicht, warum ich das Problem so lange Zeit mit mir Mitgezogen habe, denn heut habe ich, nach dem mich ein Virus meinen Körper wieder frei gelassen hat, ein interessanter Artikel auf die Tablet Oberfläche gehuscht, der alle verändert hat.
https://stackoverflow.com/questions/8112517/alter-row-format-to-dynamic
Es war gar nicht die lange Diskussion, sonder ein kleiner Beitrag von Didier Corbière, der mich faszinierte. Er schrieb:
You can also use this query to generate commands to execute. (example is for ’nextcloud‘ db): SELECT CONCAT(‚ALTER TABLE ‚, TABLE_NAME, ‚ ROW_FORMAT=DYNAMIC;‘) FROM information_schema.tables WHERE TABLE_SCHEMA = ’nextcloud‘ AND ENGINE = ‚InnoDB‘ AND ROW_FORMAT <> ‚Dynamic‘;
Er lies sich einfach alle Tabellen der Nextcloud-Datenbank ausgeben und verband dies gleich mit einer Textzusammensetzung , damit für jede Tabelle gleich der richtige convert-Befehl generiert wird:
# alter table TABLE_NAME row_format=dynamic;
Ich habe das bei meinen Instanzen gleich auch probieren wollen, nur klappte es nicht.
Dabei kam ich drauf, dass die Tabellen aus meine Datenbank gar nicht in der Tabelle „information_schema.tables“ waren. Also habe ich angefangen zu recherchieren warum nicht und wie ich das beheben kann.
Doch dann erinnerte ich mich, hier ich schon früher mit den guten alten Texteditor Kate so etwas in den Griff bekommen habe. Ja, es ist old-Style, aber mir geht es nicht immer um coole One-Liner mit 24 Zeichen, sondern dass das Problem gelöst wird.
Im ersten Schritt habe ich mir alle Tabellen mit folgende Befehl geholt:
# show tables from nextcouddb;
Die Ausgabe habe ich dann in Kate kopiert. Um nun in (fast) einem Rutsch für alle Zeile das passende Kommando zusammen zu bauen geht man zu Bearbeiten -> Ersetzen und fügt ein, was ihr hier im Bild sehen könnt:

Ich baue einfach um den Line-Break mit folgendem String zuerst den letzten Teil des SQL-Befehls und danach den Anfang.
" "row_format=dynamic\nalter table" "
Wichtig ist, und deshalb habe ich sie in Anführungszeichen gesetzt, die natürlich NICHT eingesetzt werden sollten. 😉
Ausgeführt kommt das raus, was Ihr oben seht. Im nächsten Schritt muss man nur die erste und die letzte Zeile noch anpassen.
In der ersten Zeile, s.o. fehlt der erste Teil, also „alter table „.

Und in der letzten der hintere Teil “ row_format=dynamic;“
Eingefügt und im SQL Server ausgeführt ist damit ENDLICH dieser scheußliche Fehler behoben und ich kann mich wieder einmal fragen, warum ich darauf nicht schon vorher drauf gekommen bin. 😉
Bleibt gesund und Viel Spaß!