sql >> Databáze >  >> RDS >> Oracle

Potřebujete pomoc s pochopením chování příkazu SELECT ... FOR UPDATE způsobujícího uváznutí

Tabulka USER má pravděpodobně mnoho cizích klíčů, které na ni odkazují. Pokud některý z nich není indexován, Oracle uzamkne celou podřízenou tabulku, zatímco odstraní řádek z nadřazené tabulky. Pokud je spuštěno více příkazů současně, a to i pro jiného uživatele, budou uzamčeny stejné podřízené tabulky. Vzhledem k tomu, že pořadí těchto rekurzivních operací nelze řídit, je možné, že více relací uzamkne stejné zdroje v jiném pořadí, což způsobí uváznutí.

Viz tuto sekci Další informace naleznete v příručce Koncepty.

Chcete-li tento problém vyřešit, přidejte indexy do všech neindexovaných cizích klíčů. Pokud jsou názvy sloupců standardní, skript jako tento vám může pomoci najít potenciální kandidáty:

--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. převést znaky utf8mb4 na utf8 v php

  2. PHP:dotaz mysql přeskočen/ignorován po nahrání velkých souborů?

  3. Jak pracovat s PGpoint for Geolocation pomocí PostgreSQL?

  4. SQL Server 2008 – POKUD NEEXISTUJE, INSERT ELSE UPDATE