sql >> Database teknologi >  >> RDS >> Oracle

Oracle Sequence nextval hopper nummer frem og tilbage

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.



  1. Java JDBC ignorerer setFetchSize?

  2. Opret forbindelse til ekstern postgresql-server på amazon ec2

  3. Rails/Postgresql SQL forskelle m/ datoer

  4. Bruger Oracle EXPAND_SQL_TEXT