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

Закъснение на Oracle между commit и select

По подразбиране описаното от вас поведение трябва да е невъзможно - промените, направени в ангажирана транзакция, стават достъпни незабавно за всички сесии. Има обаче изключения:

  1. Използвате ли някоя от опциите WRITE в командата COMMIT? Ако не сте, потвърдете стойността на вашия параметър за инициализация COMMIT_WRITE. Ако някой от тях използва "WRITE BATCH" или особено "WRITE BATCH NOWAIT", може да се отворите за проблеми с едновременността. „WRITE BATCH NOWAIT“ обикновено се използва в случаите, когато скоростта на вашите транзакции за запис е от по-голямо значение от възможните проблеми с едновременността. Ако вашият параметър за инициализация използва вариантите "WRITE", можете да го замените на база транзакция, като посочите клаузата IMMEDIATE във вашите комити (вижте COMMIT)

  2. Транзакцията, която се опитва да прочете данните, извиква ли SET TRANSACTION преди да извърши друга транзакция? Използването на SET TRANSACTION за указване на НИВО НА СЕРИАЛИЗАЦИЯ САМО ЧЕТЕНЕ или SERIALIZABLE ще доведе до това, че транзакцията не вижда промени, настъпили от други ангажирани сесии, възникнали след извикването на SET TRANSACTION (вижте SET TRANSACTION)

редактиране:Виждам, че използвате клас DataSource. Не съм запознат с този клас - предполагам, че е ресурс за споделяне на връзка. Разбирам, че текущият ви дизайн на приложението може да не улесни използването на един и същ обект на връзка през целия ви работен поток (стъпките може да са проектирани да работят независимо и не сте изградили съоръжение за предаване на обект за връзка от една стъпка към следващо), но трябва да проверите дали обектите за връзка, които се връщат към обекта DataSource, са "чисти", особено по отношение на отворените транзакции. Възможно е да не извикате SET TRANSACTION във вашия код, но друг потребител на DataSource другаде може да го направи и да върне връзката обратно към източника на данни със сесията все още в режим SERIALIZABLE или САМО ЧЕТЕНЕ. При споделяне на връзки е наложително всички връзки да бъдат върнати, преди да ги предадете на нов потребител.

Ако нямате контрол или видимост към поведението на класа DataSource, може да искате да опитате да изпълните ОТМЕНЯНЕ на новопридобитата връзка, за да сте сигурни, че няма вече установена трайна транзакция.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конвертирам XMLTYPE в VARCHAR в ORACLE?

  2. Oracle Insert чрез Изберете от множество таблици, където една таблица може да няма ред

  3. как да използвате XMLImporter и FndXdfCmp в Oracle EBS

  4. MySQL COALESCE и NULLIF функция

  5. Цел на използване на различни видове PL/SQL колекции в Oracle