none
Trigger INSTEAD OF UPDATE et verrou LCK_M_U RRS feed

  • Question

  • J'ai défini un trigger de type instead of update sur une table afin d'empêcher toute modification de celle ci, mais je constate toutefois que cela n'empêche pas SQL Server de poser des verrous de type LCK_M_U lors d'un update de cette table.

     

    Le trigger a été créé comme suit :

    CREATE TRIGGER [dbo].[MON_TRIGGER]

    ON [dbo].[MA_TABLE]

    INSTEAD OF UPDATE

    AS

    BEGIN

    set rowcount 0

    END

     

    Le trigger fonctionne, mais un verrou LCK_M_U reste posé sur MA_TABLE lorsqu'on exécute par exemple l'instruction suivante :

     UDPATE MA_TABLE SET MA_DATE = getdate()

     

    Quelqu'un aurait-il une idée sur la manière d'empêcher la pose de ce verrou ? La seule option que je connaisse est basée sur l'utilisation d'un synonyme, mais les synonymes sont incompatibles avec notre ERP (Siebel)

    Cela me permettrait d'éliminer des problèmes de contention majeurs dûs à des updates inutiles réalisés par Siebel...

     

    Pour information, je suis en SQL Server 2005 SP2 avec les derniers correctifs (SQL Server 9.0.3186).

    Merci à quiconque aura une idée sur le sujet !

    jeudi 13 décembre 2007 13:52

Toutes les réponses


  •  Bonjour,

      Il est impossible de ne pas avoir de verrou sur une instruction update, les verrous permettent de maintenir la cohérence d'une base (Propriété ACID d'une base de donnée en partie la propriété Isolation)

    Je vous conseille de regarder l'aide en particulier la rubrique Table_Hint_Limited associé à UPDATE, même si in fine le Update en tant que tel n'a jamais lieu. Ma réponse va vous paraître triviale mais retiré le droit update aux utilisateurs, rôles, etc ... qui ne doivent pas mettre à jour une table.

    BEA
    mardi 8 janvier 2008 22:22