-
SQL UPDATE und COMMIT im SQLRPGLE
Hallo zusammen,
ich brauche mal wieder Hilfe.
Ich führe im SQLRPGLE SQL-updates auf Dateien aus.
Wenn ich jetzt aber im RPG einen COMMIT mache, wandelt er mir das Programm nicht um weil er sagt es gibt keine Dateien die mit COMMIT definiert sind.
Da es aber mehrere UPDATES sind möchte ich erst wenn alle UPDATES durch sind die mit COMMIT fest schreiben.
Was muss ich machen?
Viele Grüße harkne
-
Hat sich erledigt, ich mach den COMMIT im aufrufenden CL.
-
Warum verwendest Du nicht den SQL Commit?
-
Wird der SET OPTION COMMIT=*CHG bzw. SET OPTION COMMIT=*NONE bei der Umwandlung umgesetzt?
Ich wollte das jetzt parameterabhängig machen, da der Compiler diese Anweisungen aussternt kann das ja nicht funktionieren.
Habe ich eine andere Möglichkeit?
-
... gibt es irgendeinen vernünftigen Grund updates per SQL ohne commit zu machen? Ich kenne keinen und etliche, dass SQL update ohne commit ein übler Kunstfehler ist.
D*B
-
Naja jetzt komm aber. Ich mach doch einen COMMIT nur dann wenn ich sicher gehen will dass alles gemeinsam upgedated ist. Ich muss doch nicht für 10 Mio Sätze alles offen halten wenn es nicht wichtig ist ob er zwischendurch abbricht oder nicht.
In dem Programm hier werden 1-x SQLs aufgerufen. Der der das Programm aufruft entscheidet ob er den COMMIT braucht oder nicht. Die SQLs die ausgeführt werden sind ohne Variablen und liegen in einer Tabelle. Da dieses dann von verschiedenen Programmen aufgerufen wird, wird dort entschieden ob es notwendig ist, das alle unter COMMIT laufen oder nicht.
Ich persönlich verwende fast nie einen COMMIT, es sei denn ich brauche ihn wirklich wenn Abhängigkeiten vorhanden sind.
Ich wollte jetzt eigentlich nur wissen ob es eine andere Möglichkeit gibt dies variabel zu gestalten.
-
Nun ja, 10 Mio Locks gehen aber ganz schön auf die Performance.
Das wird wohl kein Tagesjob sein sonderen eher am arbeitsberuhigtem WE.
Übrigens: Transaktionen sind Konzepte die i.d.R. keine Millionen von Updates/Insert/Deletes umfassen.
-
... commit ist nicht gedacht für Bulk updates von 10 Mio. Sätzen, über commit werden Satzsperren gesteuert, um Transaktionen abzusichern. Bedenken muss man, dass lesen und geändert fortschreiben auch schon eine Transaktion ist!
Für Bulk updates ist es effektiver sich wiederaufsetzpunkte zu setzen, etwa per Timestamp oder Änderungssignaturen.
D*B
-
Alles gut soweit. Gibt es eine Möglichkeit per Parameter im Programm zu sagen, die UPDATES laufen unter Commit-Steuerung oder sie laufen nicht unter Commit-Steuerung? Oder muss ich jetzt tatsächlich 2 verschiedene Programme aufrufen?
-
Ob die Updates unter Commit laufen, wird auf Modulebene per Compile-Option bestimmt.
Wenn nicht *NONE angegebene ist, muss ein STRCMTCTL (macht RPG eigentlich automatsch) aufgesetzt werden.
Wird *NONE definiert, wird jeder SQL implizit mit "with nc" ausgeführt, da du ja entschieden hast, an der Transaktion vorbei zu arbeiten.
Da du SQL's je inzwischen auch per CLLE mit RUNSQL ausführen kannst, wäre dies auf dieser Ebene angebbar, da die Commitsteuerung dem Befehl mitgegeben wird.
-
Ich habe gerade was von Birgitta gelesen
[COLOR=rgba(0, 0, 0, 0.87)] If you compile your program by specifying COMMIT *CHG all files that[/COLOR]
[COLOR=rgba(0, 0, 0, 0.87)] are changed by SQL UPDATE, INSERT or DELETE statements must be[/COLOR]
[COLOR=rgba(0, 0, 0, 0.87)] journaled.[/COLOR]
[COLOR=rgba(0, 0, 0, 0.87)] If you have to manipulate data with SQL, but don't want or can[/COLOR]
[COLOR=rgba(0, 0, 0, 0.87)] register the file in the journal, you can add WITH NC to the UPDATE,[/COLOR]
[COLOR=rgba(0, 0, 0, 0.87)] INSERT or DELETE statement. If a ROLLBACK is performed these[/COLOR]
[COLOR=rgba(0, 0, 0, 0.87)] statements are not rolled back.[/COLOR]
Wenn ich das mit deinem (Fuerchau) vergleiche, dann könnte ich das lösen wenn ich *CHG angebe und WITH NC an die SQLs dran hänge wenn es ohne COMMIT laufen soll. Stimmt das so?
-
Zitat von harkne
Alles gut soweit. Gibt es eine Möglichkeit per Parameter im Programm zu sagen, die UPDATES laufen unter Commit-Steuerung oder sie laufen nicht unter Commit-Steuerung? Oder muss ich jetzt tatsächlich 2 verschiedene Programme aufrufen?
... das kann man im laufenden Programm mit set transaction isolation einstellen (zurücksetzen nicht vergessen). Als DB2 Erweiterung kann man bei jedem Statement eine isolation clause angeben. Die erste Variante ist näher am Standard. Gewandelt wird dann in jedem Fall mit commit, was ohnehin der Unterlassungswert ist und an dem man tunlichst nicht rumschrauben soll (was irgendwelche Dilettanten per chgcmddft gerne tun).
D*Bl
Similar Threads
-
By mk in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 09-03-17, 13:09
-
By HEBORA in forum NEWSboard Programmierung
Antworten: 13
Letzter Beitrag: 18-10-15, 20:00
-
By mk in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 23-02-15, 15:57
-
By Willi1 in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 02-05-02, 22:54
-
By lorenzen in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 06-02-01, 10:03
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