Die Identität eines Datensatzes in einer Tabelle wird durch einen 32-Bit-Integer-Wert dargestellt. Dies erlaubt ca. 2 Milliarden Datensätze pro Tabelle. Obwohl diese Anzahl in der Praxis noch nicht erreicht wurde, ist für die Version 5.6 eine Erweiterung vorgesehen.
Die Vergabe der Rec-ID erfolgt auf Basis eines Zählers, der für jeden neuen Datensatz (RecInsert) inkrementiert wird. Das Löschen von einzelnen Sätzen wirkt sich nicht auf den Zähler aus, Rec-IDs werden normalerweise nicht wiederverwendet. Auch beim Löschen der gesamten Tabelle (RecDeleteAll) bleibt der Zähler erhalten. Lediglich bei einer Diagnose mit Recover wird der Zähler auf den höchsten ermittelten Rec-ID zurückgesetzt, bei einer leeren Tabelle somit auf Null.
Werden regelmäßig große Mengen von Datensätzen eingefügt und gelöscht, kann der maximale Zählerstand erreicht werden, ohne das die Gesamtanzahl der Sätze das Limit erreicht. In diesem Fall können keine weiteren Sätze eingefügt werden.
Für die Version 5.6 ist daher eine Erweiterung der Rec-ID auf 64 Bit vorgesehen, die optional pro Tabelle aktiviert werden kann. Dies kann im laufenden Betrieb erfolgen, ohne das eine Auslagerung der Datensätze oder eine Reorganisation der Schlüssel notwendig ist.
Bei Verwendung dieser Erweiterung muss der Zugriff auf die Rec-ID in der Applikation angepasst werden. Für die 64-Bit-ID ist der Befehl RecInfo64() beziehungsweise die Eigenschaft _WinPropDbRecId64 vorgesehen.
3 Antworten
Danke für die Info. Sehr gut.
@Jens
Die Aktivierung der 64-Bit-ID wird in der Datenstruktur festgelegt und kann per Datenbankupdate übertragen werden. Die Befehle und Eigenschaften für 64-Bit-IDs funktionieren natürlich auch bei 32-Bit-IDs.
Hallo Andrej,
wird es möglich sein die Umstellung der Datensatz-Id von 32- auf 64-Bit prozedural durchzuführen?
Wie kann prozedural festgestellt werden, welche Datensatz-Id verwendet wird, damit auch die richtigen Befehle/Eigenschaften angesprochen werden können?
Grüße
Jens