Обзалагам се, че вашата база данни работи с RAC (Real Application Clusters). Ако приемем, че това е така и че създавате последователността с всички настройки по подразбиране, това е очакваното поведение.
Настройката по подразбиране е да се кешират 20 стойности. Всеки възел в RAC клъстера по подразбиране ще има отделен кеш. Ако приемем, че имате клъстер с два възела A и B, първият път nextval
се изисква на A, A ще кешира стойности 1-20 и ще върне стойност 1. Ако следващата заявка за nextval
се прави на B, B ще кешира стойности 21-40 и ще върне стойност 21. Оттам стойността, която ще получите, ще зависи от възела, на който се случва връзката ви.
По принцип това не би трябвало да е проблем. Последователностите генерират уникални числа. Числата обикновено не трябва да са последователни. Ако наистина имате нужда от стойности да се връщат последователно, защото правите нещо като подреждане по генерираната от последователността стойност, за да определите "първия" или "последния" ред, можете да използвате ORDER
клауза, когато създавате последователността, за да принудите стойностите да бъдат върнати по ред. Това обаче има отрицателно въздействие върху производителността в RAC база данни, тъй като увеличава количеството комуникация, която трябва да продължи между възлите, за да синхронизира връщаните стойности. Ако трябва да определите "първия" или "последния" ред, обикновено е по-добре да добавите date
или timestamp
колона към таблицата и подредете по нея, вместо да приемате, че първичният ключ се генерира последователно.