[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Nov 2009
    Beiträge
    222

    SQL MassenUpdate und Sperre

    Guten Tag,
    Wir haben Trigger auf Dateien um, bei einer Änderung oder Neuanlage einige Daten des Satzes in eine asyncrone Verarbeitung zu übergeben.

    Da wird, u.a., ein DWH befüllt. Das läuft seit Jahren stabil.
    Das DWH gilt Konzernweit und die Daten werden in seperaten Tabellen zur Verfügung gestellt.
    Eine Abbildung dessen via View wollten der damalige Dienstleister nicht.

    Ab und zu gibt es aus dem DWH neue Anforderungen. Nachdem diese Programmiert sind, müssen die betroffenen Sätze einmalig an das DWH übergeben werden.
    dazu machen wir ein
    Update Basisdatei set ChgFld = 'X' where was_auch_immer.
    Das bricht leider ab und zu ab, da einzelnde Sätze im Zugriff durch die Anwender sind.
    Diese Sätze brauchen nicht gekennzeichnet werden, das der SB ja im Änderungsmodus ist und der Trigger dann dadurch auslöst.

    gibt es soetwas wie
    with ignore_Lock oder
    set ignore_Lock = *yes

    Danke
    Dietlinde Beck

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Nur, wenn Dateien im Journal aufgezeichet werden und die betroffenen Programme mit Commit arbeiten.
    Mit dem Transaktionsmodell *CHG (Read committed) werden durch eine Transaktion gesperrte Daten automatisch überlesen, so dass der Update nicht erfolgt.
    Allerdings fehlen dir dann diese ja im DWH.
    Ohne Commit hast du leider keine Chance.
    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

  3. #3
    Registriert seit
    Jan 2008
    Beiträge
    159
    wie ist die " maximale Satzwartezeit (WAITRCD)" bei der Basisdatei eingestellt ? *NOMAX könnte helfen.

  4. #4
    Registriert seit
    Oct 2004
    Beiträge
    251
    Ich habe das zwar noch nie verwendet, klingt für mich aber nach Lösung(möglichkeit):

    Seit V7R4 gibt es einen SKIP LOCKED DATA Zusatz - siehe auch >> hier <<


    Update Basisdatei set ChgFld = 'X' where was_auch_immer SKIP LOCKED DATA



  5. #5
    Registriert seit
    Nov 2009
    Beiträge
    222
    @robertPic
    das hat sehr gut funktioniert, danke
    DiBe

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von dibe Beitrag anzeigen
    Diese Sätze brauchen nicht gekennzeichnet werden, das der SB ja im Änderungsmodus ist und der Trigger dann dadurch auslöst.
    Dietlinde Beck
    ... nicht jede Sperre löst später den Trigger aus.

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

  7. #7
    Registriert seit
    Nov 2009
    Beiträge
    222
    Die Sperre nicht, aber das 'durchtikkern' des Satzes vom Anwender.
    Wenn die den Satz zum Ändern anwählen, ändern sie (i.d.R) auch.
    Fürs Ansehen gib es eine andere Option, die sperrt auch nicht.

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von dibe Beitrag anzeigen
    Die Sperre nicht, aber das 'durchtikkern' des Satzes vom Anwender.
    Wenn die den Satz zum Ändern anwählen, ändern sie (i.d.R) auch.
    Fürs Ansehen gib es eine andere Option, die sperrt auch nicht.
    ... mit dem Prinzip Hoffnung kommt man in der DV nicht weit.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Nun, es war eigentlich schon immer so, dass Satzsperren nie erhalten bleiben, wenn eine Usereingabe erwartet wird. Dies führt auch gerne bei anderen Programmen dann zu Problemen.
    Wenn man im Änderungsdienst verhindern will, dass jemand anderes dies parallel tun kann, nutzt man einen allgemeinen BelegLock-Service.
    Dieser erstellt einen logischen Lock in einer Hilfsdatei, die dann immer geprüft wird bevor eine Belegbearbeitung startet. Wenn die Jobinformation mit gespeichert ist, kann man per API, jetzt auch via SQL, prüfen ob der Job noch lebt.

    Die andere Methode ist eben:
    - Satz ohne Sperre lesen und in einer Variablen merken.
    - User führt die Aktion durch.
    - Satz nun mit Sperre lesen und mit gespeicherten Infos vergleichen.
    - Wenn gleich, weiterarbeiten, Updaten und committen.
    - Wenn nicht, rollback und Hinweis, dass die Datengrundlage sich inzwischen geändert hat.

    Sicherlich ist diese aufwändiger, aber erheblich stabiler und sicherer.
    Diese Methode ist i.Ü. in der .Net-Welt bei der Verarbeitung von Datentabellen standard.
    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

  10. #10
    Registriert seit
    Jan 2008
    Beiträge
    159
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Nun, es war eigentlich schon immer so, dass Satzsperren nie erhalten bleiben, wenn eine Usereingabe erwartet wird. Dies führt auch gerne bei anderen Programmen dann zu Problemen.
    Wenn man im Änderungsdienst verhindern will, dass jemand anderes dies parallel tun kann, nutzt man einen allgemeinen BelegLock-Service.
    Dieser erstellt einen logischen Lock in einer Hilfsdatei, die dann immer geprüft wird bevor eine Belegbearbeitung startet. Wenn die Jobinformation mit gespeichert ist, kann man per API, jetzt auch via SQL, prüfen ob der Job noch lebt.

    Die andere Methode ist eben:
    - Satz ohne Sperre lesen und in einer Variablen merken.
    - User führt die Aktion durch.
    - Satz nun mit Sperre lesen und mit gespeicherten Infos vergleichen.
    - Wenn gleich, weiterarbeiten, Updaten und committen.
    - Wenn nicht, rollback und Hinweis, dass die Datengrundlage sich inzwischen geändert hat.

    Sicherlich ist diese aufwändiger, aber erheblich stabiler und sicherer.
    Diese Methode ist i.Ü. in der .Net-Welt bei der Verarbeitung von Datentabellen standard.

    ..gut gut Deine Argumente "Methode/Aufwendigkeit" sind stimmig. Die wenigsten wissen dass es unter auch OS400-native ein Produkt gibt das diese Sperrprobleamtik, primär durch interaktive Programme ausgelöst, automatisch handelt einhergehend mit entsprechenden Ursachenmeldungen. Ein einfaches JA/NEIN Flag macht's möglich.

Similar Threads

  1. Sperre nach dem Kopieren einer Datei vom IFS nach QNTC
    By Rainer Ross in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 17-12-24, 13:54
  2. SQL ROLLBACK im embedded SQL mit SQL Prozeduraufruf
    By harkne in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 28-08-24, 13:04
  3. COMMIT-Stufe *RR eskalierte bis Sperre *EXCLRD.
    By x00 in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 28-05-20, 10:47
  4. Java JDBC Sperre
    By Xanas in forum NEWSboard Java
    Antworten: 11
    Letzter Beitrag: 29-11-10, 12:45
  5. FTP Verzeichnis wechseln trotz Sperre
    By ubas in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 08-11-08, 17:29

Berechtigungen

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