Apache Derby Datenbank - Zugriff Data Page Header

gohrd

Neuer Benutzer
Beiträge
4
Hallo alle zusammen,

ich habe folgendes Problem bei dem ich auf euch Hilfe hoffe... Ich selber bin leider nicht sehr versiert in dieser Datenbank, besser gesagt ich bin totaler Laie...

Ich habe Dateien aus einer Apache Derby Datenbank die auf einem Server in einem Verzeichnis seg0 gespeichert sind. Ich habe mir das Programm Dbeaver installiert und so einen Zugriff auf die Datenbank bekommen. Ich kann nun alle Tabellen und Datensätze lesen. So weit, so gut...

Ich wurde nun extern darauf hingewiesen, dass es sein kann, dass aus der Datenbank Einträge gelöscht wurde. Bei Derby-Datenbanken sei es aber so, dass die Daten in Containern gespeichert werden und diese Container aus sogenannten Pages bestehen. In diesen Pages gibt es einen Header und in dem gibt es einen Eintrag wie viele recordsets gelöscht wurden. Meine Aufgabe ist es nun ohne weitere Kenntnisse diesen Header auszulesen oder sichtbar zu machen um zu kontrollieren ob etwas gelöscht wurde.

Hierzu wurde mir nur der folgende Link zur Verfügung gestellt:

Derby On Disk Page Format

Daher meine Frage: Gibt es ein Programm wie dbeaver oder dort eine Funktion mit der ich in diesen pages/header navigieren bzw. etwas exportieren kann? Oder muss ich dafür Java-Entwickler sein und selber etwas programmieren?:(

Vielen Dank und beste Grüße

Dennis
 
Werbung:

dabadepdu

Datenbank-Guru
Beiträge
572
Gibt es ein Programm wie dbeaver oder dort eine Funktion mit der ich in diesen pages/header navigieren bzw. etwas exportieren kann? Oder muss ich dafür Java-Entwickler sein und selber etwas programmieren?
Du hast ja die Beschreibung schon verlinkt. Das hat nichts mit SQL zu tun, also auch nicht mit DBeaver. Ja, Du müsstest das programmieren, zumindest kenne ich kein solches Programm, was aber eigentlich nicht viel bedeutet. Ich habe Derby bis jetzt höchstens versehentlich benutzt.

Grundsätzlich könnte man die Frage stellen, welchen Wert diese Arbeit hat. Während SQL Funktionen mehr oder weniger (bei manchen) garantierte Ergebnisse liefern, wäre ich hier nicht so sicher, wie sehr man sich auf solche internen Counter verlassen kann.

Und nur mal als Verdacht:
Falls Du wissen willst (oder rausfinden sollst), wie viel Datensätze bei einer (der letzten) Operation gelöscht wurden, dafür gibt es API Zugriffe. Du musst dann nicht den Header Zugriff programmieren, aber die zuletzt gelöschten Datensätze auslesen.
 

gohrd

Neuer Benutzer
Beiträge
4
Guten Morgen dabadepnu,

erst einmal vielen lieben Dank für deine Antwort und deine Hilfe.

Kannst du mir noch ein paar mehr Infos zu den API-Zugriffen geben? Das Problem ist, dass ich das System (ein PC-Kassenprogramm) und die ganze Umgebung nicht mehr zur Verfügung habe sondern nur noch die Datenbank. Nun soll überprüft werden ob Kassenumsätze gelöscht wurden. Und nein, ich arbeite nicht beim Finanzamt sondern auf der anderen Seite :) Das Finanzamt behauptet dies allerdings weil ein Experte von denen diese im Header gespeicherten Informationen sichtbar gemacht haben will. Der hat dafür wohl eine Java-Anwendung entwickelt.

Vielen Dank und einen schönen Tag!
 

dabadepdu

Datenbank-Guru
Beiträge
572
Und nein, ich arbeite nicht beim Finanzamt sondern auf der anderen Seite :) Das Finanzamt behauptet dies allerdings
Also mir ist es egal, ob Du vom Finanzamt bist oder nicht.
Der Punkt betrifft ja allerdings genau meine Anmerkung. Um diesen Beweis zu führen, braucht man eine vollständige Code Analyse von Derby und eine von dem Kassenprogramm.
Wenn Derby dort Löschungen vermerkt, ist ja zunächst mal völlig unbekannt, wann und zu welchem Zweck. Technisch redet man dann eben von API und Interfaces. Was hinter API oder Interface geschieht, dafür gibt es keine Regeln und u.U. auch keine (hinreichende) Dokumentation, nur den Code selbst. Das ist das Gegenteil von vor der API/Interface, die der Nutzer zum Bestimmungszweck aufruft. Gerade bei SQL und ACID konformen relationalen Datenbanksystemen hat man hier eine Garantie für die Funktion. Deswegen werden sie ja eingesetzt. Und selbst das hindert noch nicht unbedingt, ein Programm gegen seine Bestimmung einzusetzen (versehentlich oder absichtlich) und Dinge zu provozieren, die nicht als gedachter Anwendungsfall gelten.
Gut, hat man dann den von Derby Code analysiert, muss man es auch mit dem Kassencode machen, der ja vielleicht ganz legal in bestimmten Fällen Daten löscht (Servicetechniker, Quartalsabschluss, ..).

Kannst du mir noch ein paar mehr Infos zu den API-Zugriffen geben?

Falls Du das auf dem "normalen" Weg noch nachvollziehen willst, kannst Du Dir irgendwo ein Javaprogrammbeispiel suchen, das Daten einfügt, aktualisiert und löscht (insert, update, delete) und dabei jeweils die Anzahl der betroffenen Datensätze abfragt. Dann bist Du (mit Java dazwischen) genau an der Stelle, wo die API diese Zahl übermittelt.
Statement (Apache Derby 10.3 API Documentation)
Statement (Apache Derby 10.3 API Documentation)

Hier ist irgendein Codebeispiel, was die Anzahl der betroffenen Zeilen liefert.
Java JDBC CRUD Tutorial: SQL Insert, Select, Update, and Delete Examples
 

Dukel

Datenbank-Guru
Beiträge
465
Kann das Finanzamt dir das Programm und das Ergebnis zur Verfügung stellen? Du willst ja auch das Ergebnis des Finanzamts verifizieren können.
 
Werbung:

gohrd

Neuer Benutzer
Beiträge
4
Hallo alle zusammen,

ich möchte mich zuerst noch einmal für die fantastische Hilfe hier bedanken. Ohne euch wäre ich nicht weiter gekommen.

Es war mir zwar nicht möglich selber ein Programm zu entwickeln, dank eurer Hilfe konnte ich das technische Problem bzw. den Hintergrund einer Rechtsanwaltskanzlei so gut erklären, dass diese sich bereit erklärt hat den Quellcode und eine Dokumentation der Vorgehensweise beim Finanzamt einzufordern.
 
Oben