Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle Sequence nextval е прескачане на число напред-назад

Обзалагам се, че вашата база данни работи с RAC (Real Application Clusters). Ако приемем, че това е така и че създавате последователността с всички настройки по подразбиране, това е очакваното поведение.

Настройката по подразбиране е да се кешират 20 стойности. Всеки възел в RAC клъстера по подразбиране ще има отделен кеш. Ако приемем, че имате клъстер с два възела A и B, първият път nextval се изисква на A, A ще кешира стойности 1-20 и ще върне стойност 1. Ако следващата заявка за nextval се прави на B, B ще кешира стойности 21-40 и ще върне стойност 21. Оттам стойността, която ще получите, ще зависи от възела, на който се случва връзката ви.

По принцип това не би трябвало да е проблем. Последователностите генерират уникални числа. Числата обикновено не трябва да са последователни. Ако наистина имате нужда от стойности да се връщат последователно, защото правите нещо като подреждане по генерираната от последователността стойност, за да определите "първия" или "последния" ред, можете да използвате ORDER клауза, когато създавате последователността, за да принудите стойностите да бъдат върнати по ред. Това обаче има отрицателно въздействие върху производителността в RAC база данни, тъй като увеличава количеството комуникация, която трябва да продължи между възлите, за да синхронизира връщаните стойности. Ако трябва да определите "първия" или "последния" ред, обикновено е по-добре да добавите date или timestamp колона към таблицата и подредете по нея, вместо да приемате, че първичният ключ се генерира последователно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12505, TNS:слушателят в момента не знае за SID, даден в дескриптора на свързване

  2. Може ли някой да обясни какво наистина прави изявлението MERGE в Oracle?

  3. Брой редове на Oracle на таблица по брой (*) спрямо NUM_ROWS от DBA_TABLES

  4. ORA-01017 Съвети за разрешаване на грешки на Oracle

  5. Lighty за Oracle