Seite 1 von 1

Verwendung von rdb$db_key

Verfasst: Fr 8. Apr 2022, 11:00
von zappa2
In einer alten Bestandsdatenbank habe ich teilweise 5 Felder (davon 3 String-Felder!) als PrimaryKeys.

Das Datenmodell würde ich als ziemlich fragwürdig bezeichnen, soll jetzt aber nicht weiter interessieren.

Im Rahmen der Programmierung habe ich so einige for-select-Durchläufe, bei denen ich in Subroutinen diverse Updates auf diese Datensätze ausführe, und zwar auch auf Datenfelder, die Bestandteil des PK sind.

Soviel ich weiß, ist doch innerhalb einer Session (Connection) rdb$db_key in jeder Tabelle eindeutig. Allerdings habe ich zu meinem Erschrecken festgestellt, dass rdb$db_key nach einem Update nicht mehr den gleichen Inhalt hat.

Wo liegt hier mein Denkfehler?

Ist rdb$db_key doch nicht eindeutig innerhalb einer aktiven Connection oder wird er dynamisch in Abhängigkeit des PK geändert? So jedenfalls ist er für mich nicht zu gebrauchen.

Nachtrag: Ich will wegen der Handlichkeit rdb$db_key als Pseudo-PK nutzen, um nicht 5 Felder in die Subroutinen übergeben zu müssen.

Re: Verwendung von rdb$db_key

Verfasst: Fr 8. Apr 2022, 11:43
von martin.koeditz
Der rdb$db_key ist in jedem Falle eindeutig innerhalb einer Transaktion. Dies hat etwas mit der Isolierung gegenüber anderen Transaktionen zu tun.

Datenbankintern wird durch den rdb$db_key die Adresse des Datensatzes gekennzeichnet. Der Primärschlüssel liegt hingegen im Speicher (Datenbank-Seite) und verweist auf den passenden rdb$db_key. Aus diesem Grunde ist die direkte Ansprache mittels rdb$db_key immer schneller als über einen Index.

Durch die Manipulation wird eine neue Version (rdb$record_version) des Datensatzes erstellt. Die Adresse sollte beim Update aber erhalten bleiben. Dies gilt jedoch nur innerhalb der Transaktion. Danach kann sich diese durch äußere Einflüsse jederzeit ändern.

Gruß
Martin

Re: Verwendung von rdb$db_key

Verfasst: Do 21. Apr 2022, 11:26
von zappa2
Besten Dank für die Ausführungen.
Aber wie bereits erwähnt, gilt der rdb$db_key nach einem update innerhalb einer SP nicht mehr. Also definitiv gleiche Transaction.

Re: Verwendung von rdb$db_key

Verfasst: Fr 22. Apr 2022, 11:41
von bfuerchau
Nur mal ne Frage: Bist du sicher dass du eine Transaktion explizit startest oder verwendest du ggf. Autocommit?
Verwendet die SP ggf. eine eigene Transaktion?