Hallo,
Hintergrund:
ich versuche mich ein wenig in die Themen "Programmieren" und "Datenbanken" wieder etwas hereinzufuchsen, da ich da seid meiner Schulzeit, Ausbildung und auch meine aktuellen Beruf nur am Rande mit zu tun habe. Leider fehlt mir oft en praktisches Projekt.
Nun ergab sich letztes Jahr ein kleines Projekt auf der Arbeit, es ging darum herauszufinden welche IP-Addressen in einem DHCP-Losen /21er noch belegt sind, da sich in über einen Jahrzehnt der händischen Pflege einer OpenOffice-Liste diverse Leichen angesammelt hatten. Da auch verschiedene Geräte in dem Netz sind die nur Sporadisch eingeschaltet / angeschlossen werden (Notebooks, WLAN-Handhelds e.t.c.) habe ich ein kleines Shell-Script mit einem Perl-Script kombiniert das 3x täglich per Cron aufgerufen wird, mit nmap die aktiven hosts überprüft und anschließend das Ergebniss (Kein Gerät auf der IP-Addresse aktiv -> Wert null oder Gerät auf der IP-Addresse aktiv -> Mac-Addresse) in eine hierfür angelegte MariaDB schreibt, bzw. schreiben soll. Dies hat auch Grundsätzlich funktioniert, nach einem Monat hab ich eine kleine Datenbankabfrage geschrieben und mit unsere Office-Tabelle verglichen. Sozusagen alles Super. Das Script habe ich dennoch weiterlaufen lassen, um u.U. ein ergebnis nochmal zu prüfen oder evtl. einer doppelt vergebenen IP-Addresse auf die Schliche zu kommen.
Das Problem:
Das Schreiben der Daten durch das Perlscript ist irgendwann "vor dem Hammer" gelaufen. ich denke aufgrund eines Fehlers von mir im Datenbank design. Der Fehler:
DBD::mysql::db do failed: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs at $pfad/ipmacauswertung.pl line 25.
Ich habe die Datenbank vermutlich falschherum aufgebaut ODER aber in der obersten Zeile die Felder mit einem falschen Typ definiert, oder beides zusammen (Ich habe Screenshots aus phpmyadmin hinzugefügt, zur Darstellung finde ich das recht praktisch.
Ich habe erste eine Spalte hinzugefügt mit varchar(65) und in der ersten Zeile dort den Wert" IP quasi als überschift hinzugefügt. Dann habe ich für jede IP-Addresse des Netzes eine neue Zeile erstellt, mit der jeweiligen IP-Addresse.
Anschließend fügt das o.G. PerlScript ein Spalte hinzu, mit einenm "char(50)" als erste Zeile und einer "Menschenlesbaren" Zeit/Datumsangabe und dann zu jeder IP-Addresse mit Ergebniss die entsprechende Mac-Addresse. Dies hat ca. 2,5 Monate gut funktioniert a ca. 3 Einträge / Tag, bis zur o.G. Fehlermeldung.
Meine Vermutung 1: Ich hätte die IP-Addresse in Spalten anlegen müssen, und die je Ergebniss eine Zeile hinzufügen müssen.
Meine Vermutung 2: Ich hätte kein so großes Feld (Datum in Textform) hinzufügen sollen für die Spalten, sondern z.B. Fortlaufende Zahlen, und das Datum entweder in Zeile 2 oder in eine Seperate Datenbank (Normalform?) Schreiben müssen.?
Jetzt die Frage
Welche der Beide Vermutungen, oder beide, oder auch gar keine Stimmen? Ich habe schon viel gegoogelt, aber keine genauen aussagen gefunden, bzw. habe die mans zu dem Thema nicht genau nachvollziehen können.
Übersicht:
Strukturchar:
Hintergrund:
ich versuche mich ein wenig in die Themen "Programmieren" und "Datenbanken" wieder etwas hereinzufuchsen, da ich da seid meiner Schulzeit, Ausbildung und auch meine aktuellen Beruf nur am Rande mit zu tun habe. Leider fehlt mir oft en praktisches Projekt.
Nun ergab sich letztes Jahr ein kleines Projekt auf der Arbeit, es ging darum herauszufinden welche IP-Addressen in einem DHCP-Losen /21er noch belegt sind, da sich in über einen Jahrzehnt der händischen Pflege einer OpenOffice-Liste diverse Leichen angesammelt hatten. Da auch verschiedene Geräte in dem Netz sind die nur Sporadisch eingeschaltet / angeschlossen werden (Notebooks, WLAN-Handhelds e.t.c.) habe ich ein kleines Shell-Script mit einem Perl-Script kombiniert das 3x täglich per Cron aufgerufen wird, mit nmap die aktiven hosts überprüft und anschließend das Ergebniss (Kein Gerät auf der IP-Addresse aktiv -> Wert null oder Gerät auf der IP-Addresse aktiv -> Mac-Addresse) in eine hierfür angelegte MariaDB schreibt, bzw. schreiben soll. Dies hat auch Grundsätzlich funktioniert, nach einem Monat hab ich eine kleine Datenbankabfrage geschrieben und mit unsere Office-Tabelle verglichen. Sozusagen alles Super. Das Script habe ich dennoch weiterlaufen lassen, um u.U. ein ergebnis nochmal zu prüfen oder evtl. einer doppelt vergebenen IP-Addresse auf die Schliche zu kommen.
Das Problem:
Das Schreiben der Daten durch das Perlscript ist irgendwann "vor dem Hammer" gelaufen. ich denke aufgrund eines Fehlers von mir im Datenbank design. Der Fehler:
DBD::mysql::db do failed: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs at $pfad/ipmacauswertung.pl line 25.
Ich habe die Datenbank vermutlich falschherum aufgebaut ODER aber in der obersten Zeile die Felder mit einem falschen Typ definiert, oder beides zusammen (Ich habe Screenshots aus phpmyadmin hinzugefügt, zur Darstellung finde ich das recht praktisch.
Ich habe erste eine Spalte hinzugefügt mit varchar(65) und in der ersten Zeile dort den Wert" IP quasi als überschift hinzugefügt. Dann habe ich für jede IP-Addresse des Netzes eine neue Zeile erstellt, mit der jeweiligen IP-Addresse.
Anschließend fügt das o.G. PerlScript ein Spalte hinzu, mit einenm "char(50)" als erste Zeile und einer "Menschenlesbaren" Zeit/Datumsangabe und dann zu jeder IP-Addresse mit Ergebniss die entsprechende Mac-Addresse. Dies hat ca. 2,5 Monate gut funktioniert a ca. 3 Einträge / Tag, bis zur o.G. Fehlermeldung.
Meine Vermutung 1: Ich hätte die IP-Addresse in Spalten anlegen müssen, und die je Ergebniss eine Zeile hinzufügen müssen.
Meine Vermutung 2: Ich hätte kein so großes Feld (Datum in Textform) hinzufügen sollen für die Spalten, sondern z.B. Fortlaufende Zahlen, und das Datum entweder in Zeile 2 oder in eine Seperate Datenbank (Normalform?) Schreiben müssen.?
Jetzt die Frage
Welche der Beide Vermutungen, oder beide, oder auch gar keine Stimmen? Ich habe schon viel gegoogelt, aber keine genauen aussagen gefunden, bzw. habe die mans zu dem Thema nicht genau nachvollziehen können.
Übersicht:
Strukturchar: