Seite 1 von 1

Indexaktualisierung

Verfasst: Di, 25. Feb 2014 19:30
von Manfred
Wenn in eine DBF geschrieben wird, muß dann jeder Index geöffnet sein, auch wenn kein Indexfeld betroffen ist? Ich bin mir im Moment nicht so ganz sicher. Nur Änderung, kein Löschen oder Anfügen ist gemeint.

Re: Indexaktualisierung

Verfasst: Di, 25. Feb 2014 20:35
von brandelh
Wenn du sicher sein willst, dann JA, aber eigentlich sollte eine Änderung in einem normalen Feld eines bestehenden Satzes den Index nicht ändern.
Natürlich immer "ohne Garantie" :!:
8)

Re: Indexaktualisierung

Verfasst: Di, 25. Feb 2014 20:47
von georg
Hallo, Manfred -


grundsätzlich stimme ich Hubert zu, aber: in einem halben Jahr kommt eine Änderung, bei der auch ein Index-Feld geändert wird, und wenn Du Dich dann nicht daran erinnerst, dass die Indexdateien nicht geöffnet sind, dann ist der Index kapott, wie man in Köln so schön sagt.

Daher würde ich Index-Dateien immer öffnen, wenn Änderungen an einer Datei anstehen.

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 0:34
von brandelh
georg hat geschrieben:Daher würde ich Index-Dateien immer öffnen, wenn Änderungen an einer Datei anstehen.
:!: :!: :!:
zu deutsch, solche Fallen baut man (sich) nicht :D

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 6:32
von Rolf Ramacher
ich öffne den Index IMMER Mit

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 8:18
von brandelh
so ist es auch richtig und wenn man die Sortierung nicht brauchen kann: SET ORDER TO 0

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 8:31
von Tom
Wenn in einer Tabelle Felder aktualisiert werden, die nicht in Indexdateien referenziert sind, ist es völlig sinnlos, die Indexdateien zu öffnen - es kostet lediglich Zeit und Netzwerktraffic. Es sei denn, man benötigt sie ohnehin. Oder die Tabelle wird gepackt. Oder es gibt konditionale Indexe (FOR !Deleted() o.ä.). Anders gesagt: Man sollte sich schon bei dem sicher sein, was man da tut.

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 8:36
von Manfred
Es war nur eine Frage. Das Problem ist folgendes: ich stehe mit anderen in einem größeren Projekt, in dem ich einen gewissen Teil programmiere. Leider hapert es ein wenig mit dem Informationsfluss und ich bekomme nur teilweise mit, was alles in Benutzung ist. Jetzt ist natürlich passiert, was passieren mußte: Ein Index ging kaputt. Den benutze ich aber überhaupt nicht,weil ich gar nichts davon wußte. Also war ich schonmal nicht der Übeltäter. Es kam jetzt die Frage auf, ob es ratsam ist alle Indexdateien zu öffnen, selbst wenn nur ein Feld geändert wird, auf dem kein Index liegt, was in diesem Fall geschieht. Da wußte ich auch keine Antwort drauf. Deshalb meine Frage hier. In meinen eigenen Projekten gibt es diese Problem nicht, weil es CDX Dateien sind und die mache ich jedesmal auf. Hier geht es um NTX Dateien

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 8:50
von Tom
Das ist allerdings die fast schon klassische Ursache für Indexkorruptionen, wenn ein Index nicht geöffnet ist, obwohl ein in ihm referenziertes Feld aktualisiert wird. Oder ein Datensatz angehängt oder gelöscht wird.

Äh. Bei gemeinsamer Arbeit an Datenbankprojekten gehört es zu den Essentials, jederzeit alle Tabellen, Indexe usw. für alle Beteiligten zu dokumentieren.

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 8:53
von brandelh
Wie ich und TOM geschrieben haben, eigentlich sollte es nicht nötig sein, aber woher willst DU wissen, was ANDERE gerade machen :?:
Im gemischten Betrieb ist es soger extrem wichtig, dass alle Dateien und Indexdateien in der gleichen Reihenfolge geöffnet werden, nachdem festgestellt wurde, dass alle benötigten da sind.

Wenn eine fehlt oder über eine Steuerdatei der Neuaufbau angeordnet wurde, öffne ich die Hauptdatei exclusiv, wenn das misslingt, baut wohl gerade ein anderer auf. Das zeige ich an und quit.
Wenn OK bleibt diese offen und alle anderen werden exclusive in der gleichen Reihenfolge geöffnet um alle Indexe aufzubauen, erst danach wird alles geschlossen und normal weiter gemacht.

Wenn nun jemand die Datei öffnet ohne sich um Indexe zu kümmern, oder in einer anderen Reihenfolge arbeitet, kann es passieren dass sich mehrere gegenseitig blockieren ohne dass der Index tatsächlich aufgebaut wird.

In deinem Beispiel rate ich dazu:

1. die DBESYS.PRG zentral identisch zu pflegen (einer ist verantwortlich, die anderen nutzen diese).
2. Indexerstellung über eine Funktion, die genauso von einem erstellt wird und alle nutzen.
3. Dateiöffnung über eine Funktion, die zuerst prüft ob alle Indexe da sind, wenn nicht dann 2., ansonsten öffnen.
Wenn es viele Dateien sind, die nicht alle benötigt werden (z.B. Kundenverwaltung, Lieferantenverwaltung, Artikel etc.) kann ein Parameter die aktuelle Aufgabe übermitteln und die Funktion öffnet nur die nötigen Dateien.

OHNE Indexe würde ICH nur ein kleines Programm erlauben, das lediglich einige Felder anpasst und die Datei mindestens mit FLOCK() sperrt.

Aber das ist natürlich auch Ansichtssache ;-)

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 8:57
von Manfred
@Tom,

verstehe ich Dich jetzt falsch, oder Du mich? Es wird ein Feld geändert, das NICHT indiziert wurde.

Re: Indexaktualisierung

Verfasst: Mi, 26. Feb 2014 9:19
von Tom
@Manfred: Ich denke, ich habe Dich durchaus richtig verstanden. Das war nur eine Randbemerkung zu Deinen Ausführungen bezüglich des gemeinsamen Projekts.