sql >> Databasteknik >  >> RDS >> Database

Undersöker ett ORA 02063 DG4ODBC-fel

Nyligen rapporterade en kund som använde vår SQL Server ODBC-drivrutin för att ansluta Oracle till SQL Server följande fel till oss:

ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
	ORA-02063: preceding 2 lines from SQLSERVERLINK

Detta "catchall"-fel kan inträffa om:

  • Miljön är inte korrekt inställd (t.ex. LD_LIBRARY_PATH pekar inte på unixODBC-bibliotekskatalogerna, eller ODBCSYSINI pekar inte på till katalogen som innehåller kopian av odbc.ini där mål-ODBC DSN är definierat.)
  • Ett 64-bitars DG4ODBC-bibliotek används med 32-bitars ODBC-bibliotek och vice versa.
  • Det SID som anges i din DG4ODBC-konfiguration körs inte på den värd som anges i tnsnames.ora.

Men vid utredning gällde ingen av dessa frågor. Vi misstänkte att orsaken var ett felkonfigurationsproblem i Oracle, för även om DG4ODBC-felsökning var aktiverad, genererades inga DG4ODBC-felsökningsfiler, dvs. Oracle kom inte så långt som att ladda DG4ODBC-biblioteket.

I sådana fall begär vi kundens Oracle-konfigurationsfiler, så att vi kan återskapa deras inställningar, eftersom det kan vara svårt att upptäcka en saknad eller felplacerad parentes i en .ora-fil.

Vi kunde inte återskapa kundens fel, de medföljande konfigurationsfilerna fungerade perfekt för oss.

Nästa steg var att använda strace att titta "under huven" på vilka konfigurationsfiler som laddades när Oracle-avlyssnaren startade. För att göra detta bad vi kunden att:

  1. Starta två skalsessioner som Oracle-användare.
  2. Stoppa Oracle-lyssnaren i skal 1.
  3. Starta lyssnaren med det här kommandot:
    strace -f -o /tmp/easysoft.log -s 512 lsnrctl start
  4. I skal 2, starta SQL*PLus och kör en SQL-sats mot DG4ODBC / SQL Server-databaslänken.
  5. Stoppa Oracle-lyssnaren i skal 2.

Strace-loggen, /tmp/easysoft.log, avslöjade det underliggande problemet. Ursprungligen kunde Oracle-lyssnaren ladda och läsa listener.ora:

53049 open("/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora", O_RDONLY) = 3
53049 read(3, "#/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora Network Configuration File:
\n# Generated by Oracle configuration tools.\n\nLISTENER =\n (DESCRIPTION_LIST =\n (DESCRIPTION =\n (ADDRESS
= (PROTOCOL = TCP)..., 4096) = 577

Kundens Oracle-inställning var dock:användare A startade lyssnaren, som blev användare B. Det som avslöjades var att användare B inte hade tillräckliga åtkomstbehörigheter för att ladda den .ora-filen:

53051 open("/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora", O_RDONLY) = -1
EACCES (Permission denied)

I slutändan var detta orsaken till kundens "ORA 02063".


  1. Skapa och ta bort en PostgreSQL-databas på Ubuntu 16.04

  2. Konfigurationer med SQL Server-databasomfattning och automatisk plankorrigering

  3. Nya datum för kostnadsfria certifieringsprov på Oracle Cloud och Autonomous Database

  4. Vad är ett en-till-många-förhållande i en databas? En förklaring med exempel