Vous recevez un message d’erreur « erreur 18482 » lorsque vous essayez de passer un appel de procédure distante (RPC) d’un serveur à un autre dans SQL Server


Symptômes


Lors d’une tentative d’appel de procédure distante (RPC) d’un serveur à un autre (par exemple, en exécutant une procédure stockée sur un ordinateur distant avec une instruction telle que EXEC SERV_REMOTE. pubs.. byroyalty), vous pouvez recevoir le message d’erreur suivant :
Erreur 18482 : impossible de se connecter au site « 0 », car «» n’est pas défini comme serveur distant sur le site.
Remarque Si vous utilisez Microsoft SQL Server 2005, le message d’erreur suivant peut s’afficher :
Erreur 18482 : il est impossible de se connecter au serveur <servername>, car <ServerName> n’est pas défini comme serveur distant. Vérifiez que vous avez spécifié le nom de serveur correct.

Cause


Cette erreur se produit lorsque SQL Server ne peut pas exécuter un appel de procédure distante. Cela peut être dû à un serveur local incorrectement configuré. Pour passer un appel de procédure distante, SQL Server détermine d’abord le nom du serveur local en recherchant le nom du serveur avec srvid = 0 dans sysservers. Si une entrée avec srvid = 0 est introuvable dans sysserversou si le nom du serveur avec srvid = 0 appartient à un nom de serveur différent du nom de l’ordinateur Windows NT local, vous recevez l’erreur.

Solution de contournement


Pour déterminer si le serveur local est correctement configuré, examinez la colonne srvstatus dans Master.. sysservers. Cette valeur doit être égale à 0 pour le serveur local. Par exemple, supposons que votre serveur local avait le nom de « SERV_LOCAL », que le serveur distant a été nommé « SERV_REMOTE » et que sysservers contenait les informations suivantes :
   srvid srvstatus      srvname            srvnetname   ----- ---------      ---------------    ------------    ...   1     1              SERV_LOCAL         SERV_LOCAL   2     1              SERV_REMOTE        SERV_REMOTE 
Dans la sortie précédente, SERV_LOCAL correspond au serveur local, mais il est doté d’un srvid de 1 ; elle doit être égale à 0. Pour corriger ce problème, procédez comme suit :
  1. Exécutez sp_dropserver local_server_name, DropLogins (dans cet exemple, vous exécuterez sp_dropserver SERV_LOCAL, DropLogins).
  2. Exécutez sp_addserver local_server_namelocal (dans cet exemple, vous exécuterez sp_addserver SERV_LOCAL, local).
  3. Arrêtez et redémarrez SQL Server.
Après avoir suivi ces étapes, la table sysservers doit ressembler à ce qui suit :
   srvid srvstatus      srvname            srvnetname   ----- ---------      ---------------    ------------    ...   0     0              SERV_LOCAL         SERV_LOCAL   2     1              SERV_REMOTE        SERV_REMOTE 
Notez que l’ID de serveur (srvid) doit être 0 pour le serveur local.

Informations supplémentaires


Vous pouvez recevoir ce message d’erreur lors de l’installation de la réplication, car le processus d’installation effectue des appels de procédure distante entre les serveurs impliqués dans la réplication.