Forum: PC-Programmierung SQL - Fehler bei Division durch bestimmte Werte


von Name (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

ich nutze Firebird SQL auf mehreren identischen Steuerungen und logge 
unter anderem Fehlerzustände in einer Tabelle.

Die Abfragen erfolgen durch
1
SELECT 
2
   m.CURRTIME,
3
   p.varname,
4
   m.FVAL,
5
   m.ICODE
6
FROM MESSAGES m
7
join PARAM p
8
on p.ID=((m.ICODE-20000)/100)
9
order by p.ID desc NULLS FIRST;

wobei Fehler in der MESSAGES-Tabelle durch Werte über 20000 
gekennzeichnet werden.

Nun zu meinem Problem:

Auf einer Steuerung bricht diese Abfrage mit angehängter Fehlermeldung 
ab.
Hierbei konnte ich feststellen, dass die Zeile mit der Berechnung 
verantwortlich ist.
1
on p.ID=((m.ICODE-20000)/100)

Ist der Divisor kleiner 10 (anstatt der 100) wird die SELECT-Anweisung 
ausgeführt, ab einem Wert von 10 nicht mehr.

Woran kann dies liegen? Wieso nur bei dieser einen Steuerung?

Ein Umstand, der dazu geführt haben könnte war:

Durch eine wachsende Text-Datei war die Speicherkarte einmal randvoll. 
Der Prozess wurde angehalten und die Mega-Textdatei gelöscht.

Danke für eure Hilfe
Name

von Peter II (Gast)


Lesenswert?

dann wird wohl die DB beschädigt sein, lasse mal ein fbfix drüber laufen

von Sven P. (Gast)


Lesenswert?

Name schrieb:
>
1
> on p.ID=((m.ICODE-20000)/100)
2
>
>
> Ist der Divisor kleiner 10 (anstatt der 100) wird die SELECT-Anweisung
> ausgeführt, ab einem Wert von 10 nicht mehr.
>
> Woran kann dies liegen? Wieso nur bei dieser einen Steuerung?
Datenbank zerschossen und mit dem Divisor kleiner 10 erwischst du gerade 
die Datensätze, die defekt sind?

von Name (Gast)


Lesenswert?

Hallo,

Sven P. schrieb:
> Datenbank zerschossen und mit dem Divisor kleiner 10 erwischst du gerade
> die Datensätze, die defekt sind?

ich war schon beinah überzeugt, aber (heute ertestet):

die Abfrage wird ordentlich ausgeführt, wenn ich
1
order by p.ID desc NULLS FIRST;
weglasse. Die Ergebnisliste umfasst über 50.000 Zeilen.
Ist es vorstellbar, dass das "Umdrehen" der Ergebnisliste zu hohe 
Ressourcenanforderungen hat?

von Peter II (Gast)


Lesenswert?

Name schrieb:
> Ist es vorstellbar, dass das "Umdrehen" der Ergebnisliste zu hohe
> Ressourcenanforderungen hat?

wegen den paar zeilen? Ich denke nicht. (ich arbeiten mit DBs und da 
sind es ehrer 50.000.000 Zeilen, aber kein Firebird)

Hast du den DB check mal durchlaufen lassen?

von Name (Gast)


Angehängte Dateien:

Lesenswert?

Peter II schrieb:
> Hast du den DB check mal durchlaufen lassen?

leider bin ich mit den Optionen überfragt.
Anbei mal die möglichen Optionen, welche mir angeboten werden.

von Peter II (Gast)


Lesenswert?

validate und full müsste das richtige sein.

gfix -validate db.gdb
oder
gfix -validate -full db.gdb
oder
gfix -full db.gdb

ich muss auch ständig wieder probieren, habe aber gerade keine DB hier 
zu testen da.

von Name (Gast)


Lesenswert?

1
gfix -user xxx -password yyy -validate db.gdb
oder
1
gfix -user xxx -password yyy -validate -full db.gdb

führt zu:
bad parameters on attach or create database
-secondary server attachments cannot validate databases

1
gfix -user xxx -password yyy -full db.gdb
oder
1
gfix -user xxx -password yyy -full -validate db.gdb


führt zu:
incompatible switch combination
please retry, specifying an option

von Peter II (Gast)


Lesenswert?

Name schrieb:
> führt zu:
> bad parameters on attach or create database
> -secondary server attachments cannot validate databases

steht doch alles da, da DB muss lokal als Datei vorliegen.

von Name (Gast)


Lesenswert?

ok, als solches hätte ich die Fehlermeldung nun nicht interpretiert..

Lokal lag die DB zwar vor, aber ein Benutzer war verbunden.
Mit alleinigem Zugriff, wird der Befehl nun wohl ausgeführt und ohne 
Fehler- oder sonstigen Meldungen beendet.

von Peter II (Gast)


Lesenswert?

Name schrieb:
> Lokal lag die DB zwar vor, aber ein Benutzer war verbunden.
> Mit alleinigem Zugriff, wird der Befehl nun wohl ausgeführt und ohne
> Fehler- oder sonstigen Meldungen beendet.

ok, dann scheint es wirklich ein andere Problem zu sein. Ich hatte schon 
öfters defekte DBs aus dem Grund ist das immer mein erster Test.

Hast du eine aktuelle Version von Firebird nicht das es ein alter bug 
ist?

von alex (Gast)


Lesenswert?


von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Name schrieb:
> Durch eine wachsende Text-Datei war die Speicherkarte einmal randvoll

Eventuell hast du nicht mehr genug Temp-Speicher frei und die DB kommt 
damit nicht klar? Kannst du das ganze mal auf einem "normalem" PC laufen 
lassen oder ein größere Speicherkarte verwenden?

von Name (Gast)


Lesenswert?

Hi Alex, hallo Läubi,

eurer Idee möchte ich als erstes nachgehen, bevor ich an der 
Firebird-Version (hallo Peter II) schrauben möchte.

Tatsächlich ist (nur) Version 2.1.3 installiert.
1
df -h | grep "/tmp"

zeigt mir, das mein /tmp Verzeichnis auch nur 27 MB groß ist und während 
der Abarbeitung auf bis zu 73% belegt ist.
Vor der Abarbeitung und nach der Fehlermeldung liegt die Belegung bei 
konstant 6%.

Wie erweitert man denn von der Kommandozeile aus eine Partition?

von Peter II (Gast)


Lesenswert?

Name schrieb:
> Wie erweitert man denn von der Kommandozeile aus eine Partition?

fdisk - die Frage was hinter der Partition kommt.

von Name (Gast)


Angehängte Dateien:

Lesenswert?

Peter II schrieb:
> fdisk - die Frage was hinter der Partition kommt.

offenbar das Home-Verzeichnis. Hier ließe sich noch einiges an Platz 
schaffen und für /tmp abzweigen

von Peter II (Gast)


Lesenswert?

Name schrieb:
> offenbar das Home-Verzeichnis. Hier ließe sich noch einiges an Platz
> schaffen und für /tmp abzweigen

nein diese ausgabe hilft nicht weiter.

mache mal

fdisk /dev/sda [enter]
p [enter]

q [enter]

dann zeige uns die ausgabe.

von Name (Gast)


Angehängte Dateien:

Lesenswert?

Peter II schrieb:
> mache mal
>
> fdisk /dev/sda [enter]
> p [enter]

bitte sehr - und Danke für eure Hilfe

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Name schrieb:
> offenbar das Home-Verzeichnis. Hier ließe sich noch einiges
> an Platz schaffen und für /tmp abzweigen

Du kannst auch tmp mal auf home "umbiegen" wieso hast du überhaupt 
soviele Partitionen?



Hat das system eine GUI? Dann gibt es dafür auch Graphische tools, oder 
die Karte temporär an einem anderem Rechner anschließen.

von Peter II (Gast)


Lesenswert?

Name schrieb:
> bitte sehr - und Danke für eure Hilfe

ja, es gibt wirklich keine Lücke. Man müsste sda8 und sda9 löschen und 
dann neu anlegen, dabei gehen die Daten darauf verloren.

Es gibt auch tools die die partion verschieben können, aber davor auf 
jeden Fall ein backup machen.

Ich finde so viele partionen auch übertrieben und unhandlich.

von Name (Gast)


Lesenswert?

nein, eine GUI für Systemaufgaben ist leider nicht vorhanden, es handelt 
sich um ein embedded System, mit integrierter SSD.
Lediglich der Midnight Commander liegt mir vor.

Eine komplette Sicherung der SSD hab ich vorsichtshalber gemacht.

von Name (Gast)


Lesenswert?

Läubi .. schrieb:
> Du kannst auch tmp mal auf home "umbiegen"

wie wird denn so ein umbiegen gemacht?
Wenn sich hierdurch die Fehlerursache erstmal klären würde, würde ich im 
Nachgang versuchen den richtigen Weg zu gehen und die Partitionen 
anpassen (lassen)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Name schrieb:
> wie wird denn so ein umbiegen gemacht?

Im single-user mode booten, tmp entfernen und dann z.B. mit ln -s 
/home/<username>/mytemptemp tmp einen symbolischen Link anlegen oder 
mittels "bind": 
http://hamrotechtips.blogspot.de/2007/12/mount-folder-inside-another-folder.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.