Założę się, że w Twojej bazie danych działa RAC (Real Application Clusters). Zakładając, że tak jest i że tworzysz sekwencję ze wszystkimi ustawieniami domyślnymi, jest to oczekiwane zachowanie.
Domyślnym ustawieniem jest buforowanie 20 wartości. Każdy węzeł w klastrze RAC domyślnie będzie miał osobną pamięć podręczną. Zakładając, że masz klaster z dwoma węzłami A i B, za pierwszym razem nextval
jest żądane w A, A buforuje wartości 1-20 i zwraca wartość 1. Jeśli następne żądanie nextval
jest tworzony na B, B zapisze w pamięci podręcznej wartości 21-40 i zwróci wartość 21. Stamtąd otrzymana wartość będzie zależeć od węzła, na którym działa Twoje połączenie.
Generalnie nie powinno to stanowić problemu. Sekwencje generują unikalne liczby. Liczby na ogół nie muszą być kolejne. Jeśli naprawdę potrzebujesz wartości, które mają być zwracane sekwencyjnie, ponieważ robisz coś w rodzaju porządkowania według wartości generowanej przez sekwencję w celu określenia „pierwszego” lub „ostatniego” wiersza, możesz użyć ORDER
klauzula podczas tworzenia sekwencji, aby wymusić zwracanie wartości w kolejności. Ma to jednak negatywny wpływ na wydajność bazy danych RAC, ponieważ zwiększa ilość komunikacji, która musi przebiegać między węzłami, aby zsynchronizować zwracane wartości. Jeśli chcesz określić „pierwszy” lub „ostatni” wiersz, zazwyczaj lepiej jest dodać date
lub timestamp
kolumna do tabeli i uporządkować według tego, zamiast zakładać, że klucz podstawowy jest generowany sekwencyjnie.