L’errore ORA-12541, spesso accompagnato dal messaggio “TNS:no listener”, è uno dei messaggi più comuni e frustranti che un DBA o un amministratore di sistema possa incontrare in un ambiente Oracle. Quando un’applicazione o un client tenta di connettersi a un database Oracle e riceve questo errore, significa che non è riuscito a stabilire un contatto con il processo listener sul server database. Questo blocca completamente la connettività, rendendo il database irraggiungibile.
Nella mia esperienza, un ORA-12541 può trasformarsi rapidamente da un piccolo inconveniente a un’interruzione di servizio critica, specialmente in ambienti di produzione dove ogni minuto di downtime ha un costo elevato. La buona notizia è che, nella maggior parte dei casi, la causa è riconducibile a pochi fattori ben noti e facilmente diagnosticabili. Con una metodologia di troubleshooting strutturata, è possibile individuare e risolvere il problema in tempi rapidi, minimizzando l’impatto operativo.
Versioni di riferimento: Oracle Database 12c, 18c, 19c, 21c · documentazione consultata a novembre 2026
ORA-12541 TNS:no listener in 60 secondi
# 1. Verifica lo stato del listener
lsnrctl status
# 2. Avvia il listener se è fermo
lsnrctl start
# 3. Controlla la configurazione del listener
cat $ORACLE_HOME/network/admin/listener.ora
# 4. Controlla la configurazione TNS del client
cat $ORACLE_HOME/network/admin/tnsnames.ora
# 5. Forzatura registrazione database (se listener attivo ma DB non visibile)
sqlplus / as sysdba
ALTER SYSTEM REGISTER;
exit
# 6. Test di connettività dal client
tnsping ORCL
# 7. Verifica porta listener (es. 1521) sul server
ss -tlnp | grep 1521
# 8. Apri la porta sul firewall del server (se necessario, es. firewalld)
sudo firewall-cmd --add-port=1521/tcp --permanent
sudo firewall-cmd --reload
Prerequisiti
Per diagnosticare e risolvere l’errore ORA-12541, è fondamentale avere accesso sia al server database Oracle che al client che tenta la connessione. Saranno necessarie credenziali di amministratore o un utente con privilegi sufficienti per eseguire comandi come lsnrctl, sqlplus, e per modificare la configurazione di rete o del firewall. È utile conoscere il $ORACLE_HOME sul server e il percorso della directory network/admin sia sul server che sul client, dove risiedono i file listener.ora e tnsnames.ora.
Cosa dice davvero l’errore
Il messaggio “ORA-12541: TNS:no listener” è esplicito: il client ha tentato di contattare il listener Oracle ma non ha ricevuto alcuna risposta. Questo non significa necessariamente che il listener sia spento, ma piuttosto che la comunicazione non è avvenuta. Le possibili cause sono molteplici, dalla configurazione errata della rete o del listener stesso, a problemi di firewall o DNS. È cruciale comprendere che l’errore si verifica a livello di rete TCP/IP, prima ancora che il database possa essere coinvolto. Il client non riesce nemmeno a “bussare alla porta” del listener, figuriamoci a stabilire una sessione con il database.
Un output tipico che potresti vedere sul client è:
ORA-12170: TNS:Connect timeout occurred
ORA-12541: TNS:no listener
Questo indica che il tentativo di connessione è scaduto senza che il listener rispondesse, o che non sia stato trovato affatto.
Il listener è avviato?
La prima e più comune causa dell’errore ORA-12541 è che il listener Oracle non sia attivo sul server. Può capitare che dopo un riavvio del server, un patch o un intervento manuale, il listener non venga avviato automaticamente. Per verificarne lo stato, connettersi al server database come utente oracle o con un utente che abbia i permessi per eseguire lsnrctl e digitare:
lsnrctl status
Se il listener è attivo, l’output mostrerà il suo stato, la versione, gli indirizzi a cui è in ascolto e i servizi che gestisce. Se è fermo, l’output sarà simile a questo:
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 12-NOV-2026 10:30:00
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle-server.example.com)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00512: Connect failed on address parameter.
Linux Error: 111: Connection refused
In questo caso, la soluzione è semplice: avviare il listener con:
lsnrctl start
Dopo l’avvio, ripetere lsnrctl status per assicurarsi che sia operativo e che stia registrando i servizi del database. Se il listener non si avvia, potrebbe esserci un problema con la sua configurazione nel file listener.ora o con la disponibilità della porta.
Host e porta: listener.ora contro tnsnames.ora
Anche se il listener è attivo, l’ORA-12541 può verificarsi se le informazioni di connessione fornite dal client non corrispondono a quelle su cui il listener è in ascolto. Questo è un problema comune che spesso si risolve confrontando due file chiave:
listener.orasul server database: definisce gli indirizzi (IP e porte) su cui il listener è in ascolto.tnsnames.orasul client (o sul server se il client è locale): definisce come il client deve connettersi al database, specificando l’host e la porta del listener.
Per visualizzare la configurazione del listener sul server:
cat $ORACLE_HOME/network/admin/listener.ora
Un esempio di listener.ora potrebbe essere:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle-server.example.com)(PORT = 1521))
)
)
Ora, controlla il file tnsnames.ora sul client (o sul server, se il client è locale):
cat $ORACLE_HOME/network/admin/tnsnames.ora
Un esempio di tnsnames.ora con una configurazione per il servizio ORCL:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle-server.example.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
Trappola comune: Errori di battitura nell’hostname o un indirizzo IP errato sono le cause più frequenti. Assicurati che il HOST e PORT nel tnsnames.ora del client corrispondano esattamente a quelli definiti nel listener.ora sul server. Se il server ha più interfacce di rete, assicurati che l’indirizzo IP specificato sia quello corretto e raggiungibile dal client. Se viene usato un hostname, verifica che la risoluzione DNS sia corretta sia dal client che dal server (usando ping oracle-server.example.com).
Leggi anche: Hardening SSH Linux: Guida Completa 2026 (10 Impostazioni Critiche)
Il database è registrato sul listener?
Un’altra causa di ORA-12541, meno comune ma possibile se il listener è attivo e raggiungibile, è che il database non si sia registrato correttamente con il listener. Questo può accadere se il database è stato appena avviato o se c’è stato un problema di comunicazione tra l’istanza e il listener. Il PMON (Process Monitor) del database è responsabile della registrazione dinamica dell’istanza al listener. Se questa registrazione non avviene, il listener non sa che il database è disponibile per le connessioni.
Per forzare la registrazione del database al listener, connettersi a sqlplus come utente SYSDBA sul server database ed eseguire il comando:
sqlplus / as sysdba
ALTER SYSTEM REGISTER;
exit
Questo comando istruisce il PMON a registrare immediatamente l’istanza al listener. Dopo aver eseguito questo, ripeti lsnrctl status per verificare che il servizio del database sia ora elencato nell’output del listener.
Firewall tra client e server
I firewall sono una causa molto frequente di problemi di connettività, e l’ORA-12541 non fa eccezione. Un firewall, sia esso a livello di sistema operativo (come firewalld su RHEL/CentOS o UFW su Ubuntu) o un apparato hardware di rete, può bloccare la porta TCP utilizzata dal listener (di default la 1521).
Per verificare se la porta 1521 è in ascolto e se il processo listener è ad essa associato sul server database, puoi usare il comando ss (o netstat su sistemi più vecchi):
ss -tlnp | grep 1521
L’output dovrebbe mostrare il listener in ascolto sulla porta:
LISTEN 0 128 *:1521 *:* users:(("tnslsnr",pid=1234,fd=10))
Se l’output mostra che il listener è in ascolto, il problema potrebbe essere un firewall che blocca il traffico in ingresso verso quella porta. Se usi firewalld su un sistema Linux, puoi aggiungere una regola per aprire la porta 1521 (o la porta configurata per il tuo listener) in modo permanente:
sudo firewall-cmd --add-port=1521/tcp --permanent
sudo firewall-cmd --reload
Per UFW su Ubuntu, i comandi sarebbero:
sudo ufw allow 1521/tcp
sudo ufw reload
Ricorda di verificare anche eventuali firewall di rete tra il client e il server. Un network engineer può aiutarti a controllare le regole sui router e gli apparati di sicurezza.
Leggi anche: Linux: Liberare Spazio Disco con 12 Comandi (Guida SysAdmin 2026)
Verificare dal client con tnsping
Il tool tnsping è indispensabile per la diagnosi di problemi di connettività TNS (Transparent Network Substrate). Eseguito dal client, tnsping tenta di contattare il listener sul server, ma non tenta di connettersi al database stesso. Questo lo rende perfetto per isolare se il problema è la raggiungibilità del listener o qualcosa di più profondo a livello di database.
Per usare tnsping, esegui dal client:
tnsping ORCL
Sostituisci ORCL con il nome del servizio o alias definito nel tuo tnsnames.ora. Un output di successo sarà simile a:
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 12-NOV-2026 10:45:00
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle-server.example.com)(PORT = 1521))))
OK (0 msec)
Se tnsping fallisce con un errore come TNS-12541 o TNS-12170, allora il problema è certamente a livello di rete o di listener, prima ancora che il database possa intervenire. Se tnsping ha successo, ma la connessione sqlplus o dell’applicazione fallisce, allora il problema non è l’ORA-12541, ma probabilmente un ORA-12154 (TNS:could not resolve the connect identifier specified) o un problema di autenticazione/autorizzazione al database. Leggi anche: mysqldump Backup: Coerenza e Ripristino MySQL/MariaDB
Far ripartire il listener in automatico
Per evitare che il listener non si avvii dopo un riavvio del server, è essenziale configurarlo per l’avvio automatico. Su sistemi Linux con systemd, questo è gestito dal servizio Oracle. Assicurati che il file /etc/oratab sia configurato correttamente per l’istanza del tuo database, con il flag di avvio automatico impostato su ‘Y’.
Ad esempio, una riga in oratab potrebbe essere:
orcl:/u01/app/oracle/product/19.0.0/dbhome_1:Y
Questo permette agli script di avvio di Oracle (spesso situati in /etc/init.d/dbora o simili) di avviare il listener e il database all’avvio del sistema. Se il listener non si avvia, controlla i log di sistema (journalctl -u oracle-rdbms.service o var/log/messages) e i log del listener (situati in $ORACLE_HOME/network/log/listener.log) per eventuali messaggi di errore durante l’avvio.
Errori comuni e troubleshooting
| Errore o messaggio esatto | Causa | Soluzione |
|---|---|---|
TNS-12541: TNS:no listener |
Listener non avviato, firewall, config errata | lsnrctl start, controlla firewall, listener.ora/tnsnames.ora |
TNS-12560: TNS:protocol adapter error |
Problema a livello di trasporto di rete, listener non risponde | Verifica lsnrctl status, ping/tnsping, firewall, configurazione IP. |
TNS-00512: Connect failed on address parameter |
L’indirizzo specificato nel tnsnames.ora non è raggiungibile o corretto |
Controlla hostname/IP nel tnsnames.ora, risoluzione DNS, firewall. |
Linux Error: 111: Connection refused |
La connessione TCP è stata rifiutata attivamente dal server | Porta chiusa dal firewall, servizio non in ascolto sulla porta. |
ORA-12154: TNS:could not resolve the connect identifier specified |
Il client non riesce a trovare la definizione del servizio nel tnsnames.ora o equivalente |
Controlla TNS_ADMIN, ortografia del servizio, esistenza del file tnsnames.ora. |
Domande frequenti
Cosa significa esattamente TNS in ORA-12541?
TNS sta per Transparent Network Substrate, il livello di rete di Oracle che gestisce la connettività tra i client e i server database. L’errore indica che questo strato di comunicazione non è riuscito a stabilire un contatto con il listener. È il protocollo che permette al client di trovare e connettersi al database senza conoscere i dettagli della rete sottostante.
Il listener deve essere avviato prima del database?
No, non è strettamente necessario. Il listener può essere avviato anche dopo il database. Una volta che il listener è attivo, il processo PMON del database si occuperà automaticamente di registrare l’istanza al listener. Tuttavia, per garantire la connettività immediata all’avvio del database, è buona pratica assicurarsi che il listener sia già in esecuzione.
Posso avere più listener sullo stesso server?
Sì, è possibile configurare più listener sullo stesso server, ognuno in ascolto su porte diverse o su interfacce di rete diverse. Questo può essere utile in architetture complesse o per isolare il traffico di diversi database. Ogni listener avrà il suo file listener.ora o sarà configurato all’interno di un unico listener.ora con alias distinti.
Qual è la differenza tra listener.ora e tnsnames.ora?
listener.ora è un file di configurazione lato server che definisce come il listener deve operare, su quali indirizzi e porte deve ascoltare e quali servizi deve gestire. tnsnames.ora è un file di configurazione lato client che definisce come il client deve connettersi ai database remoti, specificando gli alias dei servizi e i dettagli di connessione al listener di destinazione.
L’ORA-12541 può essere causato da problemi di DNS?
Sì, assolutamente. Se il tnsnames.ora del client o il listener.ora del server utilizzano hostname anziché indirizzi IP, e la risoluzione DNS fallisce o restituisce un indirizzo IP errato, il client non sarà in grado di trovare il listener. Verificare la risoluzione DNS con ping hostname sia dal client che dal server è un passo fondamentale del troubleshooting.
Conclusioni con takeaway operativi
L’errore ORA-12541 TNS:no listener è un classico nel mondo Oracle, ma con una metodologia di debugging chiara, è risolvibile nella maggior parte dei casi in pochi minuti. La chiave è procedere per esclusione, partendo dagli elementi più probabili e basilari:
- Verifica lo stato del listener: È il primo e più rapido controllo. Un listener spento è la causa numero uno.
- Controlla la configurazione: Assicurati che
listener.orasul server etnsnames.orasul client siano allineati in termini di host e porta. - Firewall: Non dimenticare mai i firewall. Sono spesso la causa silenziosa di problemi di connettività, specialmente dopo modifiche alla configurazione di rete o del sistema operativo.
-
tnspingè il tuo amico: Usalo per isolare il problema tra la raggiungibilità del listener e la disponibilità del database.
Adottando queste pratiche, potrai non solo risolvere rapidamente l’ORA-12541, ma anche prevenire future occorrenze, garantendo una maggiore stabilità ai tuoi ambienti Oracle.
Fonti
Aggiornato: novembre 2026