Oracle JDBC: nome utente / password non validi (ora-01017)

Ho uno strano problema con la connessione jdbc a un server di database Oracle.

Abbiamo applicazioni su un server tomcat in esecuzione. Queste applicazioni utilizzano un database Oracle. Tutte le applicazioni utilizzano le stesse credenziali.

Applicazioni che funzionano bene tutto il giorno. Di notte non c’è attività. Al mattino riceviamo alcuni (2 o 3) errori ORA-01017 (nome utente / password non validi) quando le applicazioni cercano di riconnettersi al database.

Quindi i lavori di riconnessione e le applicazioni funzioneranno normalmente.

Funziona per alcuni giorni (circa 5 giorni) e poi uno o più blocchi di applicazioni! Tutti i tentativi di riconnessione falliscono.

Abbiamo rintracciato le comunicazioni di rete e abbiamo scoperto che se la connessione fallisce con ORA-01017 NO CREDENTIALS dove inviato.

Naturalmente nessuno tocca il sistema di notte.

Un tentativo di soluzione è che riavviamo il server tomcat ogni mattina alle 6 per pulire ogni cache o pool di connessione. Non aiuta

Cosa c’è che non va? Qualche idea?

Il continuo intervallo di 5 giorni nell’aspetto di un blocco totale (mentre si ripete ogni giorno) mi sembra molto strano.

Config :

Database Oracle 10.2, JDBC Driver 11.2 thin, tomcat 6.0.24, JDK 6, OS è Windows, alcune delle applicazioni sono Dialoghi per Avaya Voice Portal 5.0.

Le nostre applicazioni (non VP) utilizzano connessioni semplici (nessun raggruppamento).


Il sistema è stato originariamente configurato su un server Windows 2003 con una WAN tra server apserver e tomcat.

Il sistema viene ora migrato su un server Linux (CentOS) vicino al server del database e funziona correttamente. No ORA-01017 più.

Dispari. Qualche idea:

  1. Registrare il nome utente e la password per alcuni giorni solo per assicurarsi che siano corretti. Alcuni bug nel codice potrebbero sovrascrivere un valore che non ti aspetti.

  2. Considera di utilizzare JNDI con un pool di connessioni fornito da Tomcat. DBCP ha alcune opzioni davvero avanzate per verificare se una connessione è ancora triggers e come ricollegarla. Dopodiché, non dovresti più vedere alcun problema relativo alla connessione nei tuoi log. Ciò migliorerebbe anche la sicurezza perché nessuna delle applicazioni ha bisogno di conoscere la password del DB più.

  3. Potrebbe essere un problema con perdite di risorse (accade se un’app non restituisce mai la connessione), ma mi aspetterei un messaggio di errore diverso, quindi.

  4. Alcuni database (DB2, H2) consentono di creare viste che rendono visibili tabelle remote da altri database come tabelle locali. Non sono sicuro che Oracle supporti questo, ma se lo fa, forse il nome utente / password per questa tabella remota è sbagliato.

Considera anche i punti in questo post del blog: i consigli di Oracle ORA-01017

A prima vista, nulla nel post potrebbe causare problemi, ma forse alcuni script stanno manipolando il nome tnsnames.ora (ad esempio, distribuendo una nuova copia).

Oppure il DBA ha disabilitato tutti gli utenti per il tempo del backup giornaliero.

Controllerei i registri di ascolto e traccia di Oracle. Come ha detto Aaron Digulla, sembra un esaurimento delle risorse.