Wie kann ich eine Sequence sperren?
- Dieses Thema hat 2 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 17 Jahre, 9 Monaten von
Anonym.
-
AuthorPosts
-
23. Dezember 2005 um 13:08 Uhr #2641
AnonymInaktivHallo,
folgendes Problem: In eine Sequence soll ein ‚Loch‘ in einer vorgegebenen Größe geschlagen werden. Der Anfangswert des Lochs soll dabei ausgegeben werden. Alles natürlich parallel zum laufenden Betrieb.
Beispiel: Eine Sequence steht auf dem Wert 120.000, das Loch soll 50.000 groß sein, d. h. die Sequence muss dann auf den Wert 170.000 gealtert werden (Restart).
Wo das Loch ensteht ist egal, es muss nur 50.000 Werte gross sein.
Problem: Wie kann man sicherstellen, das nach dem Lesen der Sequence keine Änderung mehr stattfindet? Die erste freie Nr. muss dann ausgegeben werden, es soll zu keinen Doppelbelegungen kommen können.Ich habe versucht den letzten vergebenen Wert aus dem Catalog (SYSSEQUENCES) mit Iso RS zu lesen damit der Share-Lock stehen bleibt. Danach habe ich einen Delay (PL/I-Wait) von mehrern Minuten eingebaut. Im Monitor waren die Share-Locks auch einwandfrei zu sehen, aber leider liess sich die Sequence mit ’next value for‘ problemlos hochzählen – trotz des Share-Locks auf dem DB2-Catalog.
Hat jemand eine Idee?
Frohes Fest, Rolf
23. Dezember 2005 um 13:32 Uhr #3059
AnonymInaktivGanz spontan würde ich sagen mit einem
ALTER SEQUENCE xxx INCREMENT BY 50000 ;
GET NEXT VALUE FOR xxxx ;
ALTER SEQUENCE xxx INCREMENT BY 1 ;sollte sowas möglich sein.
Hab leider kein V8-System, drum kann ichs nicht ausprobieren.
ggf. muss NOCACHE gesetzt sein.Wenn CACHE nn gesetzt ist, können u.U. auch Werte vergeben werden, ohne dass die Katalog-Tabelle gelesen werden muss. Könnte ein Grund sein, warum Dein RS-Lock nicht zieht..
27. Dezember 2005 um 6:54 Uhr #3356
AnonymInaktivHallo Ulrich,
interessante Idee – werd‘ mal drüber nachdenken. Eigenttlich wollte ich den next Value for umgehen, eben wg. der Data-Sharing-Cache-Geschichte, deshalb der Zugriff auf den Catalog (in der SYSSEQUENCES steht immer der max. vergebene Wert über alle DS-Member).
Vermutlich ist eine Sequence überhaupt nicht am Locking beteiligt, sie wird ja auch nicht rollbackt, aber bei deiner Lösung gibt es zumindest immer ein ‚Loch‘ (evtl. auch mehrere, falls mehrere next-values-for zwischen den beiden Alters laufen).Vielen Dank!
Rolf
-
AuthorPosts
You must be logged in to reply to this topic.