sql >> Databáze >  >> RDS >> Database

Zachycování chyb propojeného serveru

SQL Server poskytuje TRY CATCH mechanismus, který aplikaci umožní uvědomit si, že se něco pokazilo, a spustit příslušný kód, který problém vyřeší. Například:

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

Kód v TRY blok se provede jako první. Pokud dojde k chybě, provedení je předáno CATCH blokovat.

Jaké jsou důsledky pro zpracování chyb, pokud chcete použít TRY CATCH s propojeným serverem? V této situaci může dojít k chybě v:

  1. Místní instance SQL Server.
  2. Rozhraní serveru SQL slouží k usnadnění připojení ke vzdálenému serveru.
  3. Rozhraní používané ke zpřístupnění vzdáleného serveru pro SQL Server.

Naše příkladné nastavení použije jako vzdálený server server Salesforce.com. Pro tento typ vzdáleného serveru rozhraní 2. je Microsoft OLE DB Provider pro ovladače a rozhraní ODBC 3. je ovladač ODBC Salesforce.com společnosti Easysoft.

K následující chybě dochází místně na serveru SQL Server. Propojený server s názvem SALESFORCE ještě nebyl vytvořen, a tak jej SQL Server nemůže najít:

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.

K další chybě dochází ve vrstvě Microsoft OLE DB Provider pro ovladače ODBC. Propojený server s názvem SALESFORCE odkazuje na zdroj dat ODBC, který obsahuje podrobnosti o připojení pro cílový server Salesforce.com. SQL Server je však 64bitový, ale zdroj dat ODBC byl nastaven v 32bitovém správci ODBC. Připojení se nezdaří s chybou „neshoda 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".

Všimněte si, že interpretace chyby OLE DB SQL Serverem byla zachycena CATCH blok. "Syrová" chyba z vrstvy OLEDB nemá.

K této poslední chybě dochází ve vrstvě ODBC používané k připojení k Salesforce.com. Výběrový dotaz odkazuje na vlastní objekt Salesforce.com („LEASE“), který ještě nebyl povolen a naplněn. "[Easysoft ODBC]Základní tabulka nebo zobrazení LEASE nenalezeno" je chyba ovladače ODBC, která je předána a zobrazena poskytovatelem Microsoft OLE DB Provider pro ovladače ODBC. Stejně jako v předchozím příkladu tato zpráva není zachytitelná, interpretace zprávy SQL Serverem je zachytitelná.

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

Další informace o zpracování chyb serveru SQL Server s propojenými servery i bez nich naleznete na adrese:

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


  1. (+) =operátor v Oracle SQL v klauzuli where

  2. Chyba serveru SQL u příkazu aktualizace – u aktuálního příkazu došlo k závažné chybě

  3. Udělte oprávnění na úrovni tabulky v SQL Server

  4. Spočítejte všechny objekty ve vaší databázi