Lademodul check gegen Package im Catalog (warum kein -805 ?)
- Dieses Thema hat 3 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 13 Jahre, 8 Monaten von
Anonym.
-
AuthorPosts
-
25. Januar 2010 um 10:49 Uhr #4072
AnonymInaktivHallo zusammen,
ich brauche mal euren Rat, da ich ein Verhalten auf unserem Rechner nicht verstehe.
Ich habe ein DB2-COBOL-PGM das folgende SQL-Statements enthält:
COMMIT / ROLLBACK / SET :HV = CURRENT SERVERFür das PGM gibt es nur einen Eintrag in SYSIBM.SYSPACKAGE (kein VERSION(AUTO).
Das PGM wurde im COBOL-Bereich erweitert. Die SQL-Statements blieben unverändert. (Neuer Compile + neues DBRM + Bind package).
Warum läuft das alte (und das neue Lademodul), obwohl es nur das neue PACKAGE (basierend auf neuem DBRM) im Catalog gibt?
Die Debugging-Informationen (COBOL) zeigen die ausführung des ROLLBACK-Statements.
Ich hätte gedacht das DB2 den Consistency-Token des Lademoduls zur Ausführung des Rollback gegen den des Package prüft und es dann zu einem -805 SQLCODE kommen muß.
Was habe ich hier nicht verstanden?
Vielen Dank im voraus für eure Unterstützung.
Gruss Klaus
25. Januar 2010 um 12:23 Uhr #4232
AnonymInaktivHallo Klaus,
genau das ist der Effekt von VERSION(AUTO), dass nämlich bei jedem neuen PreCompile ein geändertes Consisteny Token (ein Timestamp) in das Lademodul gestellt wird und deshalb ein BIND mit dem neuen DBRM forciert wird.
Arbeitest Du mit einem Literal statt dem Timestamp, dann passen rein formal Lademodul und DBRM immer zusammen; eventuelle Abweichungen werden erst zur Ausführung festgestellt und führen dann zu einem Abbruch der Verarbeitung.
Deshalb gilt die Empfehlung, immer mit VERSION(AUTO) umzuwandeln und dadurch vielleicht einmal zu viel einen BIND machen zu müssen, dann aber mit einem stabilen Ergebnis.
Tschüß
Christian
25. Januar 2010 um 12:53 Uhr #4349
AnonymInaktivHallo Christian,
danke für deine Antwort.
Wir arbeiten wie gesagt nicht mit VERSION(AUTO) und auch nicht mit einem Literal. Also nur ein Package mit passendem contoken im Package und Lademodul passend zum neuen Lademodul.
Konkrete Frage:
Wird bei einem ROLLBACK der Contoken im Lademodul gegen den im catalog (SYSIBM.SYSPACKAGE) geprüft?
Früher (bis Version 7 glaube ich) gab es gar kein DBRM in diesem Fall (Modul hat nur COMMIT/ROLLBACK da DB2 ja keinen Datenbankzugriff machen muß)!
Kann es sein dass auch heute die Prüfung des Consistency-Tokens (Lademodul gegen Contoken im Catalog) bei einem Rollback-SQL nicht stattfindet?
Gruß Klaus
26. Januar 2010 um 6:32 Uhr #4433
AnonymInaktivWenn ich mir den CompilerOutput bei einem EXEC SQL ROLLBACK anschaue, dann wird das Consistency-Token zumindest ans DB2 übergeben.
allerdings, wenn Dein Programm nur SET :host, COMMIT und ROLLBACK enthält, dann dürfte zum Zeitpunkt Deines Rollbacks keine UOR offen sein ( die beginnt ja erst bei der ersten Modifikation). In diesem Fall wird der Rollback vom DB2 gar nicht ausgeführt ( genausowenig wie ein Commit ), sondern lediglich SQLCODE=0 zurückgegeben.Â
-
AuthorPosts
You must be logged in to reply to this topic.