lunes, 18 de mayo de 2015

Error: TNS:listener: all appropriate instances are blocking new connections

Solventando el error: TNS:listener: all appropriate instances are blocking new connections

En cuanto a ORACLE, seria importante hacerse las siguiente preguntas:

¿Cómo saber si una base de datos Oracle, esta activa?

SELECT open_mode 
FROM   v$database; 

Si el valor es:

  • 'MOUNTED', la base de datos esta montada 
  • 'READ WRITE', entonces asumimos que la base de datos esta activa 
  • 'READ ONLY' , entonces podría ejecutar consultas en modo de sólo lectura, pero no esta activa.
SELECT controlfile_type 
FROM   v$database; 


Si el valor es:

  • 'CURRENT', la base de datos esta activa
  • 'STANDBY', la base de datos esta en espera.


La siguiente consulta muestra el estado de la instancia, su nombre y su estado.

SELECT instance_name,database_status,status,instance_role,active_state 
FROM   v$instance; 

Si el valor STATUS es: 
  • STARTED, indica que la base de datos esta activa pero no montada
  • MOUNTED, indica que la base de datos esta montada.
  • OPEN, indica que el esta abierta y activa
  • OPEN-MIGRATE, indica que esta en actualización

Si el valor DATABASE_STATUS es: 
  • ACTIVE
Si el valor ACTIVE_STATE es: 
  • 'NORMAL' indica la base de datos está en un estado normal.
  • 'QUIESCING' indica que la sentencia ALTER SYSTEM QUIESCE RESTRICTED ha sido ejecutada: no hay nuevas transacciones de usuario, consultas o  PL/SQL son procesados en este caso. 
  • 'QUIESCED', es Inmovilizado. indica que la sentencia RESTRINGIDO ALTER SISTEMA QUIESCE se ha ejecutado: Transacciones de usuario, consultas o declaraciones PL / SQL emitidas después de la instrucción no se procesan.
¿Verificamos las sessiones? Posiblemente existan mas que la licencia permitida

SELECT Nvl(s.username, '(oracle)') AS username,s.osuser,s.sid,s.serial#,p.spid, 
       s.lockwait,s.status,s.MODULE,s.machine,s.program, 
       To_char(s.logon_time, 'DD-MON-YYYY HH24:MI:SS') AS logon_time 
FROM   v$session s,v$process p 
WHERE  s.paddr = p.addr 
       AND s.username = 'PED_CDD' -- Change the username
ORDER  BY s.username,s.osuser; 


¿Cuantos cursores están permitidos y cuantos se abrieron?

SELECT Max(a.value) AS highest_open_cur,p.value AS max_open_cur 
FROM   v$sesstat a,v$statname b,v$parameter p 
WHERE  a.statistic# = b.statistic# 
       AND b.name = 'opened cursors current' 
       AND p.name = 'open_cursors' 
GROUP  BY p.value; 

¿Cuantos procesos, sessiones y que ultima sql ejecutaron ?

SELECT sess.process,sess.status,sess.username,sess.schemaname,SQL.sql_text 
FROM   v$session sess,v$sql SQL 
WHERE  SQL.sql_id(+) = sess.sql_id; 

SELECT sess.process,sess.status,sess.username,sess.schemaname,SQL.sql_text 
FROM   v$session sess,v$sql SQL 
WHERE  SQL.sql_id(+) = sess.sql_id 
       AND sess.TYPE = 'USER' 

SELECT S.username,s.sid,s.osuser,t.sql_id,sql_text 
FROM   v$sqltext_with_newlines t,v$session s 
WHERE  t.address = s.sql_address 
       AND t.hash_value = s.sql_hash_value 
       AND s.status = 'ACTIVE' 
       AND s.username <> 'SYSTEM' 
ORDER  BY s.sid,t.piece 

Solucion final:

Shutdown Inmediate and Start mount.  LSNRCTL for a STOP and START