Mikrotik The Dude naprawa uszkodzonej bazy danych (cannot read database – malformed database repair)

Może zrobić się gorąco, jeżeli podczas próby uruchomienia naszego misternie konfigurowanego przez miesiące The Dude pojawi się informacja „cannot read database”. Ale spokojnie, z pomocą przychodzi tutaj przydatna procedura naprawy uszkodzonej bazy danych MikroTik The Dude. Jednak ma swoje ograniczenia. Co prawda odzyskamy wszystkie dodane urządzenia oraz stworzone mapy, ale zginą nam historyczne dane wykresów. Była testowana na wersji RouterOS 6.48.6, ale może działać również na innych wersjach.

Na początek na stronie https://www.sqlite.org/download.html przechodzimy do sekcji „Precompiled Binaries for Windows” i pobieramy plik sqlite-tools… Na dzień pisania tego artykułu był to: sqlite-tools-win32-x86-3420000.zip dostępny do pobrania również tutaj:

Rozpakowujemy pobrany plik .zip. Zrobię to do katalogu C:\sqlite aby uprościć długość wpisywanych później poleceń.

Wyłączamy usługę The Dude przez program WinBox w zakładce Dude/Settings odznaczając check „Enabled” i klikamy „Apply”

Następnie z katalogu dude na naszym MikroTik kopiujemy plik dude.db (uszkodzona baza danych) do katalogu C:\sqlite na naszym PC. Można to zrobić metodą przeciągnij i upuść:

Uruchamiamy teraz wiersz polecenia systemu Windows (CMD) jako Administrator i przechodzimy do katalogu C:\sqlite. Kolejne polecenie przekonwertuje naszą bazę danych dude.db na plik tekstowy dude.sql ze składnią SQL możliwą do edycji:

echo .dump | sqlite3.exe dude.db > dude.sql

Po prawidłowo wykonanej operacji, w katalogu C:\sqlite pojawi się nam plik dude.sql. Otwóżmy go teraz za pomocą edytora tekstowego np. Notepad++

Interesują nas wszystkie wiersze zaczynające się od „INSERT INTO objs” (Za pewnie skrót od Objects). Zaznaczamy je i kopiujemy do nowego pliku tekstowego.

nowo utworzony plik tekstowy tylko z liniami zaczynającymi się od „INSERT INTO objs” zapisujemy w katalogu C:\sqlite pod nazwą objs.sql

Teraz zostawiamy na chwilę PC i wracamy do Mikrotik. W plikach usuwamy plik dude/dude.db. Zakładam, że masz już utworzoną kopię tego pliku (na wszelki wypadek). Następnie włączamy usługę The Dude przez program WinBox w zakładce Dude/Settings odznaczając check „Enabled” i klikamy „Apply” Zostanie w ten sposób utworzona nowa – pusta baza danych The Dude.

Następnie ponownie wyłączamy usługę The Dude i kopiujemy z MikroTik nowo utworzony plik dude.db do C:\sqlite (ksaując poprzedni C:\sqlite\dude.db). Chyba już wiesz jak to zrobić. Procedura kopiowania pliku i wyłączania The Dude była już opisana wyżej w tym artykule.

Przechodzimy teraz z powrotem do naszego PC i wiersza poleceń z uprawieniami administratora w katalogu C:\sqlite uruchamiamy program sqlite3.exe. Otwieramy bazę dude.db za pomocą polecenia open (ważna kropka na początku polecenia) oraz sprawdzamy jej integralność:

.open dude.db
pragma integrity_check;

Kasujemy teraz wszystkie wpisy w tabeli objs:

delete from objs;

i wczytujemy „stare” wpisy zachowane wcześniej w pliku objs.sql:

.read objs.sql

Ostatecznie wychodzimy z programy sqlite3.exe:

.quit

Teraz zatrzymujemy ponownie usługę The Dude na Mikrotik. Kasujemy plik dude.db (na Mikrotik – ten z wykreowaną pustą bazą). Jeżeli istnieją pliki o nazwach dude.db-journal lub dude.view, to również je kasujemy.

Kopiujemy bazę z PC C:\sqlite\dude.db (tą „wzbogaconą” o plik objs.sql) do MikroTik dude\dude.db i uruchamiamy usługę The Dude. Gotowe! Wszystkie nasze ustawienia zostały przywrócone (tylko bez wartości historycznych). Jeśli wszystko działa prawidłowo zrób kopię The Dude przez polecenie konsoli:

/dude export-db

Plik z kopią będzie na pewno małego rozmiaru, ponieważ nie zawiera danych historycznych. Skopiuj go i przechowuj poza MikroTik.

Koniec 🙂

Jeżeli pomogłem to Postaw mi kawę na buycoffee.to ,a będę miał więcej energii na pisanie kolejnych ciekawych wpisów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *