6f429244e498457b8400e72e4af683b0 Alberto Blog: WARNING: inbound connection timed out (ORA-3136)

martedì 3 maggio 2011

WARNING: inbound connection timed out (ORA-3136)

Nel log file di alert del DB Oracle è possibile trovare questa segnalazione:

WARNING: inbound connection timed out (ORA-3136)

Significa che un tentativo di connessione è stato fatto, ma la sessione di autenticazione non è stata fornita prima del parametro impostato in SQLNET.INBOUND_CONNECT_TIMEOUT.
Questo parametro si trova nel file sqlnet.ora in $ORACLE_HOME/network/admin/ ed è impostato a 60 secondi.

La segnalazione può essere trascurata se si verifica sporadicamente ma se dovesse essere una costante quotidiana l'Oracle doc prevede 2 action per questa anomalia:

1) Check SQL*NET and RDBMS log for trace of suspicious connections.
2) Configure SQL*NET with a proper inbound connect timeout value if necessary.

Bisogna quindi analizzare bene la situazione soprattutto se si sospetta qualche connessione strana come al punto 1 prima ovviamente di apporre qualsiasi modifica.
Tuttavia si può procedere a impostare il parametro SQLNET.INBOUND_CONNECT_TIMEOUT con un valore appropriato nel file $ORACLE_HOME/network/admin/sqlnet.ora come richiesto nel punto 2.

Ma se non il file non ci fosse nel percorso indicato e ci fosse solo il tnsnames.ora?
Il listener in questo caso ci darebbe un grosso aiuto con:

$ lsnrctl

LSNRCTL for Solaris: Version 10.2.0.5.0 - Production xxxxxxxxxxxxxxx

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> set help
The following operations are available after set
An asterisk (*) denotes a modifier or extended command:

password                    rawmode                  
displaymode                 trc_file                  
trc_directory               trc_level                
log_file                    log_directory            
log_status                  current_listener          
inbound_connect_timeout     startup_waittime          
save_config_on_stop         dynamic_registration

LSNRCTL>set inbound_connect_timeout 3 (per esempio)

Impostando per noi il nuovo parametro.....

Senza questo parametro, una connessione client/server può rimanere aperta all'infinito senza autenticazione. Le connessioni senza autenticazione possono introdurre possibili attacchi di tipo denial-of-service, per cui dei client malintenzionati possono tentare di tempestare il server DB con richieste di connessioni che ovviamente consumano risorse.

Ci sono 2 link molto utili tratti dai documenti Oracle che spiegano molto bene i vari scenari, anche perchè per una protezione totale è posibile anche impostare un secondo parametro INBOUND_CONNECT_TIMEOUT_listener_name nel file listener.ora.

Bisogna fare attenzione perchè il parametro  SQLNET.INBOUND_CONNECT_TIMEOUT non richiede riavvio del DB visto che viene letto quando una connessione viene richiesta mentre il INBOUND_CONNECT_TIMEOUT_listener_name viene letto quando viene avviato il servizio listener quindi per poter attivare il parametro con i nuovi settaggi bisogna riavviarlo.

I settaggi dei parametri di networking di Oracle sono fondamentali per costruire delle connessioni client/server affidabili e performanti, tuttavia certe volte questi  vengono sottovalutati creando non pochi problemi.

Di seguito i links della documentazione Oracle e un doc id di Metalink (per chi ha accesso):

http://download.oracle.com/docs/cd/B19306_01/network.102/b14213/listener.htm#sthref833
http://download.oracle.com/docs/cd/B19306_01/network.102/b14213/sqlnet.htm#sthref481

Metalink doc Id #465043.1

Nessun commento:

Posta un commento