Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/04/2011, 15h55   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 32
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2010
Messages : 32
Points : 13
Points : 13
Par défaut Appel d'une proc. stockée à partir d'un SQL Server 2008 vers un autre

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, ...
Résultat :
Citation:
Le fournisseur OLE DB "SQLNCLI10" du serveur lié "Serveur_A" a retourné le message "Spécification d'autorisation non valide".
Msg 7399, Niveau 16, État 1, Ligne 1
Le fournisseur OLE DB "SQLNCLI10" du serveur lié "Serveur_A" a rapporté une erreur. Échec de l'authentification.
Msg 7303, Niveau 16, État 1, Ligne 1
Impossible d'initialiser l'objet de la source de données du fournisseur OLE DB "SQLNCLI10" du serveur lié "Serveur_A".
J'ai mis le RPC à true sur chaque base, et les 2 bases sont en 64 Bits et en SP1.
Code :
1
2
 
exec sp_linkedservers
me retourne :

Citation:
Serveur_A | SQLNCLI | SQL Server | Serveur_A | NULL | NULL | NULL
Serveur_B | SQLNCLI | SQL Server | Serveur_B | NULL | NULL | NULL
Bref si quelqu'un voit la source du problème...

Merci et bonne journée
yakiniku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 16h26   #2
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 32
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2010
Messages : 32
Points : 13
Points : 13
J'ai réussi à corriger l'erreur en passant par un nouveau linkedserver :

Code :
1
2
3
4
5
exec sp_addlinkedserver
'serveur_A_LS',
'',
'SQLNCLI10',
'serveur_A'
Code :
exec sp_serveroption serveur_A_LS, 'rpc', true
L'appel à ma procédure stockée directement marche bien, mais quand je fais cet appel dans un déclencheur, j'obtiens cette erreur :
Citation:
Le partenaire du gestionnaire de transactions a désactivé la prise en charge des transactions à distance/par réseau.
yakiniku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 16h37   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 17h37   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 32
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2010
Messages : 32
Points : 13
Points : 13
Merci pour ta réponse, ca marche niquel maintenant !

Qu'est ce que tu veux dire par
Citation:
Envoyé par SQLpro Voir le message
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 !
?

Le déclencheur serait activé environ 10 fois par jour, ca risque de tout faire planter sur les 2 serveurs ?
yakiniku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 19h41   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 10h54   #6
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 32
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2010
Messages : 32
Points : 13
Points : 13
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
yakiniku est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h53.


 
 
 
 
Partenaires

Hébergement Web