In der H2-Datenbank wird das Feld auto_increment um 32 erhöht.

8

Ich habe diese einfache Tabelle (nur für den Test):

%Vor%

Dann führe ich folgende Anfragen aus:

%Vor%

In dieser Phase läuft alles gut, dann schließe ich die H2-Konsole und öffne sie erneut und führe diese Anfrage erneut aus:

%Vor%

Schließlich sind hier alle Ergebnisse:

Ich weiß nicht, wie ich dieses Problem lösen soll, wenn es ein echtes Problem ist ... ausstehende Antwort des Autors ...

    
Marwen Trabelsi 25.07.2012, 16:01
quelle

2 Antworten

11

Die Datenbank verwendet einen Cache mit 32 Einträgen für Sequenzen , und auto-increment wird intern eine Sequenz implementiert. Wenn das System abstürzt, ohne die Datenbank zu schließen, sind höchstens viele Zahlen verloren. Dies ähnelt der Funktionsweise von Sequenzen in anderen Datenbanken. Es ist nicht garantiert, dass in solchen Fällen Sequenzwerte ohne Lücken erzeugt werden.

Also, hast du wirklich die Datenbank geschlossen? Sie sollten - es ist nicht technisch ein Problem, wenn Sie nicht, aber das Schließen der Datenbank wird sicherstellen, dass solche seltsamen Dinge nicht auftreten. Ich kann das Problem nicht reproduzieren, wenn ich normalerweise die Datenbank schließe (stoppe das H2 Console Tool). Wenn Sie alle Verbindungen schließen, wird die Datenbank geschlossen und die Datenbank geschlossen, wenn die Anwendung normal gestoppt wird (mit einem Shutdown-Hook).

Was ist übrigens Ihre genaue Datenbank-URL? Es scheint, dass Sie jdbc:h2:tcp://... verwenden, aber ich kann den Rest der URL nicht sehen.

    
Thomas Mueller 25.07.2012, 18:05
quelle
0

Schließen Sie das Terminal nicht. Terminal ist der Elternprozess von h2-tcp-server. Sie sind nicht getrennt. Wenn Sie das Terminal schließen, schließt der Prozess alle untergeordneten Prozesse, was bedeutet, dass der Server heruntergefahren wird

    
Timur Milovanov 05.05.2013 13:41
quelle

Tags und Links