Bonjour,
J'ai rencontré récemment un problème de LOCK qui me laisse perplexe:

J'ai un processus d'intégration qui utilise une table de travail:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
TABLE TRAVAIL (NUM_LINE numeric(18, 0) IDENTITY(1,1) NOT NULL
,COD_UTI VARCHAR(10)
,CHAMP1 VARCHAR(25)
,CHAMP2 VARCHAR(25)
...
)
Je précise qu'il n'y a pas d'index sur cette table étant donné que c'est une table 'tampon', donc les données y sont continuellement écrites, mises a jour, supprimées (mais peut etre ai-je tort ?).

Plusieurs processus d'intégration peuvent être lancés en même temps sur la table, chaque processus étant identifié par le champ COD_UTI.

Le processus d'intégration effectue des UPDATE sur la table TRAVAIL, et utilise également des curseurs pour y effectuer des opérations.
Tous les curseurs sont en LOCAL FAST_FORWARD / NOLOCK (sur le select).

Or malgré cela, j'ai des accés concurrents a ma table de travail, bien que chaque processus travaille avec un COD_UTI bien spécifique.
(apperemmebt, SQL SERVER lock toute la table au dela d'un certin nombre d'enregistrement à selectionner ou updater)

J'ai essayé de passer tous les UPDATE en option ROWLOCK, mais ca ne semble pas suffire.

Est ce que je dois créer un index sur la colonne cod_uti pour que la table soit lockée UNIQUEMENT sur le cod_uti d'un process donné ?