Nedávno nám zákazník, který používal náš SQL Server ODBC ovladač k připojení Oracle k SQL Serveru, nahlásil následující chybu:
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
K této chybě „catchall“ může dojít, pokud:
- Prostředí není správně nastaveno (např. LD_LIBRARY_PATH neukazuje na adresáře knihovny unixODBC nebo ODBCSYSINI neukazuje na adresář obsahující kopii souboru odbc.ini, kde je definováno cílové ODBC DSN.)
- 64bitová knihovna DG4ODBC se používá s 32bitovými knihovnami ODBC a naopak.
- SID zadané ve vaší konfiguraci DG4ODBC neběží na hostiteli zadaném v tnsnames.ora.
Při vyšetřování však žádný z těchto problémů neplatil. Měli jsme podezření, že příčinou byl problém s chybnou konfigurací Oracle, protože ačkoliv bylo povoleno ladění DG4ODBC, nebyly generovány žádné ladicí soubory DG4ODBC, tj. Oracle se nedostal tak daleko, aby načetl knihovnu DG4ODBC.
V takových případech požadujeme konfigurační soubory Oracle zákazníka, abychom mohli reprodukovat jejich nastavení, protože může být těžké najít chybějící nebo špatně umístěnou závorku v souboru .ora.
Nebyli jsme schopni reprodukovat chybu zákazníka, dodané konfigurační soubory nám fungovaly perfektně.
Dalším krokem bylo použití strace
podívat se „pod pokličku“ na to, jaké konfigurační soubory se načítaly při spouštění posluchače Oracle. Za tímto účelem jsme zákazníka požádali, aby:
- Spusťte dvě relace prostředí jako uživatel Oracle.
- V shellu 1 zastavte posluchače Oracle.
- Spusťte posluchač pomocí tohoto příkazu:
strace -f -o /tmp/easysoft.log -s 512 lsnrctl start
- V shellu 2 spusťte SQL*PLus a spusťte příkaz SQL proti propojení databáze DG4ODBC / SQL Server.
- V prostředí shell 2 zastavte posluchač Oracle.
Protokol strace, /tmp/easysoft.log, odhalil základní problém. Zpočátku byl posluchač Oracle schopen načíst a přečíst 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
Zákazníkovo nastavení Oracle však bylo:uživatel A spustil posluchač, který se stal uživatelem B. Strace odhalil, že uživatel B neměl dostatečná přístupová oprávnění k načtení tohoto souboru .ora:
53051 open("/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora", O_RDONLY) = -1 EACCES (Permission denied)
To byla nakonec příčina zákaznického „ORA 02063“.