Hola, tengo un servidor con Oracle 11g sobre Linux y varios servidores de Terminal Server con aplicativos de facturación, contabilidad, almacén y RRHH que atacan a la BD de Oracle.
Hasta ahora me habían funcionado bien, tanto los Terminal Server como el servidor de Oracle. Pero recientemente están dando errores de conexión a la base de datos Oracle y ocurre de vez en cuando y casi siempre a los mismos usuarios y en las mismas aplicaciones.
El error que aparece en la aplicación de Contabilidad y Facturación no es muy descritivo, básicamente dice que no se ha podido conectar con la base de datos Oracle, aceptas el error y continúa trabajando.
¿A qué puede ser debido? no tengo conocimientos de Oracle y no sé qué hacer.
Hola, tengo un servidor con Oracle 11g sobre Linux y varios servidores de Terminal Server con aplicativos de facturación, contabilidad, almacén y RRHH que atacan a la BD de Oracle.
Hasta ahora me habían funcionado bien, tanto los Terminal Server como el servidor de Oracle. Pero recientemente están dando errores de conexión a la base de datos Oracle y ocurre de vez en cuando y casi siempre a los mismos usuarios y en las mismas aplicaciones.
El error que aparece en la aplicación de Contabilidad y Facturación no es muy descritivo, básicamente dice que no se ha podido conectar con la base de datos Oracle, aceptas el error y continúa trabajando.
¿A qué puede ser debido? no tengo conocimientos de Oracle y no sé qué hacer.
En primer lugar intenta ver el log del cliente de Oracle que tendrás instalado en los equipos con Terminal Server, si usas el cliente 11g el log suele estar en la carpeta de Oracle de cada usuario, en:
C:\Documents and Settings\XXX\Oracle\oradiag_XXX\diag\clients\user_XXX\host_ZZZ_80\trace\sqlnet.log
(las carpetas pueden variar en función del tipo de configuración e instalación de Oracle Client, si no la encuentras busca en el disco duro "sqlnet.log")
Abre dicho fichero con el bloc de notas y revísalo, ahí suelen venir los posibles errores de conexión con la base de datos en los servidores clientes. Si ves algún error nos lo posteas y lo estudiamos.
En primer lugar intenta ver el log del cliente de Oracle que tendrás instalado en los equipos con Terminal Server, si usas el cliente 11g el log suele estar en la carpeta de Oracle de cada usuario, en:
C:\Documents and Settings\XXX\Oracle\oradiag_XXX\diag\clients\user_XXX\host_ZZZ_80\trace\sqlnet.log
(las carpetas pueden variar en función del tipo de configuración e instalación de Oracle Client, si no la encuentras busca en el disco duro "sqlnet.log")
Abre dicho fichero con el bloc de notas y revísalo, ahí suelen venir los posibles errores de conexión con la base de datos en los servidores clientes. Si ves algún error nos lo posteas y lo estudiamos.
Sí que tengo ese fichero, mirando en uno de los usuarios a los que le suele salir el error me aparece lo siguiente, que coincide en la hora con el error que da en la aplicación de contabilidad y facturación:
Fatal NI connect error 12516, connecting to:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=SERVIDOR_ORACLE)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=BDORACLE)(CID=(PROGRAM=C:\App\Conta\contabilidad.exe)(HOST=SERVIDOR_TS_1)(USER=XXX))))
VERSION INFORMATION:
TNS for 32-bit Windows: Version 11.2.0.3.0 - Production
Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 11.2.0.3.0 - Production
Time: 17-FEB-2015 12:29:07
Tracing not turned on.
Tns error struct:
ns main err code: 12564
TNS-12564: TNS:connection refused
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Además veo que el error se repite varias veces ¿a qué puede ser debido? que yo sepa no hemos hecho ningún cambio de configuración ni de Oracle ni de las aplicaciones.
Sí que tengo ese fichero, mirando en uno de los usuarios a los que le suele salir el error me aparece lo siguiente, que coincide en la hora con el error que da en la aplicación de contabilidad y facturación:
Fatal NI connect error 12516, connecting to:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=SERVIDOR_ORACLE)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=BDORACLE)(CID=(PROGRAM=C:\App\Conta\contabilidad.exe)(HOST=SERVIDOR_TS_1)(USER=XXX))))
VERSION INFORMATION:
TNS for 32-bit Windows: Version 11.2.0.3.0 - Production
Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 11.2.0.3.0 - Production
Time: 17-FEB-2015 12:29:07
Tracing not turned on.
Tns error struct:
ns main err code: 12564
TNS-12564: TNS:connection refused
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Además veo que el error se repite varias veces ¿a qué puede ser debido? que yo sepa no hemos hecho ningún cambio de configuración ni de Oracle ni de las aplicaciones.
El error puede ser debido a varios factores, tal vez hayáis incrementado el número de usuarios que utilizan las aplicaciones o alguna otra aplicación que usa la base de datos Oracle y estáis llegando al límite de conexiones simultáneas máximo o al límite de procesos de Oracle.
Esto lo puedes ver desde la línea de comandos de Oracle (con sqlplus) ejecutando:
Código:
select count(*) from v$process;
Esto de dará el número de procesos abiertos actualmente en Oracle.
Para ver el número de sesiones:
Código:
select count(*) from v$sessions;
Las consultas SQL anteriores te mostrarán el número de procesos y de sesiones abiertas actualmente. Si quieres ver el número máximo de procesos y sesiones que admite tu BD Oracle ejecuta, para el número de procesos:
Código:
show parameter processess;
Y para el de sesiones:
Código:
show parameter sessions;
El número de procesos (processes) a establecer en Oracle varía en función de la carga de trabajo que vaya a recibir. Lo aconsejable es establecer un número e ir monitorizando con algún software, como por ejemplo Pandora FMS:
(el caso anterior es para las sesiones, para los procesos es similar cambiando v$session por v$process)
Y si en algún momento alcalza el límite ir ampliando poco a poco hasta que se quede a unos cuantos de alcanzarlo.
Para el caso del número de sesiones, Oracle recomienda usar la siguiente fórmula:
Número actual de usuarios + Número de procesos en segundo plano + 10% de las cantidades anteriores para contemplar los procesos recursivos
Al igual que con los procesos, para las sesiones, también es recomendable monitorizarlas e ir ajustándolas a lo que realmente necesite nuestra organización:
Para modificar el valor de los parámetros anteriores puedes ejecutar, en SQL Plus:
Código:
alter system set processes = 500 scope=spfile;
alter system set sessions = 555 scope=spfile;
Con "escope=spfile" harás que el cambio se guarde en el fichero de configuración de Oracle, el cambio se aplicará en el próximo reinicio de la base de datos. Estos parámetros no pueden modificarse online (con scope=both), si lo intentas te devolverá un error: ORA-02095: specified initialization parameter cannot be modified.
Por lo tanto para aplicar los cambios tendrás que reiniciar la base de datos (teniendo en cuenta que durante el reinicio no se podrá trabajar con Oracle) con:
Código:
shutdown immediate
y
Código:
startup
Ten en cuenta también que en Oracle 11g al modificar el parámetro "processes" Oracle calculará y establecerá el valor óptimo para el parámetro "sessions" por lo que aunque establezcas 500 probablemente Oracle incremente ese número.
Ultima edición por alonsojpd el Mar Feb 17, 2015 11:10 pm, editado 2 veces
El error puede ser debido a varios factores, tal vez hayáis incrementado el número de usuarios que utilizan las aplicaciones o alguna otra aplicación que usa la base de datos Oracle y estáis llegando al límite de conexiones simultáneas máximo o al límite de procesos de Oracle....niciar Oracle) y que se guarde en el fichero de configuración para cuando se reinicie Oracle también se aplique.
Genial tu explicación, efectivamente parece que estaba rozando el límite de processess, supongo que en algún momento lo intentaría sobrepasar y de ahí el error TNS-12564: TNS:connection refused Oracle 11g.
Una duda ¿hay alguna forma de saber cuántas sesiones hay consumidas por aplicación (ejecutable o algo)? es que efectivamente hemos instalado una nueva aplicación web que usa también Oracle y no sabemos si es esta la que está consumiendo muchas sesiones.
Una duda ¿hay alguna forma de saber cuántas sesiones hay consumidas por aplicación (ejecutable o algo)? es que efectivamente hemos instalado una nueva aplicación web que usa también Oracle y no sabemos si es esta la que está consumiendo muchas sesiones.
Sí que la hay, puedes usar la siguiente consulta SQL, te devolverá el número de sesiones consumidas por cada aplicación y también de los procesos en segundo plano de Oracle:
Código:
select count(*), program from v$session group by program;
Sí que la hay, puedes usar la siguiente consulta SQL, te devolverá el número de sesiones consumidas por cada aplicación y también de los procesos en segundo plano de Oracle:
Código:
select count(*), program from v$session group by program;
Efectivamente era la aplicación web, que realiza varias conexiones a Oracle.
Muchas gracias por la ayuda.
Solucionado y funcionando correctamente.
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A