sql >> Databasteknik >  >> RDS >> Oracle

Oracle Sequence nextval hoppar nummer fram och tillbaka

Jag kommer att satsa på att din databas kör RAC (Real Application Clusters). Förutsatt att så är fallet och att du skapar sekvensen med alla standardinställningar, är det det förväntade beteendet.

Standardinställningen är att cache 20 värden. Varje nod i RAC-klustret kommer som standard att ha en separat cache. Förutsatt att du har ett kluster med två noder A och B, första gången en nextval begärs på A, cachelagrar A värdena 1-20 och returnerar värdet 1. Om nästa begäran om en nextval görs på B, cachelagrar B värdena 21-40 och returnerar värdet 21. Därifrån kommer värdet du får att bero på noden som din anslutning råkar köra på.

Generellt sett borde detta inte vara ett problem. Sekvenser genererar unika nummer. Siffrorna behöver i allmänhet inte vara konsekutiva. Om du verkligen behöver att värden ska returneras sekventiellt eftersom du gör något som att sortera efter det sekvensgenererade värdet för att bestämma den "första" eller "sista" raden, kan du använda ORDER när du skapar sekvensen för att tvinga värden att returneras i ordning. Det har dock en negativ prestandaimplikation i en RAC-databas, eftersom det ökar mängden kommunikation som måste pågå mellan noderna för att synkronisera de värden som returneras. Om du behöver bestämma den "första" eller "sista" raden är det generellt sett bättre att lägga till ett date eller en timestamp kolumn till tabellen och ordna efter det istället för att anta att primärnyckeln genereras sekventiellt.



  1. SQL-serverlogg, leverans och katastrofåterställning, installation och konfiguration -3

  2. Hur man konverterar ett datum-/tidsvärde till en sträng i SQL Server med CONVERT()

  3. MySQL Cast som Boolean

  4. SQL Hämta alla poster äldre än 30 dagar