web-dev-qa-db-fra.com

Erreurs ORA-02049 et ORA-02063

Select For UPDATE NOWAIT

est effectué sur une table de 20 procédés en parallèle

L'erreur ci-dessous est renvoyée par les 4 processus sur 20 (16 processus aboutissent)

SQL_UPDATE_ERROR- : SQL update error ORA-02049: timeout: distributed transaction 
waiting for lock ORA-02063

Existe-t-il des paramètres d'Oracle, qui définissent le nombre de connexions à une table à l'aide d'une liaison de base de données?

L'ordre des étapes est sélectionné

2
Avnish Garg

Ce n'est pas nécessairement le nombre de transactions, mais le délai d'attente. Le paramètre distrubuted_lock_timeout est défini sur 60 secondes par défaut. Le but de ce paramètre est d'éviter d'avoir distribué des transactions dans un état d'attente de longue date, tandis que quelque chose d'autre effectue des travaux sur cette rangée; La transaction attendra 60 secondes, puis Oracle le tue.

Vous pouvez modifier ce paramètre (nécessite un redémarrage d'instance) sur ce que vous voulez (en secondes).

2
captjackvane

Eu une solution. Augmentez la valeur des initiateurs et de reconstruire les indices aidés. Tableau accessible via db_link a Initirans = 1, entraînant trop d'ITL attend ~ 200 et la ligne verrouille attend ~ 100000.

Maintenant, la valeur initiatroise est multipliée à 20, entraînant une serrure sans ligne d'attente pour les transactions distribuées/simultanées.

1
Avnish Garg