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

Indagine su un errore ORA 02063 DG4ODBC

Di recente, un cliente che utilizzava il nostro driver ODBC di SQL Server per connettere Oracle a SQL Server, ci ha segnalato il seguente errore:

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

Questo errore "catchall" può verificarsi se:

  • L'ambiente non è impostato correttamente (ad es. LD_LIBRARY_PATH non punta alle directory della libreria unixODBC o ODBCSYSINI non punta alla directory contenente la copia di odbc.ini dove è definito il DSN ODBC di destinazione.)
  • Una libreria DG4ODBC a 64 bit viene utilizzata con librerie ODBC a 32 bit e viceversa.
  • Il SID specificato nella tua configurazione DG4ODBC non è in esecuzione sull'host specificato in tnsnames.ora.

Tuttavia, dopo l'indagine, nessuno di questi problemi si è applicato. Sospettavamo che la causa fosse un problema di configurazione errata di Oracle, perché sebbene il debug DG4ODBC fosse abilitato, non venivano generati file di debug DG4ODBC, ovvero Oracle non riusciva a caricare la libreria DG4ODBC.

In questi casi, richiediamo i file di configurazione Oracle del cliente, in modo da poter riprodurre la loro configurazione, poiché può essere difficile individuare una parentesi mancante o fuori posto in un file .ora.

Non siamo stati in grado di riprodurre l'errore del cliente, i file di configurazione forniti hanno funzionato perfettamente per noi.

Il passo successivo è stato usare strace per guardare "sotto il cofano" quali file di configurazione venivano caricati quando veniva avviato Oracle Listener. Per fare ciò, abbiamo chiesto al cliente di:

  1. Avvia due sessioni di shell come utente Oracle.
  2. Nella shell 1, arresta il listener Oracle.
  3. Avvia il listener con questo comando:
    strace -f -o /tmp/easysoft.log -s 512 lsnrctl start
  4. Nella shell 2, avvia SQL*PLus ed esegui un'istruzione SQL sul collegamento al database DG4ODBC / SQL Server.
  5. Nella shell 2, arresta il listener Oracle.

Il registro strace, /tmp/easysoft.log, ha esposto il problema sottostante. Inizialmente, il listener Oracle è stato in grado di caricare e leggere 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

Tuttavia, la configurazione Oracle del cliente era:l'utente A ha avviato il listener, che è diventato l'utente B. Ciò che strace ha rivelato è che l'utente B non disponeva di autorizzazioni di accesso sufficienti per caricare quel file .ora:

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

In definitiva, questa è stata la causa dell'"ORA 02063" del cliente.