sql >> Database teknologi >  >> RDS >> Database

Indfangning af linkede serverfejl

SQL Server giver en TRY CATCH mekanisme for at gøre det muligt for en applikation at indse, at noget er gået galt, og udføre passende kode for at håndtere problemet. For eksempel:

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

Koden i TRY blok udføres først. Hvis der opstår en fejl, sendes eksekveringen til CATCH blokere.

Hvad er implikationerne for fejlhåndtering, hvis du vil bruge TRY CATCH med en tilknyttet server? I denne situation kan der opstå en fejl i:

  1. Den lokale SQL Server-instans.
  2. SQL Server-grænsefladen, der bruges til at lette forbindelsen med fjernserveren.
  3. Grænsefladen, der bruges til at gøre fjernserveren tilgængelig for SQL Server.

Vores eksempelopsætning vil bruge en Salesforce.com-server som fjernserver. For denne fjernservertype, grænseflade 2. er Microsoft OLE DB Provider til ODBC-drivere og grænseflade 3. er Easysofts Salesforce.com ODBC-driver.

Følgende fejl opstår lokalt i SQL Server. Den tilknyttede server med navnet SALESFORCE er endnu ikke blevet oprettet, så SQL Server er ikke i stand til at finde den:

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.

Den næste fejl opstår i laget Microsoft OLE DB Provider for ODBC Drivers. Den tilknyttede server med navnet SALESFORCE refererer til en ODBC-datakilde, der indeholder forbindelsesdetaljerne for mål-Salesforce.com-serveren. SQL Server er dog 64-bit, men ODBC-datakilden er sat op i 32-bit ODBC-administratoren. Forbindelsen mislykkes med fejlen "arkitektur mismatch"

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

Bemærk, at SQL Servers fortolkning af OLE DB-fejlen er blevet fanget af CATCH blok. Den "rå" fejl fra OLEDB-laget har ikke.

Denne sidste fejl opstår i ODBC-laget, der bruges til at oprette forbindelse til Salesforce.com. Select-forespørgslen refererer til et tilpasset Salesforce.com-objekt ("LEASE"), der endnu ikke er blevet aktiveret og udfyldt. "[Easysoft ODBC]Basistabel eller visning LEASE ikke fundet" er en fejl fra ODBC-driveren, som sendes til og vises af Microsoft OLE DB-udbyderen for ODBC-drivere. Som i det foregående eksempel kan denne meddelelse ikke fældes, SQL Servers fortolkning af meddelelsen kan fældes.

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

For mere information om SQL Server-fejlhåndtering både med og uden linkede servere, se:

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


  1. Tips til at flytte SQL Server-database fra én server til en anden - SQL Tutorial af Rajan Singh

  2. Sådan fungerer UPPER() i MariaDB

  3. SQL Server System Databaser – Grundlæggende koncepter

  4. Beregning af forskel mellem to tidsstempler i Oracle i millisekunder