[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Nein kann man nicht.
    Einzig und allein die Anwendung entscheidet über das Journal.
    Sonst könnte ich ja bei jeder Anwendung das Journal einfach abstellen und die Fehler wären bereits produziert (Commit wäre ja nicht so schlimm, aber ROLLBACK würd nicht mehr gehen und das wäre ganz schlimm).

    Solange du deinem COBOL-Programm nicht beibringen kannst, ohne Commit zu arbeiten, kannst du das Journal nicht abstellen.

    Wende dich an den Hersteller des COBOL-Compilers bzw. SQL-Precompilers.
    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

  2. #2
    Registriert seit
    Jul 2004
    Beiträge
    50
    Zitat Zitat von Fuerchau
    Nein kann man nicht.
    Einzig und allein die Anwendung entscheidet über das Journal.
    Sonst könnte ich ja bei jeder Anwendung das Journal einfach abstellen und die Fehler wären bereits produziert (Commit wäre ja nicht so schlimm, aber ROLLBACK würd nicht mehr gehen und das wäre ganz schlimm).

    Solange du deinem COBOL-Programm nicht beibringen kannst, ohne Commit zu arbeiten, kannst du das Journal nicht abstellen.

    Wende dich an den Hersteller des COBOL-Compilers bzw. SQL-Precompilers.
    Ok, die Quelle des Übels ist somit ganz klar eingekreist. Danke!
    Mal sehen was der Tool-Hersteller sagt

    Gruß
    Neptun

  3. #3
    Registriert seit
    Jul 2004
    Beiträge
    50
    Hallo!

    Der SQL-Befehl lautet
    'SET TRANSACTION ISOLATION LEVEL NO COMMIT'

    So weit so gut. Wenn ich im ODBCTE32.EXE einen anderen Level angebe, kann ich grundsätzlich nicht in die AS/400-Tabellen schreiben (wenn die Datei nicht im Journal aufgezeichnet wird).

    Von einer IBM-Seite:

    SET TRANSACTION---------------------------------------------->

    (1)
    >----ISOLATION LEVEL--+-NO COMMIT--------------------------+---><
    | (2) |
    +-READ UNCOMMITTED , READ WRITE------+
    | (3) |
    +-READ COMMITTED---------------------+
    | (4) |
    +-REPEATABLE READ--------------------+
    | (5) |
    '-SERIALIZABLE-----------------------'


    Wenn man nun SQL_TXN_ISOLATION per ODBC-Treiber setzen möchte, fehlt aber die hier von IBM aufgeführte erste Option "NO COMMIT" !!!
    Wie kann ich diese Option über ODBC setzen? Oder anders gefragt: Welcher ODBC-Befehl entspricht 'SET TRANSACTION ISOLATION LEVEL NO COMMIT' ?


    Gruß
    Neptun

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Deine SQL-Runtime unterstützt das anscheinend nicht !
    Da du embedded SQL verwendest, fängt deine SQL-Schicht den INSERT wohl ab, bevor er zum ODBC-Treiber kommt. Ggf. wird ein AUTO-COMMIT durchgeführt, der ja auch nicht geht.
    Schalte den Auto-Commit mittels SQL-Option/Compiler (nicht im ODBC) zusätzlich ab.

    Verwende ich native ODBC (über ADO/DAO/RDO/CLI) kann ich mittels aktueller ODBC-Commitstufe *NONE alles schreiben/löschen was ich darf.

    Ich kann dir da leider nur raten auf eine andere Schnittstelle umzustellen (CLI oder VB/C++ und ADO) oder mit Journaling zu arbeiten.
    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

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928

    With NC

    Hallo,

    was ist, wenn Du Deinen SQL-Statement WITH NC (NC = No Commit) hinzufügst?

    Also etwa so:
    PHP-Code:
    Insert into MySchema.MyTable
       values
    (.....)
       
    With NC 
    Vielleicht hilfts ja!

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Jul 2004
    Beiträge
    50
    Zitat Zitat von B.Hauser
    Hallo,

    was ist, wenn Du Deinen SQL-Statement WITH NC (NC = No Commit) hinzufügst?

    Also etwa so:
    PHP-Code:
    Insert into MySchema.MyTable
    values
    (.....)
    With NC 
    Vielleicht hilfts ja!

    Birgitta
    @B. Hauser
    Leider wird die SQL-Syntax für Befehle wie den INSERT komplett vom Tool generiert ... Jetzt bitte nicht schreien "Das ist aber sicher nicht optimal" oder so ... das wissen wir
    Aber so ist momentan leider Stand der Dinge. Ich kann zusätzlich SQL-Befehle an die AS/400 schicken, welche kein Ergebnis liefern, also z.B. kann ich keinen SELECT machen (ist eine undokumentierte Funktion, durch Zufall herausgefunden). Theoretisch könnte ich auch den INSERT etc. darüber laufen lassen, aber dieser Ansatz (könnte man wohl als Embedded SQL bezeichnen) ist momentan erstmal nicht gewollt.

    Trotzdem danke für den Tip, kann vielleicht mal nützlich sein


    @Fuerchau
    Tja, ich warte noch auf Antwort vom Hersteller. Ich wäre wirklich verwundert wenn die das nicht bedacht hätten...


    Gruß
    Neptun

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    warum haben eigentlich im AS400 Umfeld so viele Leute was gegen Commit - das ist Stand der Technik und wer es nicht einsetzt, riskiert unnötig (juristisch: grob fahrlässig!) inkonsistente Daten.
    Dass das Tool die SQL Statements generiert ist doch völlig in Ordnung, das verhindert eher Unfug.

    Zitat Zitat von Neptun
    @B. Hauser
    Leider wird die SQL-Syntax für Befehle wie den INSERT komplett vom Tool generiert ... Jetzt bitte nicht schreien "Das ist aber sicher nicht optimal" oder so ... das wissen wir
    Aber so ist momentan leider Stand der Dinge. Ich kann zusätzlich SQL-Befehle an die AS/400 schicken, welche kein Ergebnis liefern,
    Neptun
    Das senden von SQL Anweisungen ohne Rückgabe reicht doch völlig:
    wen die Transaktion erfolgreich war, schickt man ein Commit hinterher, war es nix, dann eben ein Rollback.
    Wenn man nun tatsächlich den Unfug bevorzugt Commit abzuschalten, dann sendet man halt einmal zu Beginn "SET TRANSACTION ISOLATION LEVEL *NONE" und ab dann kann die Anwendung auch kaputte Transaktionen permanet in die Datenbank schreiben: welchen Sinn das allerdings haben soll, entzieht sich meiner Kenntnis!!!

    mfg

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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Für neue Anwendungen ist das ja auch in Ordnung. Leider muss man manchmal Client-Programme auf existierenden ERP-Datenbanken entwickeln die häufig nicht journalisiert werden. Und dann steht man halt mit solchen "Tools" etwas im Regen.
    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

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    @Baldur: ich kann da keinen Regen erkennen. Es stellt überhaupt kein Problem dar eine Datenbank einer vorhandenen Anwendung zu journalisieren (wer hier an Platte spart, kann nicht wirklich rechnen). Ich bin zu meinen Zeiten als (Teil)Verantwortlicher noch einen Schritt weiter gegangen und habe grundsätzlich alles journalisiert, obwohl keine einzige Anwendung Commit verwendet hat - alleine die zusätzlichen Möglichkeiten bei Fehleranalyse lassen das sinnvoll erscheinen.

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau
    Für neue Anwendungen ist das ja auch in Ordnung. Leider muss man manchmal Client-Programme auf existierenden ERP-Datenbanken entwickeln die häufig nicht journalisiert werden. Und dann steht man halt mit solchen "Tools" etwas im Regen.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Jul 2004
    Beiträge
    50
    Hallo!

    Mir geht es beim Abschalten vom Journaling vor allem um die Performance. Ich denke mal, dass die Zugriffe um einiges zügiger ablaufen ohne Journaling, oder?
    Ich spreche hier von Massenzugriffen, also sehr viele Befehle welche an die Datenbank übergeben werden.
    Wieviel Prozent Performanceeinbuße hat man durch das Journaling, gibt es da Erfahrungswerte?

    Gruß
    Neptun

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Fast gar keine !
    Immerhin ist das Netz, dass diese Insert/Updates durchführt ja langsamer als die AS/400. Selbst 10.000 Transaktionen/Sekunde sind keine Seltenheit, dabei wird durchaus mehr als 1 Datei journalisiert.
    Einzig der Rollback kann dann etwas dauern.
    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

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    it depends on, wie so oft!
    - journalisierung muss pro update sequentiell was schreiben, das kostet (fast) keinen Strom, wenn man dafür einen extra ASP oder ausreichend viele Zugriffsarme hat
    - es kostet wenige Prozent mehr CPU, gerechnet auf die Database Workload
    - jegliches forcierte schreiben wird abgeschaltet (Dateien sind ja jetzt redundante Daten!)
    Summa summarum kommt dabei raus, dass bei gesund dimensionierter Hardware die Unterschiede unter der Messbarkeitsschwelle liegen. Wenn man den Overhead bei Fehlersuche und "Reparatur" dazunimmt, dann wird man schneller!!!
    Bei schwach dimensionierter Hardware, kann allerdings ein Tropfen an zusätzlicher Workload ein Fass zum überlaufen bringen, dann liegt das natürlich (gerade bei heutigen Hardwarepreisen) an sparen am falschen Ende.
    - eine Ausnahme ist mir bekannt: grosse SQL Bulkscripte (ala Update xxx set yyy = 2 * yyy) mit zig Millionen betroffenen Sätzen könnten nach deaktivierung von Journalisierung signifikant schneller laufen.
    - ebenfalls ungünstig sind Riesentransaktionen (Batchjob einmal am Ende Commit) Sperren kosten was und viele Sperren können dann bremsen.
    Wie so oft in der Welt bekommt man nix geschenkt, aber eine Abwägung von Hardwareaufwand und Vorteilen spricht für Journalisierung. Hier bekommt man viel für wenig Aufwand und wenn man diesen denn treibt (sprich: die erforderliche Hardware hat), dann gibt es keinerlein Performance Einbußen.

    mfg

    Dieter Bender
    Zitat Zitat von Neptun
    Hallo!

    Mir geht es beim Abschalten vom Journaling vor allem um die Performance. Ich denke mal, dass die Zugriffe um einiges zügiger ablaufen ohne Journaling, oder?
    Ich spreche hier von Massenzugriffen, also sehr viele Befehle welche an die Datenbank übergeben werden.
    Wieviel Prozent Performanceeinbuße hat man durch das Journaling, gibt es da Erfahrungswerte?

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

Similar Threads

  1. Journaling für alle Tabellen eines Schemas einschalten
    By remo2010 in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 24-11-06, 15:24
  2. SQL-Performance Probleme ODBC
    By berndl in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 13-10-06, 09:28
  3. ODBC update
    By synus in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 06-10-06, 15:38
  4. FTP contra ODBC
    By mama in forum IBM i Hauptforum
    Antworten: 30
    Letzter Beitrag: 27-09-06, 09:31
  5. ODBC Verbindung (User, Password)
    By Hubert in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 12-05-06, 11:52

Berechtigungen

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