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

Нуждаете се от помощ за разбиране на поведението на SELECT ... FOR UPDATE, причиняващо блокиране

Таблицата USER вероятно има много външни ключове, отнасящи се до нея. Ако някой от тях не е индексиран, Oracle ще заключи цялата дъщерна таблица, докато изтрива реда от родителската таблица. Ако няколко оператора се изпълняват едновременно, дори за различен потребител, едни и същи дъщерни таблици ще бъдат заключени. Тъй като редът на тези рекурсивни операции не може да се контролира, възможно е множество сесии да заключат едни и същи ресурси в различен ред, причинявайки блокиране.

Вижте този раздел в ръководството за концепции за повече информация.

За да разрешите това, добавете индекси към всички неиндексирани външни ключове. Ако имената на колоните са стандартни, скрипт като този може да ви помогне да намерите потенциални кандидати:

--Find un-indexed foreign keys.
--
--Foreign keys.
select owner, table_name
from dba_constraints
where r_constraint_name = 'USER_ID_PK'
    and r_owner = 'THE_SCHEMA_NAME'
minus
--Tables with an index on the relevant column.
select table_owner, table_name
from dba_ind_columns
where column_name = 'USER_ID';


  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 10g рекурсивна заявка

  2. Как да активирате проследяване в приложения на Oracle r12

  3. Вложените скоби в клаузата FROM валиден ли е синтаксисът на Oracle SQL?

  4. изпрати променлива тип REFCURSOR към Oracle Съхранена процедура от Java

  5. Има ли някакво автоматично ангажиране след изпълнение на съхранени процедури в oracle?