|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 32 ![]() |
Bonjour,
J'essaie d'appeler une procédure stockée présente sur un serveur SQL 2008 (Serveur_A) depuis un autre serveur SQL 2008 (Serveur_B), mais SQL Server me retourne une erreur : Code :
exec Serveur_A.MaBDD.MaTable param1, param2, ... Citation:
me retourne : Citation:
Merci et bonne journée |
||
|
|
00
|
|
|
#2 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 32 ![]() |
J'ai réussi à corriger l'erreur en passant par un nouveau linkedserver :
Code :
Code :
exec sp_serveroption serveur_A_LS, 'rpc', true
Citation:
|
|||
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Un trigger encapsule une transaction. Vous devez donc démarrer la transaction en mode DISTRIBUTED et active le service DTC sur l'ensemble des serveurs afin de faire du commit à deux phases.
Personnellement je ne ferais jamais d'appel de procédure distante dans un trigger sauf si vous voulez sciemment pourrir les performances de votre application ! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#4 | |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 32 ![]() |
Merci pour ta réponse, ca marche niquel maintenant
!Qu'est ce que tu veux dire par Citation:
Le déclencheur serait activé environ 10 fois par jour, ca risque de tout faire planter sur les 2 serveurs ? |
|
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Pour les performances c'est catastrophique car dans une transaction il y a maintient des verrous sur les tables. Hors le code dans un trigger est à l'intérieur de la transactions implicite (INSERT, UPDATE ou DELETE)
Par conséquent vous allez allonger les temps de verrouillage par les allers et retours entre vos deux serveurs... Et là c'est généralement multiplier par 1000 la durée de la transaction, qui bloque tous les autres utilisateurs. Un peu comme si vous voulez faire manœuvrer une paquebot à un carrefour prévu pour des smart ! Bref, il faut éviter les triggers et dans le cas ou il n'y a pas d'autres solution (ce qui est rare) il faut en minimiser la durée le plus possible. Or votre solution va à l'inverse.... Pourquoi ne pas faire cela directement dans une procédure stockée ? A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 32 ![]() |
Ah ouais en effet c'est moche.
Du coup la solution est de mettre cette proc stock sur le serveur du déclencheur pour qu'il n'y ait pas d'appel distant dans celui-ci. De toute façon, l'action de la proc stock n'est pas énorme, elle est exécutée rapidement dans ce cas là. Bref, merci pour ton aide, je mets le sujet en résolu Ciao |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com