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

Разбиране на поведението на ORA_ROWSCN в Oracle

По подразбиране, ORA_ROWSCN се съхранява на ниво блок, а не на ниво ред. Съхранява се само на ниво ред, ако таблицата първоначално е изградена с ROWDEPENDENCIES активиран. Ако приемем, че можете да поберете много редове от вашата таблица в един блок и че не използвате APPEND намек за вмъкване на новите данни над съществуващия знак за висока вода на таблицата, вероятно вмъквате нови данни в блокове, които вече имат някои съществуващи данни в тях. По подразбиране това ще промени ORA_ROWSCN на всеки ред в блока, което кара вашата заявка да брои повече редове, отколкото са били вмъкнати в действителност.

От ORA_ROWSCN гарантирано е само горна граница за последния път, когато е имало DML на ред, би било много по-често да се определя колко реда са били вмъкнати днес чрез добавяне на CREATE_DATE колона към таблицата, която по подразбиране е SYSDATE или да разчитате на SQL%ROWCOUNT след вашия INSERT стартира (ако приемем, разбира се, че използвате един INSERT оператор за вмъкване на всички редове).

Като цяло, използвайки ORA_ROWSCN и SCN_TO_TIMESTAMP функция ще бъде проблематичен начин за идентифициране кога е вмъкнат ред, дори ако таблицата е изградена с ROWDEPENDENCIES . ORA_ROWSCN връща Oracle SCN, който е номер на системна промяна. Това е уникален идентификатор за конкретна промяна (т.е. транзакция). Като такава, няма пряка връзка между SCN и време - моята база данни може да генерира SCN милион пъти по-бързо от вашата и моят SCN 1 може да е с години различен от вашия SCN 1. Фоновият процес на Oracle SMON поддържа таблица, която картографира SCN стойности към приблизителни времеви клейма, но поддържа тези данни само за ограничен период от време-- в противен случай вашата база данни ще завърши с многомилиардна таблица с редове, която просто съхранява SCN към времеви клейма. Ако редът е вмъкнат преди повече от, да речем, седмица (и точното ограничение зависи от базата данни и версията на базата данни), SCN_TO_TIMESTAMP няма да може да преобразува SCN в клеймо за време и ще върне грешка.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Първи стъпки с Oracle LiveSQL

  2. Логически изглед на модела на данни в R12.2

  3. Стартирайте SCRIPT от PL/SQL блок

  4. Променете текста на Oracle SQL заявка преди изпращане

  5. Пример за израз на Oracle FOR LOOP SELECT