Sequence-Schleife (noch einmal, anderes Problem) [Erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Sequence-Schleife (noch einmal, anderes Problem) [Erledigt]

Beitrag von Jan »

Ich habe ja schon früher Diskussionen um eine Sequence-Schleife hier begonnen. In denen es aber z. B. darum ging, das ich die Schleife falsch aufgebaut habe und die damit dennoch den Laufzeitfehler zugelassen haben, den ich eigentlich damit abfangen wollte. Das Problem ist mit Euren Hinweisen gelöst. Dennoch habe ich da ein Problem mit, für das ich wegen der anderen Problematik einen anderen Thread aufmache.

Noch einmal die Grundlage: Jede Nacht läuft ein Backup mit Veeam, das die gesamte VMWare-Maschine sichert. Ausnahmen sind nicht zugelassen (t. B. die dbf raus lassen). Der Hinweis ist hier nicht nötig, denn das machen die Admins nicht. Auch ein Unterbrechen des Programms zum zeitraum des Backups ist nicht möglich, das muß zwingend 7/24 durchlaufen. Das Problem: Wenn Veeam anspringt, dann sind die Dateien jeweils für kurze Zeit nicht sichtbar. Wenn ich nun in genau dem Augenblich eine Datenbankoperation durchführen möchte, dann kommt logischerweise ein Laufzeitfehler. Andererseits macht Veeam das anscheinend so, das der Dateihandle nicht gebrochen wird. Denn nach der Freigabe sind z. B. Grafiken, die zur Bearbeitung geöffnet sind, weiterhin bearbeitbar.

Meine Idee war nun, direkt vor jeder Datenbankoperation kurz zu kontrollieren, ob die dbf sichtbar ist. Dazu habe ich diese Funktion geschrieben:

Code: Alles auswählen

FUNCTION istDbfNochDa

LOCAL bOldError := NIL
LOCAL lReturn := .T.

bOldError := ErrorBlock({|e| BREAK(e)})                                                            // Eigenen Errorhandler einbauen, greift im Falle des RECOVER

DO WHILE .T.                                                                                       // So lange laufen lassen, bis ein kontrolliertes "Exit" kommt
   BEGIN SEQUENCE                                                                                  // Eigene Laufzeitfehler-Behandlung starten
   knx->(DbGoTo(1))                                                                                // Einfach zur Überprüfung auf den 1. Satz springen

    RECOVER                                                                                        // Was tun bei einem Laufzeitfehler
     lReturn := .F.
   END SEQUENCE

   IF lReturn == .T.                                                                               // Wenn Sperre erfolgreich ...
      Exit                                                                                         //    ... raus aus der Schleife

    ELSE                                                                                           // ... sonst
      lReturn := .T.                                                                               //    ... Kontrollvariable zurücksetzen für den nächsten Durchlauf
   ENDIF

   Sleep(1000)                                                                                     // 1000/100 = 10 Sekunden warten. Lt. IsAppRunning() müsste das genügen
ENDDO
ErrorBlock(bOldError)                                                                              // Original-Fehler-Codeblock wiederherstellen

RETURN NIL
Der Sinn ist: Ich versuche einfach mal, auf Datensatz 1 zu springen. Ist das möglich, ist die dbf sichtbar. Wenn nicht, soll der 10 Sekunden warten, und das noch einmal versuchen. Die Variable lReturn, die den Raussprung aus der Schleife ermöglicht, wird dabei immer wieder zurückgesetzt.

Das Problem: Die Schleife hängt einfach nach dem Backup (da ich immer die jeweils kontrolierten Daten inkl. Uhrzeit und Datum ausgebe, kann ich den Zeitpunkt sehr genau eingrenzen). Weil ich keine Ahnung habe warum und wo, habe ich da gestern eine Kontrollstruktur eingebaut, die zusätzlich einen Schleifenzähler und den Wert von lReturn ausgibt. Heute früh stand lReturn auf .F. und der Zähler auf über 2.500 Durchläufen. Da die Varable IMMER auf .T. zurückgesetzt wird, muß der DbGoTo(1) nach dem Veeam-Backup also grundsätzlich scheitern. Warum sonst sollte der sonst in den RECOVER springen?

Oder habe ich da einen Denkfehler drin? Oder einen weiteren Fehler in der Sequence-Struktur?

Die Alternative für mich wäre, das ich im Fall, das lReturn mir ein .F. zurückgibt, ich einfach alle dbf schließe und nach 10 Sekunden neu öffne. 10 Sekunden sind vollkommen ausreichend, da die Veeam-Sperre niemals länger dauert. Aber das ist natürlich die ganz grobe Keule, die ich ganz gerne vermeiden möchte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von brandelh »

Ein paar Anmerkungen ...
Ich habe ja schon früher Diskussionen um eine Sequence-Schleife hier begonnen.
die Schleife ist DO WHILE ... ENDDO ... BEGIN SEQ... END... ist eine Kontrollstruktur ;-)

nutze RECOVER oError und protokolliere den auftretenden Fehler ... mir ist nicht klar welchen er hier bringt.

2500 Fehler ... 6 / Minute also etwa 7 Std. ... ich denke auch, dass er im Fehler bleibt.

Aber ich vermute, dass der Dateihandle verloren geht !

Wenn Paint eine Grafikdatei öffnet, hält sie keinen offenen Handle, sonder öffnet die Datei erneut wieder ...

Die sauberste Lösung für das Problem ist tatsächlich das Schließen der Dateien solange kein Zugriff auf diese stattfindet.
Ob das aber wegen eventuell nötiger Sperren möglich ist weiß ich nicht.
Dafür müsste man das System besser kennen.

Die Dateien in der Error Routine wieder zu Öffnen, wenn sie offensichtlich nicht verfügbar sind erscheint mir ein gangbarer Weg und kein Holzhammer :-)
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Tom »

Wie Hubert schon angemerkt hat - Du bleibst in der Schleife, wenn ein Fehler auftritt. Nach meinem Dafürhalten ist das "DO WHILE .T." falsch - Du solltest dort stattdessen die Variable "lReturn" prüfen, also "DO WHILE !lReturn" (lReturn am Anfang auf .F.). Aber das ist vermutlich nicht die einzige nötige Änderung.

Aber ich glaube nicht, dass das zur Lösung des Problems führen wird. Wenn es sich tatsächlich so verhält, wie Du es schilderst, nämlich dass Tabellen während des Backups plötzlich unsichtbar sind (Attribute?), bewegst Du Dich mit solchen Ansätzen auf der kosmetischen Ebene. Die Anforderung, dass Deine Anwendung weiterläuft, während das Backup stattfindet, ist im Prinzip nicht umsetzbar. Gibt es nicht irgendwelche Flags, die das Backup-System setzt? Die Möglichkeit, eine Sperrzeit für die Verwendung Deines Programms zu etablieren? Du versuchst hier, auf Zustände zu reagieren, was möglicherweise sogar gelingen kann, aber Du generierst damit nur weitere Problemzustände, die weitaus gravierender werden können (Datenverluste und Inkonsistenzen).
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Manfred »

hm,

Du weißt doch wann die Datensicherung stattfindet. Wie wäre es, wenn Du innerhalb dieses Zeitfensters die Daten in eine DBF schreibst, die an anderer sicherer Stelle liegt und danach die DAten von dort importierst? So viele können das doch nicht sein. Im Notfall eben über einen Thread, der im Hintergrund arbeitet.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von brandelh »

Er hat oben ein EXIT für das Ende der Schleife ... wenn nur der DbGoto(1) nicht fehlschlagen würde. (Ich würde immer DbGoTop() nehmen)

"Unsichtbar" ist aber auf jeden Fall der falsche Begriff, egal welche Attribute man einstellt um eine Datei vor dem AUGE des Betrachters im Explorer zu verstecken,
wenn sie erstmal offen ist, wird nicht nach ihr gesucht sondern auf das Handle der offenen Verbindung zugegriffen.

Es ist MÖGLICH (Schattenkopie), dass der Backup die Datei nur vom OS aus sperrt und danach freigibt und das Handle noch existiert,
dann tritt aber ein andererer Fehler auf, daher meine Frage nach der Protokollierung der Fehlermeldungen ...
Offensichtlich kommt Xbase++ damit schwer zurecht ...

TOM hat aber 100 % Recht mit der Aussage, dass dies zu Datenproblemem führen wird.
Was wenn ein Teil der Änderungen geschrieben wurde, aber die DBF Header oder die Indexdatei nicht aktualisiert werden kann ... was dann.
Eigentlich müsste nach dem Fehler nicht nur die DBF geschlossen und geöffnet werden, sondern auch noch alle Indexdateien gelöscht und neu aufgebaut.

Eine andere Frage 24 / 7 Std. Betrieb, ist das ein SERVER Programm (xb2.net) oder läuft es als Verarbeitungsdienst auf einem Server ?
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Jan »

Hallo Hubert,

Mir ist im Prinzip erstmal egal, welcher Fehler da auftritt. Ich will in der Funktion ja nur abchecken, OB ich fehlerfrei arbeiten kann oder nicht. WARUM das nicht klappt ist mir da erstmal vollkommen egal.

Der Hinweis auf Paint ist da schon interessant. Ich hatte das anders gedacht (woebi heir auch niemand mit Paint arbeitet, ist ja ein Profi-Laden ...). Andererseits: Gerade die Geschäftsführung lässt das ERP dauernd über Nacht durchlaufen. Und darin werden beim Start alle dbf geöffnet. Wenn die dann am nächsten Tag weiterarbeiten haben die nie Probeme damit. Die Handles auf die dbf müssen also bestehen bleiben. Probleme gibt es nur immer dann, wenn ich genau zum Sicherungs-Zeitpunkt auf die dbf zugreifen will - dann knallt es.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Jan »

Hallo Tom,

das wäre schön, wenn es irgend so ein Flag gäbe. Das ich mit Xbase++-Mittteln auslesen kann. Aber der Admin und die Supportfirma haben da schon Stunden üebr dem Problem gehangen, und keine Lösung gefunden. Ich kann aber noch mal explizit nach sowas fragen, vielleicht sind die ja von sich aus nicht auf den Gedanken gekommen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Tom »

Ich nehme an, dass das Sicherungssystem einfach die Dateiattribute ändert (hidden, system). Merkwürdig jedoch, dass die Handles nicht verlorengehen. Ist es tatsächlich so, dass man direkt weiterarbeiten könnte, wenn man es schaffen würde, die Sicherungspause zu überbrücken? Das kann ich mir kaum vorstellen.

Wenn alle Stricke reißen, würde ich mich dem Vorschlag anschließen, im Sicherungsfenster anders zu arbeiten, etwa mit temporären Tabellen im Temp-Verzeichnis. Aber das geht natürlich nur, wenn es ausschließlich um Bewegungsdaten geht. Oder für eine Weile auf Speicherung in Arrays umzuschalten.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Jan »

Hallo Manfred,

das wird vermutlich eher nicht klappen. Denn die gesamte virtuelle Maschine wird ja gesichert. In dem Sicherungszeitraum muß ich also in jedem Fall damit rechnen, das eine der beiden dbf nicht zugreifbar sein wird. Wann genau und in welcher Reihenfolge ist für mich nicht sichtbar.

Da warte ich im Problemfall lieber die obligatorischen 10 Sekunden und mach die dbf dann neu auf.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Tom »

Was passiert, wenn die Dateien für kurze Zeit "nicht sichtbar" sind? Sind die Tabellen physikalisch weg oder sind nur Attribute verändert? Letzteres könntest Du abfragen.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Jan »

Hallo Hubert (hey, ich komm hier ja mit dem Antworten nicht mehr hinterher ...),

dummerweise muß ich sagen das ich nicht wirklich weiß, wie die hier ihr Backup genau fahren. Soweit ich weiß machen die in der Nacht einen Snapshot, und auf den Snapshot läuft dann die eigentliche Sicherung. Vermutlich, weil die Sicherung mehrere Stunden braucht, und damit die Daten ansonsten inkonstistent wären. Die Unterbrechung kommt also vermutlich, während diese Schattenkopie (oder was immer die da genau machen) ziehen.

Inskonsitenz-Probleme befürchte ich jetzt ersteinmal nicht. Die könnten natürlich eventuell auftreten, wenn auf die Millisekunde exakt das Backup und ein Schreibzugriff zusammentreffen. Aber das ist doch eher unwahrscheinlich. Und wäre ehrlich gesagt auch nicht ein wirklich großes Problem. Die allermeisten dbf-Zugriffe sind Seek()s und Lesen. Nur ab und an kommt ein Schreiben dazu. Immer nur in jeweils einer dbf, keine Redundanzen oder Relationen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von brandelh »

Jan hat geschrieben:Mir ist im Prinzip erstmal egal, welcher Fehler da auftritt.
wenn es dir egal ist, soll es mir Recht sein :badgrin:

Was ich nicht verstehe ist, was das Programm Nachts überhaupt zu tun hat, aber das ist eh dein Problem :-)

Wenn man den GENAUEN Fehler kennt, kann man ähnlich wie im Handbuch Beispiel mit Zugriff auf Diskette ...
für genau den Fehler vorsehen erstmal alle DBFs neu zu öffnen, wenn 3 Versuche fehlschlagen richtiger Laufzeitfehler.

Also NICHT lokal bei jedem Zugriff prüfen ob man versetzen kann sondern nur im Fehler Falle zentral.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Martin Altmann »

Nun, Jan, GIYF!
Wenn Du also wissen willst, wie solche Snapshots erzeugt werden und was dabei genau passiert, hast Du hier einige Anlaufstellen:
http://backupinferno.de/?p=78
http://www.datacenter-insider.de/privat ... es/144239/
Lesen darfst Du das latürnich selber - und die entsprechenden Schlüsse daraus ziehen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Jan »

Hallo Tom,

das mit den Attributen könnte ich mal kommende Nacht protokollieren. Wäre eventuell eine idee, mich da ran zu tasten. Das ist halt immer das Problem, das ich das nicht mal eben ausprobieren kann. Sondern immer erst mal wieder auf die kommende Nacht warten muß.

Deine Frage kann ich nicht beantworten. Ich habe keine Ahnung ob die nur unsichtbar sind oder wirklich die Verbindung unterbrochen ist. Ich tippe aber eher mal auf "nur" unsichtbar. Denn wie gesagt, wenn das ERP nachts druchläuft, haben die am kommenden Tag vollen Zugriff auf die dbf, obwohl ja auch die in der Nacht weggesichert worden sind. Das Problem ist immer nur der Monent des dbf-Zugriffes im falschen Augenblick.

Ich habe in dem Programm übrigens eine dbf, die ich wirklich immer nur bei Bedarf aufmache. Weil da eher selten gelesen und geschrieben wird. Und die habe ich über eine Sequence-Schleife abgefangen, denn das Use hat ebenfalls einen Laufzeitfehler ausgelöst, wenn genau dann die Sicherung lief. Das kam natürlich eher seltener vor, da wie gesgat der Zugriff nicht so häufig ist. Aber abfangen mußte ich das natürlich trotzdem.

Die beiden anderen dbf, die hier das Problem erzeugen, lasse ich immer auf. Weil die teilweise mehrere Lese- und Schreibzugriffe pro Sekunde haben. Die dbf im Zehntel-Sekunden-Takt zu öffnen und zu schließen hab ich für eher kontraproduktiv gehalten.

Und um das klarzustellen: Das Programm muß unbedingt 7/24 laufen. Aber wenn ich den Datenbankzugriff mal für 10 Sekunden unterbrechen muß, dann ist das überhaupt kein Problem. Ob ein Wetterwert jetzt oder in 10 Sekunden weggeschrieben wird, ist vollkommen egal. Oder ob der Einbruchsalarm jetzt oder in 10 Sekunden ausgelöst wird. Dann müssen die aber wirklich raus. Wenn z. B. der Wind zu stark wird oder es anfängt zu regnen, müssen Fenster automatisch geschlossen werden. Und wenn da ein Bösewicht über das Gelände läuft sollte der Alarm auch zeitnah raus gehen. aber 10 Sekunden Verzögerung sind da immer OK.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Jan »

Martin,

:-D *grins*

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Martin Altmann »

Nun gut,
dann mal kurz: Allgemein werden Schreiboperationen im Dateisystem bei der Erstellung des Snapshots unterbunden, sonst wäre er inkonsistent.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von brandelh »

So wie ich das sehe wird das "Gastdateisystem" abgehängt, also wie wenn einen USB Stick abmeldet.
Danach wieder aktieviert und wenn das Programm das nicht bemerkt geht alles gut, wenn es aber zugreift,
ist das wie eine Netzwerkverbindung die weggebrochen ist (sehr langes timeout) oder eine Diskette die man ausgeworfen hat.

ACH das ist DAS Programm, das alle möglichen Sachen überwachen muss !

Ich würde das Programm von den physischen Daten trennen !

Das Programm, das alles regelt liest die Daten beim Start ein und alle lesenden Zugriffe bleiben im Ram.
Falls was geschrieben werden muss und du schreibst selten, kann man das intern sofort tun und extern z.B. über Auftragsdateien in einem Ordner erledigen (oder direkte Verbindung)
Alle Aufträge (CSV, XML egal) die im Ordner liegen holt sich ein anderes Programm, und versucht den Task zu speichern, wenn das programm abbricht bleibt der Auftrag aktiv (Datei existiert ja schon) und wird über eine Batchendlosschleife gleich neu gestartet ... nächster Speicherversuch.

Das eigentliche Steuerprogramm würde also nicht mehr abstürzen. Nur so als grobe Gedankenskitze.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von brandelh »

Martin Altmann hat geschrieben:Nun gut,
dann mal kurz: Allgemein werden Schreiboperationen im Dateisystem bei der Erstellung des Snapshots unterbunden, sonst wäre er inkonsistent.

Viele Grüße,
Martin
das widerspricht meiner Annahme man könnte "Auftragsdateien" speichern ...
reicht aber noch nicht zur Erklärung warum dbGoTo(1) abbricht, schon die Sperre auf die Indexdatei vor der Operation muss unterbunden worden sein.

Eventuell würde die Umstellung auf ein anderes Speichermedium (SQL-Server oder SQLite) das besser hinbekommen und keine Fehler auslösen ...
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Tom »

Veeam macht da ganz schön heiße Sachen (habe gerade ein bisschen durch die Foren gestöbert). Bin gespannt, ob Du das hinkriegst, Jan. Irgendwie befindest Du Dich da in Manfreds Gesellschaft - es gibt eine Anforderung, die eigentlich nicht zu erfüllen ist (Arbeit auf dem Datenbestand, während er gesichert wird, Abgleich von Daten, die möglicherweise nicht existieren), und keiner kooperiert. Keine schöne Situation.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Manfred »

tja, ist dasselbe Team..... :badgrin:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Jan »

Nach dieser sehr interessanten Diskussion tendiere ich inzwischen dahin, im Problemfall einfach alle dbf zu schließen, 10 Sekunden zu warten, und dann neu zu öffnen. Das scheint mir der sicherste Weg zu sein. Auch wenn ich den am Anfang als grobe Keule bezeichnet hatte.

Und ja, Manfreds Problem und mein Problem liegen beim gleichen Kunden. Der scheint (unbeabsochtigt) ein Faible für solche Konstellationen zu haben.

Tom: Ja, Veeam kann en paar ganz tolle Sachen machen. Die haben das hier geuodatet, weil die jetzt benutzte Version folgendes kann: Der Storage ist ausgefallen. Bis der wieder läuft wird mit den Backupdaten weitergearbeitet. Wenn der Storage läuft wird das Backup zurückgesichert. Und während das gemacht wird, kann auch weiterhin mit den Daten gearbeitet werden. Weil Veeam genau weiß, welche daten wo liegen und dann eben entweder den Zugriff auf das Backup oder auf die zurückgesicherten Daten leitet. Schicke Sache. langsam, aber es funktioniert.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Sören »

Hallo Jan,

warum pufferst Du die Daten nicht in einem Array, während die DBFs geschlossen sind?
Du öffnest die DBFs im Intervall von z.B. 5 Sek. und schreibst die Daten weg, leerst das
Array (immer datensatzweise, so wie die Daten geschrieben werden) und schließt die
DBFs anschließend wieder.
Das USE sowie das Schreiben der Daten müsstest Du natürlich in eine SEQUENCE-Struktur
einbetten, um Fehler abzufangen.

Ich mache das in einem ähnlich gelagerten Fall seit Jahren so, ohne Probleme.
Beste Grüße,
Sören
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Koverhage »

Das hatte ich Jan ja schon vorgeschlagen, was er allerdings abgelehnt hat.
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von brandelh »

Tagsüber hat er ja das Problem nicht und Nachts ab und zu mal die DBFs zu schließen und wieder zu öffnen kann nur gut sein ;-)
Außerdem ist das in der ErrorRoutine ohne viel Aufwand zu erledigen. Alles andere ist aufwändiger.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Sequence-Schleife (noch einmal, anderes Problem)

Beitrag von Jan »

Abschlußinfo: Wir haben das Problem jetzt mit einem komplett anderen Ansatz gelöst. Veeam kann man sagen, das es vor und nach dem Snapshot Batch-Jobs ausführen soll. Wir machen das jetzt so, das eine Datei auf den Server geschrieben wird, auf dem die Software läuft. Also nicht auf dem zu sichernden Rechner! Diese Datei wird nach dem Snapshot von Veeam wieder gelöscht.

In meinem Programm läuft jetzt ein Thread, der immer wieder nachschaut, ob diese Datei vorhanden ist. Wenn ja werden alle internen Arbeiten unterbrochen, alle offenen dbf geschlossen. Sobald die Datei weg ist werden alle benötigten dbf wieder geöffnet und geht die Abarbeitung der Jobs weiter. Da die ankommenden Jobs in der Warteschlange stehen bleiben geht nichts verloren, es verzögert sich nur etwas.

Leider muß ich die dbf schließen. Denn direkt im Anschluß an den Snapshot sind die doch noch weg. Die Handles werden also anscheinend erst irgendwann später wiederhergestellt. Zum Arbeitsbeginn sind die jedenfalls wieder da, aber so viel Zeit habe ich nicht.

Nochmals vielen Dank für all eure Kommentare, Hilfen, Ideen. Daß die ganze Geschichte jetzt komplett anders läuft als geplant war so nicht vorherzusehen, ärgerlich, und hat viel Zeit gekostet.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten