Pillola Oracle

Spread the love

logo-oracle-largeOggi la pillola parla di Oracle.

Più volte mi sono trovato a gestire errori Oracle che hanno origini diverse.

In questo sito ho trovato quasi tutti i casi a cui mi sono trovato di fronte. In questo caso però affrontiamo solo l’aspetto fondamentale del collegamento tra un client e un server.

La situazione è raffigurata qui di seguito, un client Oracle (C) cerca di collegarsi ad un server Oracle (S):

clientserver

In realtà più che due macchine fisiche, client e server sono due processi che possono anche coesistere nella stessa macchina.

Quando il client chiama il server, viene eseguita una serie di operazioni: devono infatti essere instradati da TCP/IP dei pacchetti di informazioni; occorre stabilire qual è l’host da chiamare, qual è il nome del servizio in ascolto e della porta in cui è in ascolto.

Queste informazioni sono contenute in architetture diverse: può essere un LDAP, un servizio Oracle di risoluzione dei nomi (Oracle Names Server) oppure, nel caso più semplice, un file che risiede in un filesystem accessibile dalla macchina in cui viene eseguito il client. Questo file si chiama tnsnames.ora ed è un elenco di descrittori simili a quello che segue:

ora_descriptor_name =
(DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS = 
            (PROTOCOL = TCP)(HOST = ora_host_name)(PORT = 1521)
        )
    )
    (CONNECT_DATA =
        (SERVICE_NAME = ora_service_name)
    )
)

I parametri fondamentali sono

  • il nome del descrittore (ora_descriptor_name) che è quello che sarà utilizzato dal programma che vuole effettuare la chiamata (ad esempio sqlplus, oppure un programma PHP o Java)
  • il nome dell’host (ora_host_name) che ospita il server (il nome ora_service_name deve essere presente nel file /etc/hosts della macchina che ospita il client, oppure deve esistere un nome DNS nella rete a cui accede il client)
  • la porta (1521)
  • il nome del servizio in ascolto nel server (ora_service_name)

I nomi ora_descriptor_name, ora_host_name, ora_service_name sono nella realtà dei nomi di fantasia (pur secondo un determinato schema di nomi) che possono essere dati a macchine e servizi; ad esempio

  • ora_descriptor_name = alberghi.mydomain.com
  • ora_host_name = oracle1.mydomain.com
  • ora_service_name = alberghi

 

Errori che possono accadere

1) non c’è una voce ora_descriptor_name nel tnsnames.ora

    => “ORA-12154: TNS:could not resolve the connect identifier specified”

2) c’è la voce MA ora_host_name non c’è nel dns né nel file etc/hosts

    => “ORA-12545: Connect failed because target host or object does not exist”

3) c’è la voce, c’è ora_host_name in /etc/hosts MA punta ad un ip inesistente

    => “ORA-12545: Connect failed because target host or object does not exist”

4) c’è la voce, c’è ora_host_name, l’IP è corretto MA lato server non c’è un listener in ascolto

    => “ORA-12541: TNS:no listener”

5) c’è la voce, c’è ora_host_name, IP corretto, listener in ascolto MA in una porta diversa dalla 1521

    => “ORA-12560: TNS:protocol adapter error”

6) c’è la voce, c’è ora_host_name, IP corretto, listener in ascolto sulla porta giusta MA non esiste ora_service_name

    => “ORA-12514: TNS:listener does not currently know of service requested in connect descriptor”


Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.