lunes, 6 de octubre de 2014

Conectar por SSH con ROOT en Solaris

Buenas,

en algún momento necesitaremos conectar por ssh con el usuario root, esta conexión está deshabilitada por defecto por cuestiones de seguridad en el Solaris 10.

¿Cómo conectar entonces?
Necesitaremos modificar el fichero: /etc/ssh/sshd_config En ese mismo fichero alteramos la entrada: PermitRootLogin, que estará a "No" y le ponemos "Yes". Después de eso reiniciamos el servicio de ssh con: svcadm restart ssh y listo.

miércoles, 16 de abril de 2014

ORA-12520 TNS:listener could not find available handler for requested type of server

Buenas de nuevo,

no es la primera vez que me encuentro este error en el trabajo. La recomendación que se encuentra por Internet a poco que uno navegue es aumentar el tamaño del parámetro "processes", lo que es sencillo pero implica parar la instancia de la base de datos, o instancias en caso de un RAC. La cuestión es que tras aplicar esa solución, pasé de 1500 procesos a 1750 por Instancia, con el tiempo, ha vuelto a aparecer en mis Sistemas.

Para mi la solución no es aumentar hasta el infinito el valor de dicho parámetro, así que pretendo monitorizar el número de procesos consumidos realmente en la Base de Datos, para ello, y dado que Enterprise Manager no me proporciona esta información (no al menos que yo haya sido capaz de encontrar) me he creado un pequeño script que he programado cada 30 minutos.

¿Cómo consultar el número de procesos y sesiones en cada instancia?

select * from gv$resource_limit where resource_name in ('processes','sessions');

Puedes incluir la select en un fichero ".sql" para poder ejecutarlo mediante un script.

--Vuelca el numero de procesos y sesiones ejecutándose en cada instancia en un fichero.
spool /tmp/procesos_sesiones.cvs
set lines 100
set colsep ";"
select * from gv$resource_limit where resource_name in ('processes','sessions');
spool off


Como veis, he formateado la salida con ";" como separador para poder emplear el formato "cvs". Conforme obtenga más resultados iré exponiéndolos.

Sistema:
 SO. Solaris 10
 BD. Oracle 11gR1
 Hardware: Oracle M5000

martes, 8 de abril de 2014

ORA-12514: TNS:listener does not currently know of service requested in connect

Esta mañana creé un "DBLINK" en la Base de Datos, como tantas otras veces, pero no funcionaba, cada vez que se intentaba ejecutar una Select daba el siguiente error:


SQL> select * from USER.QQ@DBLTEST;

ORA-12514: TNS:listener does not currently know of service requested in connect

Como he dado muchas vueltas por google intentando averiguar la causa y no he encontrado nada al respecto, creo esta entrada por si a alguien le ocurre lo mismo.

El DBLink se creó como:

SQL > create public database link DBLTEST connect to jp identified by jp23 USING 'BDjp';

Exactamente igual que otros muchos "DBlinks" ya existentes.

En el "tnsnames.ora" se configuró la cadena de conexión:

BDjp =
(DESCRIPTION = 
 (ADDRESS_LIST = 
  (ADDRESS = 
   (PROTOCOL = TCP)
    (HOST = 192.168.1.10) 
    (PORT = 1521))) 
   (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SERVICE_NAME = BDjp)))

Igual que otros servicios que también están en el fichero "tnsnames.ora" y tienen asociados DBLINKS. Al hacer "tnsping" obtenía respuesta sin problemas:

bash-3.00$ tnsping BDjp

TNS Ping Utility for Solaris: Version 11.2.0.1.0 - Production on 08-APR-2014 13:19:51

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/product/11.2.0/APRIL/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.107.49.217)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = GRH41DAE1)))
OK (10 msec)


A pesar de todo esto seguía sin funcionar.

Solución:

Cambiar la cadena de conexión indicada en el "tnsnames.ora", en lugar de "service_name" había que indicar "SID = GRH41DAE1". Quedando así:

BDjp =
(DESCRIPTION = 
 (ADDRESS_LIST = 
  (ADDRESS = 
   (PROTOCOL = TCP)
    (HOST = 192.168.1.10) 
    (PORT = 1521))) 
   (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SID = BDjp)))Un pequeño detalle que pasó inadvertido por "copy-paste" de otras cadenas en el tnsnames.ora y porque funcionaba el comando tnsping, pero no el acceso a través de "DBlink".

Más información a este respecto:
http://docs.oracle.com/cd/B28359_01/network.111/b28317/tnsnames.htm#NETRF279
En la sección de "Connect Data"

Conclusión:
Cuidado con el "copy-paste" y cuidado con lo que parece funcionar "de primeras".

Sistema en el que se creó el DBLink:
Base de Datos: Oracle RAC 11gR1.0.7
Sistema Operativo: Solaris 10 Server
Máquinas:
Oracle (antes SUN) M5000

Justificación

Buenas,

hace tiempo me decidí a hacer un blog en el que comentar aquellas cosillas que me iba encontrando en el trabajo del día a día y compartirlas para quién pudiera servir de ayuda. La cuestión es que lo hice durante algún tiempo, cayó en el olvido y, al igual que otros blogs en los que escribía, fueron eliminados. Ahora, años después, me animo de nuevo a emprender esta tarea...

Un saludo y espero que te sirva de ayuda.