-
Hallo,
sollte es nicht reichen wenn du den Datensatz mit for update liest? Und mit Update gibst du dann wieder frei.
Gruß,
Manuel
-
Du kannst im SQL auch das Commit-Level auf *RR setzen.
Dann werden alle Sätze die gelesen werden automatisch gesperrt.
Du musst sie dann halt mit Commit/Rollback wieder freigeben.
-
 Zitat von Andreas_Prouza
Du kannst im SQL auch das Commit-Level auf *RR setzen.
Dann werden alle Sätze die gelesen werden automatisch gesperrt.
Du musst sie dann halt mit Commit/Rollback wieder freigeben.
Das hört sich irgendwie gefährlich an.
Wo müsste ich das denn machen? Ich möchte ja keine globalen Schalter setzen. Wirkt das nur lokal in meinem Programm, das den Daten liest? Was ich gerne hätte, wäre eine Sperrmöglichkeit, die nur von dem gewünschten SQL-Statement genutzt wird. Ich möchte nicht, dass sämtlich anderen SQLs auch irgendetwas sperren.
-
 Zitat von manuel.marcos
Hallo,
sollte es nicht reichen wenn du den Datensatz mit for update liest? Und mit Update gibst du dann wieder frei.
Gruß,
Manuel
Wo kann man das for update denn angeben? Beim declare für einen Cursor?
-
Genau, das commit wäre für das gesamte Programm gültig.
Dann wäre sie Variante vom Manuel besser.
Du kannst einfach beim Deklarieren des Cursors am Ende ein "... for Update" dranhängen.
Dann ist der gelesene Satz gesperrt, bis du entweder ein Update oder ein Close Cursor machst.
-
 Zitat von Andreas_Prouza
Genau, das commit wäre für das gesamte Programm gültig.
Dann wäre sie Variante vom Manuel besser.
Du kannst einfach beim Deklarieren des Cursors am Ende ein "... for Update" dranhängen.
Dann ist der gelesene Satz gesperrt, bis du entweder ein Update oder ein Close Cursor machst.
Vielen Dank schon mal an euch beide. Ich habe das mal ausprobiert. Aber es scheint nicht zu klappen.
Hier mein Code:
Code:
exec sql declare csr1 cursor for select * from bvsadres
where ad_rec_id = 1000000065654 for update;
exec sql open csr1;
dow sqlcod = 0;
um_msgbox('vor fetch');
exec sql fetch next from csr1 into :ADRESSatz;
um_msgbox('nach fetch' + ' Code ' + %char(sqlcod));
if sqlcod <> 0;
leave;
endif;
enddo;
exec sql close csr1;
um_msgbox('nach close');
Wenn ich das Programm laufen lassen und z.B. vor oder nach dem Fetch mit DSPRCDLCK bvsadres die Satzsperren auf der Datei anschaue, werden keine Satzsperren angezeigt.
Muss man vielleicht noch grundsätzlich irgendetwas einstellen, damit das for update wirkt oder sehe ich die Locks mit dem Bordmitteln einfach nicht?
-
Doch, das For Update klappt. Du kannst die auch i.d.R. unter DSPJOB => Sperren => Satzsperren sehen.
Du solltest jedoch Commit=*CHG verwenden, was nur bei Journlisierung klappt.
-
 Zitat von Fuerchau
Doch, das For Update klappt. Du kannst die auch i.d.R. unter DSPJOB => Sperren => Satzsperren sehen.
Du solltest jedoch Commit=*CHG verwenden, was nur bei Journlisierung klappt.
Wir haben alle Tabellen journalisiert. Was heißt denn "Du solltest jedoch Commit=*CHG verwenden" ? Kann ich das im Code angeben oder muss ich dazu Programme mit anderen Optionen kompilieren?
-
 Zitat von dschroeder
Wir haben alle Tabellen journalisiert. Was heißt denn "Du solltest jedoch Commit=*CHG verwenden" ? Kann ich das im Code angeben oder muss ich dazu Programme mit anderen Optionen kompilieren?
... schau dir mal den default von CRTSQLRPGI an (bevor irgendwelche Dilettanten den verändert haben), das ist eine Compile Option.
Vorsicht: *CHG setzt keine Sperre beim lesen, sondern erst beim schreiben.
doppelt Vorsicht: SQL setzt bei höherem Sperrlevel beim lesen eine shrnupd Sperre, die dann beim schreiben eskaliert wird (was zu Deadlocks führen kann), bei dem der spätere (!!!) gewinnt.
dreifach Vorsicht: Sperrelvel serializable setzt eine Sperre auf Dateiebene, was mit Rekord Löffel zu Abbrüchen führt.
D*B
Similar Threads
-
By Lucky662 in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 28-07-22, 08:30
-
By LoCal in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 22-07-05, 10:15
-
By gize in forum NEWSboard Drucker
Antworten: 6
Letzter Beitrag: 22-02-05, 06:48
-
By Miles in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 13-10-03, 19:47
-
By Arbi in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 22-09-01, 10:13
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks