SQL Datenbanken zusammenführen

Kenne mich mit DB grundsätzlich aus.
 
  • Gefällt mir
Reaktionen: Marvolo
M-X schrieb:

Ich denke, ich werde mich dort mal umschauen. Zwar haben hier einige sicherlich sehr wertvolle Anregungen und Inputs gegeben, wie das alles in der Theorie machbar wäre, aber wie schon öfters gesagt: ich hatte mit Coding / Programmiersprache(n) und Scripts noch keine einzige Berührung bisher. Ich weiß noch nicht mal, wo ich eure ganzen hier vorgeschlagenen Queries eingeben muss, in CMD? Oder sonst irgendeinem Programm?

Da WhatsApp in erschreckender Regelmäßigkeit immer mal wieder Updates und damit verbunden auch wieder neue Funktionen etc. rausbringt - es steht jetzt gerade erst wieder etwas größeres an - rennt hier in gewisser Weise auch etwas die Zeit davon. Zwar gibt sich @Micke ja gerade dankenswerterweise große Mühe, dieses Merger-Tool von Github dem aktuellen WA anzupassen, aber wenn WA seine Struktur wechselt wie andere ihre Unterhosen, dann fürchte ich, wird's nicht lange dauern, bis die Bemühungen bzw. Ergebnisse von Micke direkt wieder veraltet sein werden und man das Tool erneut wieder auf die aktuellen Schemata anpassen müsste oder aber in die Tonne kloppen könnte.

Bis ich soweit bin, mich hier nebenberuflich und freizeitmäßig in totalem Selbststudium so tief in Informatik und Datenbanken eingelesen zu haben, dass ich auch verstehe, was wie wo gemacht werden muss, haben wir schon wieder mindestens 20 neue WA-Versionen mit vermutlich wieder ganz anderem Layout und Aufbau.

Ohne eine wirklich idiotensichere Schritt-für-Schritt-Anleitung (und das würde schon damit losgehen, wo ich den Code wie genau eingeben müsste), bin ich da glaube ich eher aufgeschmissen und selbst DANN befürchte ich, könnte noch sehr viel schiefgehen, weil ich einfach auch gar nicht wüsste, was ich da jetzt genau tue und weshalb. Verstehen würde ich es gerne, neugierig bin ich da schon, aber ich bezweifle, dass ich das jetzt alles innerhalb von ner Woche gelernt bringe.

Mit jedem neuen Tag wächst zudem ja auch wieder meine eigene WA-Chatdatenbank, da ich die App ja täglich nutze und somit dann auch wieder die Menge an Daten, die man bei einem dann immer weiter in der Vergangenheit liegenden Chatstand, den es zu mergen gilt (Januar-März), verarbeiten müsste.

Ich habe in der Theorie ein ungefähres Verständnis dafür, was bei meinen Datenbanken das Problem ist und wüsste in der Theorie glaub auch, wie es zu lösen wäre, nur geht das ohne Automatisierung per Hand nicht. Das ist, als würde man mit einem Buttermesser versuchen, eine dicke Eiche zu fällen.
 
Zuletzt bearbeitet:
Update:

Die WA-Datenbanken wurden mithilfe eines auf SQLITE3 basierenden Scripts innerhalb der Linux-basierten Handyanwendung TERMUX alle vollständig vereint.

Da ich verschiedene Datenbanken hatte, die sich alle zu großen Teilen inhaltlich überschnitten haben, ich von allen aber jeweils immer nur einen ganz bestimmten Teil bzw. Range brauchte, mussten die zu vereinenden Teile aus den einzelnen Gesamtdatenbanken erst mithilfe eines weiteren Scripts "herausgeschnitten" werden (basierend auf Message_ID), sodass man sie jeweils ans Ende der jeweils vorhergehenden anfügen konnte nach dem Muster:

msgstore1.db +
msgstore1.db + msgstore2.db +
msgstore1.db + msgstore2.db + msgstore3.db +
msgstore1.db + msgstore2.db + msgstore3.db + msgstore4.db

Das Endprodukt war eine msgstore.db-Datenbank, die alle einzelnen Teile vereint hatte (was ja das Ziel war).
Die Rückführung in WhatsApp gestaltete sich allerdings etwas schwierig. Wer ein gerootetes Handy hat (wie ich - habe extra ein altes Samsung S6 Edge Plus rausgekramt und gerootet), der hat dank Root Zugriff auf das Root-Verzeichnis, wo WhatsApp seine Datenbank für die Benutzung unverschlüsselt speichert:

ROOT /data/data/com.whatsapp/databases

Normalerweise klappt es, dass man nun die vereinte Datenbank dort einfach reinkopiert und die vorhandene ersetzt/überschreibt, danach WA öffnet und et voila, die Änderungen in den Chats sind dann da.

Bei mir gestaltete sich das aufgrund der Tatsache, dass beim S6 Edge Plus WhatsApp als sog. System-App vorinstalliert war, die man nicht deinstallieren kann, etwas schwieriger, denn das Verhalten war da aus irgendwelchen Gründen anders als bei frei installierbaren WhatsApp-Versionen.

Zwar klappte es mithilfe eines weiteren Scripts, die Berechtigungen der neuen msgstore.db im Rootverzeichnis so anzugleichen, dass sie mit den üblichen Dateien in diesem Verzeichnis übereinstimmen und dann akzeptiert auch mein WhatsApp die fremde Datei - allerdings klappte dieses Vorgehen nur, wenn Änderungen innerhalb derselben Datenbank vorgenommen wurde (z.B. 2 verschiedene Chats in einen zusammenschmelzen).

Da ich aber verschiedene Datenbanken (aus verschiedenen Zeitpunkten) miteinander verschmolzen habe, klappte es trotz Setzen der Berechtigungen auf diese Weise nicht.

Ich musste mir also eines anderen Tricks behelfen und der ging so:

Ich musste WhatsApp dazu bekommen, dass es denkt, die nun neue, vereinte Datenbank sei ein von ihm selbst erzeugtes Backup, das es dann auch wiederherstellen kann. WhatsApp erzeugt Chatbackups (entweder automatisch oder manuell, indem man in den Einstellungen auf "Backup" drückt) und speichert den Chatstand der aktuellen Datenbank als sog. msgstore.db.crypt14 oder crypt15-Datei im Benutzerordner (nicht ROOT) unter

/sdcard/WhatsApp/databases

Ich musste nun also die vereinte Datenbank, die ja unverschlüsselt vorlag, wieder rückverschlüsseln in eine crypt14 bzw. crypt15-Datei, sodass WA denkt, es sei ein eigenes von ihm angelegtes Backup, das man dann beim neuen Einloggen wiederherstellen kann.

Dafür musste ich mir eine bestehende Backup-Datei "msgstore.db.crypt15" nehmen und deren Header-Informationen auslesen, sodass ich diese Header-Informationen nutzen konnte, um die vereinte, unverschlüsselte Datenbank zu verschlüsseln.

Die Headerinformationen sehen z.B. so aus:

←[38;20mINFO - wadecrypt.py:222 : Header information in your crypt15 file:←[0m
←[38;20mINFO - wadecrypt.py:223 : IV: a902fb72341e7c7201f3dd2866a6a01e←[0m
←[38;20mINFO - wadecrypt.py:231 : Key type: 1←[0m
←[38;20mINFO - wadecrypt.py:232 : WhatsApp version: 2.24.3.81←[0m
←[38;20mINFO - wadecrypt.py:234 : The last two numbers of the user's Jid: 73←[0m
←[38;20mINFO - wadecrypt.py:235 : Backup version: 1←[0m
←[38;20mINFO - wadecrypt.py:238 : Features: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39]←[0m
←[38;20mINFO - wadecrypt.py:239 : Max feature number: 39←[0m

Diese konnte ich also in die vereinte Datenbank rüberkopieren und dadurch in eine neue msgstore.db.crypt15-Backupdatei verschlüsseln, diese dann in den Backupordner in WA laden und WA sie finden und wiederherstellen lassen.

Damit sind die Chatstände wieder vereint. So, als wäre es nie anders gewesen.
 
  • Gefällt mir
Reaktionen: nonick65, NJay, simpsonsfan und eine weitere Person

Ähnliche Themen

Antworten
47
Aufrufe
191.249
Zurück
Oben