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