Oggi, poiché la macchina nodo ETL vuole accedere a un nuovo server di database, deve configurare tnsnames.ora e, dopo la configurazione del risultato, viene segnalato un errore durante la connessione al database:
ORA-12547: TNS:lost contact
All'inizio pensavo fosse tnsnames.ora configurato male, ma dopo confronti e verifiche, questa possibilità è stata esclusa. Perché la stessa configurazione su altri host è stata verificata per connettersi a questo server di database.
Successivamente, ho cercato molte informazioni su Internet basandomi su questo errore "ORA-12547: TNS: lost contact", alcuni dicevano che mancavano pacchetti software, altri che c'era un problema con le impostazioni dei permessi file sull'host del database, ma non erano in linea con la situazione incontrata questa volta.
Successivamente, ho deciso di guardare i log, ho controllato il listener.log di monitoraggio del database e ho scoperto che c'erano i seguenti messaggi di errore: 20-MAGGIO-2016 15:46:03 * (CONNECT_DATA=(CID=(PROGRAMM=)(HOST=db01)(USER=griglia))(COMANDO=status)(DISCUSSIONI=64)(SERVICE=LISTENER)(VERSION=186647552)) * stato * 0 Collegamento in arrivo dal 192.168.24.1 rifiutato 20-MAG-2016 15:46:06 * 12546
TNS-12546: TNS:permission denied
TNS-12560: TNS:protocol adapter error TNS-00516: Permesso negato
e controllò la configurazione sqlnet.ora del server di database, e scoprì che ciò avveniva perché la restrizione dell'IP di accesso al database era impostata, cioè solo l'IP specificato poteva accedere al database.
Poiché si tratta di un database RAC a due nodi, modificare sqlnet.ora sotto l'utente della griglia significa aggiungere l'indirizzo IP del nodo ETL alla whitelist IP per accedere al database. Dopo la modifica, riavvia l'ascolto (lsnrctl reload), altrimenti un errore verrà comunque segnalato. |