Database
 sql >> Datenbank >  >> RDS >> Database

Abfangen von Verbindungsserverfehlern

SQL Server stellt einen TRY CATCH bereit Mechanismus, der es einer Anwendung ermöglicht, zu erkennen, dass etwas schief gelaufen ist, und den entsprechenden Code auszuführen, um das Problem zu behandeln. Zum Beispiel:

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

Der Code im TRY Block wird zuerst ausgeführt. Wenn ein Fehler auftritt, wird die Ausführung an CATCH übergeben blockieren.

Was sind die Auswirkungen auf die Fehlerbehandlung, wenn Sie TRY CATCH verwenden möchten mit einem Linked-Server? In dieser Situation kann ein Fehler auftreten in:

  1. Die lokale SQL Server-Instanz.
  2. Die SQL Server-Schnittstelle, die verwendet wird, um die Verbindung mit dem Remote-Server zu erleichtern.
  3. Die Schnittstelle, die verwendet wird, um den Remote-Server für SQL Server zugänglich zu machen.

Unser Beispiel-Setup verwendet einen Salesforce.com-Server als Remote-Server. Für diesen Remote-Servertyp Schnittstelle 2. ist der Microsoft OLE DB-Anbieter für ODBC-Treiber und Schnittstelle 3. ist der ODBC-Treiber von Salesforce.com von Easysoft.

Der folgende Fehler tritt lokal in SQL Server auf. Der Verbindungsserver mit dem Namen SALESFORCE wurde noch nicht erstellt und kann daher von SQL Server nicht gefunden werden:

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.

Der nächste Fehler tritt in der Schicht Microsoft OLE DB Provider for ODBC Drivers auf. Der Verbindungsserver mit dem Namen SALESFORCE verweist auf eine ODBC-Datenquelle, die die Verbindungsdetails für den Salesforce.com-Zielserver enthält. SQL Server ist jedoch 64-Bit, aber die ODBC-Datenquelle wurde im 32-Bit-ODBC-Administrator eingerichtet. Die Verbindung schlägt mit dem Fehler „Architecture Mismatch“ fehl

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".

Beachten Sie, dass die Interpretation des OLE DB-Fehlers durch SQL Server von CATCH abgefangen wurde Block. Der "rohe" Fehler aus der OLEDB-Schicht ist nicht vorhanden.

Dieser letzte Fehler tritt in der ODBC-Schicht auf, die für die Verbindung mit Salesforce.com verwendet wird. Die Auswahlabfrage verweist auf ein benutzerdefiniertes Salesforce.com-Objekt ("LEASE"), das noch nicht aktiviert und ausgefüllt wurde. "[Easysoft ODBC]Base table or view LEASE not found" ist ein Fehler des ODBC-Treibers, der an den Microsoft OLE DB-Anbieter für ODBC-Treiber weitergeleitet und von diesem angezeigt wird. Wie im vorherigen Beispiel ist diese Nachricht nicht abfangbar, die Interpretation der Nachricht durch SQL Server ist abfangbar.

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".

Weitere Informationen zur Fehlerbehandlung von SQL Server sowohl mit als auch ohne Verbindungsserver finden Sie unter:

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