IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Problème avec un déclencheur et une procédure sur un serveur lié


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Problème avec un déclencheur et une procédure sur un serveur lié
    Bonjour,

    J'utilise un déclencheur pour mettre à jour un champ d'une table avec les valeurs d'un champ d'une autre table sur un serveur lié.
    (Merci de ne pas me demander pourquoi, je gagnerai du temps )
    Entre 2 serveurs sql 2008, tout fonctionne parfaitement.
    Voici une partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER [MonTrig] ON [dbo].[TableLocal] 
    AFTER UPDATE, INSERT
    AS 
    BEGIN
      declare @code char(50)
      select @code=CODE from "monserveur".Mabase.dbo.TableCode 
        where id_code = 1
      update TableLocal set code = @code where id_code=1
    END
    Cependant, avec un serveur 2000, j'ai l'erreur suivante :
    Serveur : Msg 7391, Niveau 16, État 1, Procédure MonTrig, Ligne 8
    L'opération demandée ne peut pas être effectuée car le fournisseur OLE DB 'SQLOLEDB' n'a pas réussi à démarrer de transaction distribuée.
    [OLE/DB provider returned message: La nouvelle transaction ne peut pas s'inscrire dans le coordinateur de transactions spécifié. ]
    Trace de l'erreur OLE DB [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].
    Si je lance le code précédent en dehors du déclencheur (dans un analyseur de requête par exemple), il fonctionne correctement et la table local est bien mise à jour avec la valeur du champ donc pas de problème de configuration MSDTC ou du serveur lié acceptant les transactions comme j'ai pas le voir sur d'autres discutions.

    Si vous avez une idée ou une solution de contournement, merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    En suivant ce billet, on dirait que votre votre compte) a le droit d'accès au coordinateur de transactions, mais pas le compte de service qui exécute SQL Server. Quel est-il ?

    @++

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    En suivant ce billet, on dirait que votre votre compte) a le droit d'accès au coordinateur de transactions, mais pas le compte de service qui exécute SQL Server. Quel est-il ?

    @++
    Merci pour votre réponse.

    Le DTC est configuré sans authentification avec allow remote client et administration.

    Je rappelle que tout fonctionne bien au niveau des requêtes.
    L'erreur ne se produit que à l'intérieur du déclencheur.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 842
    Points : 52 940
    Points
    52 940
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par conquist Voir le message
    Si je lance le code précédent en dehors du déclencheur (dans un analyseur de requête par exemple), il fonctionne correctement et la table local est bien mise à jour avec la valeur du champ donc pas de problème de configuration MSDTC ou du serveur lié acceptant les transactions comme j'ai pas le voir sur d'autres discutions.
    Quand vous faites ce test, commencez vous le code par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BEGIN DISTRIBUTED TRANSACTION
    explicite ?

    Parce que dans le cas contraire il n'y a pas de transaction.

    En effet, le code d'un trigger est situé dans la transaction implicite engendrée par la commande SQL (INSERT, UPDATE).

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Quand vous faites ce test, commencez vous le code par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BEGIN DISTRIBUTED TRANSACTION
    explicite ?

    Parce que dans le cas contraire il n'y a pas de transaction.

    En effet, le code d'un trigger est situé dans la transaction implicite engendrée par la commande SQL (INSERT, UPDATE).

    A +
    Bonjour,

    J'ai ajouté un BEGIN DISTRIBUTED TRANSACTION ... COMMIT mais toujours le même message.

    Je précise encore une fois que cette erreur ne se produit que sur le serveur sql 2000 et que je n'ai pas la possibilité de migrer ce serveur qui ne m'appartient pas.

  6. #6
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    J'ai rencontré le même genre de pb mais avec des serveurs 2005 & 2008 R2. Dans le sens 2008 -> 2005 tout fonctionnait parfaitement mais pas dans le sens 2005 -> 2008.
    En fait, c'est un bug connu chez Microsoft et il existe des correctifs à mettre en place si tu peux, en tout cas c'était le cas pour 2005...
    Pour ma part, j'ai pu migré ma base 2005 en 2008 donc plus de problème
    Voici ce qui s'est dit dans ma discussion, peut-être que ça pourra vous avancer un peu
    http://www.developpez.net/forums/d13...8-server-2005/

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/10/2011, 10h14
  2. Réponses: 7
    Dernier message: 22/10/2009, 17h43
  3. Problème avec un paramètre d'une procédure
    Par Lucas Panny dans le forum Langage
    Réponses: 1
    Dernier message: 03/10/2009, 15h58
  4. Problème avec l'ajout d'une partition sur une table
    Par marvelromy dans le forum Administration
    Réponses: 1
    Dernier message: 30/06/2008, 08h57
  5. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo