Database
 sql >> Baza danych >  >> RDS >> Database

Zatrzymywanie błędów serwera połączonego

SQL Server udostępnia TRY CATCH mechanizm umożliwiający aplikacji zorientowanie się, że coś poszło nie tak i wykonanie odpowiedniego kodu w celu rozwiązania problemu. Na przykład:

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

Kod w TRY blok jest wykonywany jako pierwszy. Jeśli wystąpi błąd, wykonanie jest przekazywane do CATCH blokować.

Jakie są konsekwencje obsługi błędów, jeśli chcesz użyć TRY CATCH? z połączonym serwerem? W takiej sytuacji może wystąpić błąd w:

  1. Lokalna instancja serwera SQL.
  2. Interfejs SQL Server używany do ułatwienia połączenia ze zdalnym serwerem.
  3. Interfejs używany do udostępniania zdalnego serwera SQL Server.

Nasza przykładowa konfiguracja użyje serwera Salesforce.com jako serwera zdalnego. Dla tego typu serwera zdalnego interfejs 2. jest dostawcą Microsoft OLE DB dla sterowników ODBC i interfejsu 3. jest sterownikiem ODBC firmy Easysoft Salesforce.com.

Następujący błąd występuje lokalnie w programie SQL Server. Połączony serwer o nazwie SALESFORCE nie został jeszcze utworzony, więc SQL Server nie może go zlokalizować:

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.

Następny błąd występuje w warstwie Microsoft OLE DB Provider for ODBC Drivers. Połączony serwer o nazwie SALESFORCE odwołuje się do źródła danych ODBC, które zawiera szczegóły połączenia z docelowym serwerem Salesforce.com. Jednak SQL Server jest 64-bitowy, ale źródło danych ODBC zostało skonfigurowane w 32-bitowym Administratorze ODBC. Połączenie kończy się niepowodzeniem z powodu błędu „niezgodności architektury”

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

Zauważ, że interpretacja błędu OLE DB przez SQL Server została przechwycona przez CATCH blok. Błąd „surowy” z warstwy OLEDB nie.

Ten ostatni błąd występuje w warstwie ODBC używanej do łączenia się z Salesforce.com. Zapytanie wybierające odwołuje się do niestandardowego obiektu Salesforce.com („LEASE”), który nie został jeszcze włączony i wypełniony. „Nie znaleziono tabeli podstawowej lub widoku [Easysoft ODBC] LEASE” jest błędem sterownika ODBC, który jest przesyłany do dostawcy Microsoft OLE DB dla sterowników ODBC i przez niego wyświetlany. Podobnie jak w poprzednim przykładzie, komunikat ten nie jest trappable, interpretacja komunikatu SQL Server jest trappable.

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

Aby uzyskać więcej informacji na temat obsługi błędów SQL Server zarówno z połączonymi serwerami, jak i bez nich, zobacz:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uruchamiają się plany równoległe – część 1

  2. 10 najważniejszych powodów, dla których powinieneś uczyć się SQL

  3. Ciekawe rzeczy o wyzwalaczach ZAMIAST

  4. Model danych dostawy artykułów spożywczych

  5. Używanie kroku Unpivot do tworzenia tabeli tabelarycznej z tabeli przestawnej