Niedawno klient, który używał naszego sterownika ODBC SQL Server do łączenia Oracle z SQL Server, zgłosił nam następujący błąd:
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
Ten błąd „catchall” może wystąpić, jeśli:
- Środowisko nie jest ustawione poprawnie (np. LD_LIBRARY_PATH nie wskazuje na katalogi bibliotek unixODBC lub ODBCSYSINI nie wskazuje na katalog zawierający kopię odbc.ini, gdzie zdefiniowano docelowe DSN ODBC.)
- 64-bitowa biblioteka DG4ODBC jest używana z 32-bitowymi bibliotekami ODBC i na odwrót.
- SID określony w konfiguracji DG4ODBC nie działa na hoście określonym w tnsnames.ora.
Jednak po zbadaniu żadna z tych kwestii nie miała zastosowania. Podejrzewaliśmy, że przyczyną był problem z błędną konfiguracją Oracle, ponieważ chociaż debugowanie DG4ODBC było włączone, żadne pliki debugowania DG4ODBC nie były generowane, tj. Oracle nie dotarło do załadowania biblioteki DG4ODBC.
W takich przypadkach prosimy o pliki konfiguracyjne Oracle klienta, abyśmy mogli odtworzyć ich konfigurację, ponieważ może być trudno zauważyć brakujący lub niewłaściwie umieszczony nawias w pliku .ora.
Nie byliśmy w stanie odtworzyć błędu klienta, dostarczone pliki konfiguracyjne działały dla nas idealnie.
Następnym krokiem było użycie strace
aby spojrzeć „pod maską”, jakie pliki konfiguracyjne były ładowane podczas uruchamiania programu nasłuchującego Oracle. W tym celu poprosiliśmy klienta o:
- Rozpocznij dwie sesje powłoki jako użytkownik Oracle.
- W powłoce 1 zatrzymaj program nasłuchujący Oracle.
- Uruchom odbiornik za pomocą tego polecenia:
strace -f -o /tmp/easysoft.log -s 512 lsnrctl start
- W powłoce 2 uruchom SQL*PLus i uruchom instrukcję SQL względem łącza bazy danych DG4ODBC / SQL Server.
- W powłoce 2 zatrzymaj nasłuchiwanie Oracle.
Dziennik strace, /tmp/easysoft.log, ujawnił podstawowy problem. Początkowo program nasłuchujący Oracle był w stanie załadować i odczytać plik 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
Jednak konfiguracja Oracle klienta była następująca:użytkownik A uruchomił program nasłuchujący, który stał się użytkownikiem B. Śledzenie ujawniło, że użytkownik B nie miał wystarczających uprawnień dostępu, aby załadować ten plik .ora:
53051 open("/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora", O_RDONLY) = -1 EACCES (Permission denied)
Ostatecznie było to przyczyną „ORA 02063” klienta.