Ошибка ORA-08177: can't serialize access for this transaction

Причины возникновения ошибки:

  1. ORA-08177: can't serialize access for this transaction
  2.  

Возникает при установленном уровне транзакции «serializable»

  1. alter session set isolation_level=serializable;
  2.  

В Oracle DB по умолчанию стоит уровень изолированности транзакций «READ COMMITTED». Для 99% процентов случаев его хватает. Поэтому для устранения проблемы надо вернуть уровень по умолчанию.

  1. alter session set isolation_level=READ COMMITTED;
  2.  

Ниже код с помощью, которого можно воспроизвести ошибку

  1. -- устанавливаем уровень изолированности транзакции "SERIALIZABLE"
  2. COMMIT;
  3. ALTER SESSION SET ISOLATION_LEVEL=SERIALIZABLE; <p>-- создаем тестовую таблицу
  4. CREATE TABLE TRAN_TEST (N) #b1b100;">AS
  5. SELECT #cc66cc;">1 FROM DUAL;</p><p>CREATE OR REPLACE FUNCTION TEST_IL
  6. #b1b100;">RETURN NUMBER IS
  7. E_CANT_SERIALIZE EXCEPTION;
  8. PRAGMA EXCEPTION_INIT(E_CANT_SERIALIZE, -#cc66cc;">8177);</p><p> PROCEDURE DO_UPDATE IS PRAGMA AUTONOMOUS_TRANSACTION;
  9. BEGIN
  10. UPDATE TRAN_TEST SET N=N;
  11. COMMIT;
  12. END;
  13.  
  14. BEGIN
  15. DO_UPDATE;
  16. UPDATE TRAN_TEST
  17. SET N=N;
  18. #b1b100;">RETURN #cc66cc;">0;
  19. EXCEPTION WHEN E_CANT_SERIALIZE THEN #b1b100;">RETURN #cc66cc;">1;
  20. END TEST_IL;
  21. /</p><p>DECLARE
  22. L_N NUMBER;
  23. BEGIN
  24. L_N:=TEST_IL;
  25. DBMS_OUTPUT.PUT_LINE('IN SERIALIZABLE: '||L_N);
  26. END;</p><p>-- возвращаем уровень изолированности транзакции по умолчанию "READ COMMITTED"
  27. COMMIT;
  28. ALTER SESSION SET ISOLATION_LEVEL=READ COMMITTED;
  29. </p>
Источники
http://oracle-inf.narod.ru/transac.html https://oracle-patches.com/oracle/begin/3022-%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B8-%D0%B8%D0%B7%D0%BE%D0%BB%D1%8F%D1%86%D0%B8%D0%B8-%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B9-oracle-%D0%B8-%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82-iso https://oracle-patches.com/oracle/prof/3200-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B8-%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC-%D0%BE%D1%82%D0%BC%D0%B5%D0%BD%D1%8B-undo-%D0%B2-%D0%B1%D0%B0%D0%B7%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-oracle https://www.sql.ru/forum/310620/isolation-level
14:05
5.47K
Нет комментариев. Ваш будет первым!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.