Database
 sql >> Base de données >  >> RDS >> Database

Interception des erreurs de serveur lié

SQL Server fournit un TRY CATCH mécanisme permettant à une application de se rendre compte que quelque chose s'est mal passé et d'exécuter le code approprié pour gérer le problème. Par exemple :

BEGIN TRY
   <some code>
END TRY
BEGIN CATCH 
   PRINT 'This is the error: ' + error_message()
END CATCH

Le code dans le TRY bloc est exécuté en premier. Si une erreur survient, l'exécution est passée au CATCH bloquer.

Quelles sont les implications pour la gestion des erreurs si vous souhaitez utiliser TRY CATCH avec un serveur lié? Dans cette situation, une erreur peut se produire dans :

  1. L'instance SQL Server locale.
  2. L'interface SQL Server utilisée pour faciliter la connexion avec le serveur distant.
  3. L'interface utilisée pour rendre le serveur distant accessible à SQL Server.

Notre exemple de configuration utilisera un serveur Salesforce.com comme serveur distant. Pour ce type de serveur distant, interface 2. est le fournisseur Microsoft OLE DB pour les pilotes ODBC et l'interface 3. est le pilote ODBC Salesforce.com d'Easysoft.

L'erreur suivante se produit localement dans SQL Server. Le serveur lié nommé SALESFORCE n'a pas encore été créé et donc SQL Server est incapable de le localiser :

BEGIN TRY
    EXEC('SELECT * FROM OPENQUERY(SALESFORCE, ''SELECT * FROM LEASE'')')
END TRY
BEGIN CATCH 
    PRINT 'This is the error: ' + error_message()
END CATCH
This is the error: Could not find server 'SALESFORCE' in sys.servers. Verify that
the correct server name was specified. If necessary, execute the stored procedure
sp_addlinkedserver to add the server to sys.servers.

L'erreur suivante se produit dans la couche Microsoft OLE DB Provider for ODBC Drivers. Le serveur lié nommé SALESFORCE fait référence à une source de données ODBC qui contient les détails de connexion pour le serveur Salesforce.com cible. Cependant, SQL Server est 64 bits mais la source de données ODBC a été configurée dans l'administrateur ODBC 32 bits. La connexion échoue avec une erreur "incompatibilité d'architecture"

OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message
"[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture
mismatch between the Driver and Application".
This is the error: Cannot initialize the data source object of OLE DB provider
"MSDASQL" for linked server "SALESFORCE".

Notez que l'interprétation de l'erreur OLE DB par SQL Server a été capturée par le CATCH bloc. L'erreur "brute" de la couche OLEDB n'en a pas.

Cette dernière erreur se produit dans la couche ODBC utilisée pour se connecter à Salesforce.com. La requête de sélection fait référence à un objet Salesforce.com personnalisé ("LEASE") qui n'a pas encore été activé et rempli. "[Easysoft ODBC]Base table or view LEASE not found" est une erreur du pilote ODBC, qui est transmise et affichée par le fournisseur Microsoft OLE DB pour les pilotes ODBC. Comme dans l'exemple précédent, ce message n'est pas interceptable, l'interprétation du message par SQL Server est interceptable.

OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message
"[Easysoft ODBC]Base table or view LEASE not found".
This is the error: An error occurred while preparing the query
"SELECT * FROM LEASE" for execution against OLE DB provider "MSDASQL" for linked
server "SALESFORCE".

Pour plus d'informations sur la gestion des erreurs SQL Server avec et sans serveurs liés, consultez :

http://www.sommarskog.se/error_handling/Part1.html