[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Dec 2006
    Beiträge
    7

    Datensatz sperren

    Hallo Zusammen,

    ich arbeite gerade an einer Software, die Multi-User fähig sein muss. Dazu muss ich Daten auf einer AS400 in mein Formular einlesen / die Daten in der Datenbank ändern.

    Wie kann ich aber nun einen einzelnen Datensatz in der Datenbank sperren? Damit meine ich, das der Datensatz schreibgeschützt (aber noch lesbar ist), um so etwaige Inkonsistenzen zu verhindern.

    Ich hab schon hier im Forum + bei Google gesucht, aber finde einfach nicht das was ich brauche. Nur den Begriff Lock hab ich schonmal. Soweit ich aber bis jetzt weiß kann ich nur eine ganze Tabelle mit Lock sperren, was aber nicht das ist was ich brauche.


    Seid gnädig mit einem Berufsstarter

    mfg

    Easy

  2. #2
    Registriert seit
    Feb 2004
    Beiträge
    18
    Das ist ganz abhängig von Deiner Programmiersprache...

    Bei SQL übernimmt die DB2 das für dich.

    Bei native-Programmierung (RPG, Cobel, ...) mußt du dich selber drum kümmern:

    Nachdem du weiterhin lesend auf die Dantesätze zugreifen möchtest, kommt nur loisches Sperren in Frage. Da gibt es einfache und elegantere Möglichkeiten.

    1. Sperrflag am Datensatz
    Das Sperrende Programm setzt das dieses Kennzeichen auf "gesperrt". Alle anderen Programme müssen dieses Kennzeichen abfragen, und eine Änderung verweigern.
    Nachteil: Was passiert wenn der sperrende Job abstürzt.
    Nachteil: In grossen Programmkomplexen ist nicht ersichtlich woher, aus welcher Datei, die Sperre kommt.

    2. Sperren am Datensatz über Job-ID
    Das Sperrende Programm hinterläßt im Datensatz seinen Job (Nummer, Benutzer, Jobname). Alle anderen Programm prüfen, ob der Job noch im System aktiv ist und eine Änderung verweigern bzw. zulassen.
    Nachteil: 26A für die Jobinformation * 2 Mio Datensätze = 50MB von denen die meisten ungenutzt leer sind
    Nachteil: In grossen Programmkomplexen ist nicht ersichtlich woher, aus welcher Datei, die Sperre kommt.

    3. Eigene Sperrlogik über externes Programm
    Einem Programm wird der Schlüssel für den zu sperrenden Datensatz übergeben z. B. als Datenstrukur. Diese Programm schreib in einer eigenen Datei die Jobinformationen zu diesem Schlüssel weg und liefert Informationen über den Erfolg der Sperrung. Kann dieses Programm den Satz nicht sperren, weil ein anderer Job den gleichen Schlüssel benutzt. Darf nur lesend zugegriffen werden.
    Nachteil: An den Datensätzen selber ist keine Sperrung ersichtlich. Die Schlüsselübergabe an das Programm muss immer von allen Programm stimmen, sonst werden ggf. gesperrte Sätze als Frei geliefert.
    Vorteil: Man braucht ggf. nur eine Datei clearen und alles ist wieder frei.

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    bei record level access:
    Open mit update sperrt den Satz beim lesen und gibt nach update oder lesen nächster Satz frei
    bei SQL:
    verarbeitung mit Cursor ohne Commit analog
    Bei Verarbeitung mit Commit legt man das Sperrlevel für das Programm fest (kann für Operation modifiziert werden und dann kann man von nie bis sperren bei jeder Operation festlegen
    Freigabe erfolgt dann mit Commit/Rollback

    mfg

    Dieter Bender

    Zitat Zitat von Easyrider
    Hallo Zusammen,

    ich arbeite gerade an einer Software, die Multi-User fähig sein muss. Dazu muss ich Daten auf einer AS400 in mein Formular einlesen / die Daten in der Datenbank ändern.

    Wie kann ich aber nun einen einzelnen Datensatz in der Datenbank sperren? Damit meine ich, das der Datensatz schreibgeschützt (aber noch lesbar ist), um so etwaige Inkonsistenzen zu verhindern.

    Ich hab schon hier im Forum + bei Google gesucht, aber finde einfach nicht das was ich brauche. Nur den Begriff Lock hab ich schonmal. Soweit ich aber bis jetzt weiß kann ich nur eine ganze Tabelle mit Lock sperren, was aber nicht das ist was ich brauche.


    Seid gnädig mit einem Berufsstarter

    mfg

    Easy
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Dec 2006
    Beiträge
    7
    Zitat Zitat von dirkus
    Das ist ganz abhängig von Deiner Programmiersprache...
    Meine Programmiersprache ist C#.NET / SQL

    Zitat Zitat von dirkus
    Bei SQL übernimmt die DB2 das für dich.
    Die Frage ist wie? Kann ich darauf irgendwie zugreifen, wann wer was gesperrt hat? Könnte ich solche Sperren auch manuell setzen? Und auslesen? Fragen über Fragen

    Zitat Zitat von dirkus
    Bei native-Programmierung (RPG, Cobel, ...) mußt du dich selber drum kümmern:
    Fällt weg

    Zitat Zitat von dirkus
    Nachdem du weiterhin lesend auf die Dantesätze zugreifen möchtest, kommt nur loisches Sperren in Frage. Da gibt es einfache und elegantere Möglichkeiten.

    1. Sperrflag am Datensatz
    Das Sperrende Programm setzt das dieses Kennzeichen auf "gesperrt". Alle anderen Programme müssen dieses Kennzeichen abfragen, und eine Änderung verweigern.
    Nachteil: Was passiert wenn der sperrende Job abstürzt.
    Nachteil: In grossen Programmkomplexen ist nicht ersichtlich woher, aus welcher Datei, die Sperre kommt.
    Das wird wahrscheinlich nicht möglich sein, da ich die Datenbanken nicht modifizieren darf / kann. Genaueres ergibt sich erst wenn die sich mal melden.

    Zitat Zitat von dirkus
    2. Sperren am Datensatz über Job-ID
    Das Sperrende Programm hinterläßt im Datensatz seinen Job (Nummer, Benutzer, Jobname). Alle anderen Programm prüfen, ob der Job noch im System aktiv ist und eine Änderung verweigern bzw. zulassen.
    Nachteil: 26A für die Jobinformation * 2 Mio Datensätze = 50MB von denen die meisten ungenutzt leer sind
    Nachteil: In grossen Programmkomplexen ist nicht ersichtlich woher, aus welcher Datei, die Sperre kommt.
    Hört sich für mich irgendwie n bischen zu groß an, so auf den ersten Eindruck + der Nachteil ist schon happig...

    Zitat Zitat von dirkus
    3. Eigene Sperrlogik über externes Programm
    Einem Programm wird der Schlüssel für den zu sperrenden Datensatz übergeben z. B. als Datenstrukur. Diese Programm schreib in einer eigenen Datei die Jobinformationen zu diesem Schlüssel weg und liefert Informationen über den Erfolg der Sperrung. Kann dieses Programm den Satz nicht sperren, weil ein anderer Job den gleichen Schlüssel benutzt. Darf nur lesend zugegriffen werden.
    Nachteil: An den Datensätzen selber ist keine Sperrung ersichtlich. Die Schlüsselübergabe an das Programm muss immer von allen Programm stimmen, sonst werden ggf. gesperrte Sätze als Frei geliefert.
    Vorteil: Man braucht ggf. nur eine Datei clearen und alles ist wieder frei.
    Wäre möglich, aber dann sind wir wieder beim Datenbank erweitern / modifizieren. Ob Tabelle oder Datei, Zugriff verweigert :-P. Wobei, wenn eine Modifikation möglich ist bevorzuge ich ein Flag am Ende der Tabelle, geht einfacher + schneller.


    Zitat Zitat von BenderD
    bei SQL:
    verarbeitung mit Cursor ohne Commit analog
    Bei Verarbeitung mit Commit legt man das Sperrlevel für das Programm fest (kann für Operation modifiziert werden und dann kann man von nie bis sperren bei jeder Operation festlegen
    Freigabe erfolgt dann mit Commit/Rollback
    Etwas verwirrt bin. Ich hab zwar unter Google theoretische Dinger gefunden, aber kapieren tu ich die bei weitem noch nicht. Hast du evtl. ein Beispiel dazu? Analog wäre denk ich mal am besten, da die Zugriffe zur Datenbank selbst in einer Schnittstelle liegen, die nicht ich entwickle. Ich kann nur die SQL-Befehle rausschicken.


    mfg

    Easy

    P.S.: Sorry für so viele Fragen, mein wissensdurst is groß *gg*

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.247
    ADO.NET übernimmt das für dich.
    Es wird generell keine Sperre gesetzt, da ADO.NET die Verbindung löst !
    Erst wenn du tatsächlich einen Update durchführst gibt's eine Meldung, dass die Daten sich geändert haben und somit ein Update nicht mehr geht !!!

    An dieser Methode kommst du nicht mehr vorbei.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Dec 2006
    Beiträge
    7
    Okay. Vielen Dank für eure Hilfe

Similar Threads

  1. Anwendung Sperren
    By TARASIK in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 08-12-06, 11:24
  2. Eingabe sperren bei Fehlermeldung über API
    By ExAzubi in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 17-10-06, 16:48
  3. nach Insert neu gen. Datensatz ermitteln
    By M.Kasper in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 25-08-06, 07:32
  4. Subfile + Overlay und letzter Datensatz
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-06-06, 08:47
  5. SQL Anweisungen sperren
    By sieberli in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 18-04-06, 10:27

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •