Jeg vil vædde på, at din database kører RAC (Real Application Clusters). Hvis det antages, at det er tilfældet, og at du opretter sekvensen med alle standardindstillingerne, er det den forventede adfærd.
Standardindstillingen er at cache 20 værdier. Hver node i RAC-klyngen vil som standard have en separat cache. Forudsat at du har en klynge med to noder A og B, første gang en nextval
er anmodet på A, vil A cache værdierne 1-20 og returnere en værdi på 1. Hvis den næste anmodning om en nextval
er lavet på B, vil B cache værdierne 21-40 og returnere en værdi på 21. Derfra vil den værdi, du får, afhænge af den node, som din forbindelse tilfældigvis kører på.
Generelt burde dette ikke være et problem. Sekvenser genererer unikke tal. Tallene behøver generelt ikke at være fortløbende. Hvis du virkelig har brug for, at værdier returneres sekventielt, fordi du gør noget som at bestille efter den sekvensgenererede værdi for at bestemme den "første" eller "sidste" række, kan du bruge ORDER
klausul, når du opretter sekvensen for at tvinge værdier til at blive returneret i rækkefølge. Det har imidlertid en negativ præstationsimplikation i en RAC-database, fordi det øger mængden af kommunikation, der skal foregå mellem noderne for at synkronisere de værdier, der returneres. Hvis du skal bestemme "første" eller "sidste" række, er det generelt bedre at tilføje en date
eller et timestamp
kolonne til tabellen og sorter efter det i stedet for at antage, at den primære nøgle genereres sekventielt.