Vsadím se, že ve vaší databázi běží RAC (Real Application Clusters). Za předpokladu, že tomu tak je a že vytvoříte sekvenci se všemi výchozími nastaveními, je to očekávané chování.
Výchozí nastavení je uložit do mezipaměti 20 hodnot. Každý uzel v clusteru RAC bude mít ve výchozím nastavení samostatnou mezipaměť. Za předpokladu, že máte cluster se dvěma uzly A a B, poprvé se objeví nextval
je požadován na A, A uloží do mezipaměti hodnoty 1-20 a vrátí hodnotu 1. Pokud další požadavek na nextval
je vytvořen na B, B uloží do mezipaměti hodnoty 21-40 a vrátí hodnotu 21. Odtud bude hodnota, kterou získáte, záviset na uzlu, na kterém vaše připojení náhodou běží.
Obecně by to neměl být problém. Sekvence generují jedinečná čísla. Čísla obecně nemusí být po sobě jdoucí. Pokud opravdu potřebujete, aby se hodnoty vracely postupně, protože provádíte něco jako řazení podle hodnoty vygenerované sekvencí k určení „prvního“ nebo „posledního“ řádku, můžete použít ORDER
klauzule při vytváření posloupnosti, která vynutí vrácení hodnot v pořadí. To má však negativní dopad na výkon v databázi RAC, protože to zvyšuje množství komunikace, která musí probíhat mezi uzly, aby se synchronizovaly vracené hodnoty. Pokud potřebujete určit „první“ nebo „poslední“ řádek, je obecně lepší přidat date
nebo timestamp
sloupec do tabulky a seřaďte podle toho, nikoli za předpokladu, že primární klíč je generován postupně.