2017-08-29 1 views
1

Dans mon application vb, j'ai une requête qui met à jour une colonne dans une table. Mais en raison du fait que la propriété pour ce mode de verrouillage de la base de données estDéfinition du mode de verrouillage dans informix à attendre avant d'exécuter la requête

SET LOCK MODE TO NOT WAIT

parfois, lorsque la requête en cours d'exécution avec la mise à jour je reçois des erreurs comme celle-ci:

SQL ERR: EIX000: (-144) ISAM error: key value locked 
EIX000: (-245) Could not position within a file via an index. (informix.table1) 

Ma question est, est-il sûr à exécuter:

1st SET LOCK MODE TO WAIT; 

2nd the update query; 

3rd SET LOCK MODE TO NOT WAIT; 

Ou vous pouvez me pointer vers une autre solution si ce n'est pas sûr

Répondre

2

Il est « sûr » de faire les trois opérations comme l'a suggéré, mais ...

  • Votre application peut bloquer pour une durée indéterminée alors que l'opération fonctionne.
  • Si vous terminez la requête d'une manière ou d'une autre mais que vous ne réinitialisez pas le mode de verrouillage, d'autres parties de votre code risquent d'être bloquées de manière inattendue.

Déterminez si une attente avec délai est appropriée. Chaque thread, s'il y a des threads, devrait avoir un accès exclusif à une connexion pendant la durée des trois opérations.