SQL - Fehler bei Division durch bestimmte Werte

Gast #3236091
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
Angehängte Dateien:
Gast #3238847
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?
Gast #3253219
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?
Gast #3253225
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?
Gast #3253263
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.
Gast #3253286
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
Gast #3253350
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.
Gast #3253353
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?
Gast #3255843
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?
Gast #3255910
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.
Gast #3255912
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren