Tradueix

lunes, 19 de julio de 2010

TNS-01189: The listener could not authenticate the user

Problemes amb el Listener. Just acabat d'instal·lar Oracle 11g no podem connectar. Hi ha problemes amb el listener.
executem lsnrtcl.
A la linia de comanda executem status i ens respon:
TNS-01189: The listener could not authenticate the user
si l'intentem engegar amb start , ens respon que ja està engegat.
si l'intentem apagar ens respon insistentment:
TNS-01189: The listener could not authenticate the user
Algun problema amb l'autenticació? Mai hem ficat cap password per al listener...
Busquem a internet el famós error i ens trobem que no som els únics que l'han sorfert. Però les solucions no son gaire bones.
Alguns especulen amb la mala configuració de les variables d'entorn:
http://forums.oracle.com/forums/thread.jspa?threadID=369170
http://forums.oracle.com/forums/thread.jspa?threadID=1028651&tstart=135
Veiem que diu el manual:
http://www.error-code.org.uk/view.asp?e=oracle-tns-01189


Oracle Error :: TNS-01189

The listener could not authenticate the user

Cause

The user attempted to issue a privileged administrative command, but could not be successfully authenticated by the listener using the local OS authentication mechanism. This may occur due to one of the following reasons:
1. The user is running a version of LSNRCTL that is lower than the version of the listener.
descartat: acabo d'instal·lar oracle de zero, completament i amb una sola copia integra.

2. The user is attempting to administer the listener from a remote node.
descartat: L'executo des d'un terminal directe a la màquina via ssh , com sempre.

3. The listener could not obtain the system resources needed to perform the authentication.
descartat: Hi ha recursos suficients i tots els directoris tenen els permisos adequats.



4. The local network connection between the listener and LSNRCTL was terminated unexpectedly during authentication message exchange, such as if LSNRCTL program was suddenly aborted.
descartat: No s'ha produït tal incident.


5. The communication between the listener and LSNRCTL is being intercepted by a malicious user.
descartat: No existeix tal criatura. El sistema no està en producció ni connectat a l'exterior.



6. The software that the user is running is not following the authentication protocol, indicating a malicious user.
descartat: no comencem amb paranoies...

Action

Make sure that administrative commands are issued using the LSNRCTL tool that is of a version equal or greater than the version of the listener, and that the tool and the listener are running on the same node. You can issue the VERSION command to find out the version of the listener. If a malicious user is suspected, use the information provided in the listener log file to determine the source and nature of the requests. Enable listener tracing for more information. If the error persists, contact Oracle Support Services.
Confirmat: la versió és la mateixa.

Sembla un tema de seguretat amb el listener, però no hi he assignat cap password ni cap usuari i en les anteriors versions no ha calgut mai. Provo de treure o desactivar el sistema de password del listener. Res...
Es frustrant, no em deixa apagar el listener ni tampoc engegar-lo perquè ja esta engegat....
Desprès de dues reinstal·lacions d'Oracle per assegurar-nos i unes quantes hores gastades buscant a Google sense resultat, penso amb en el nom del host. I si...?
Efectivament, canvio el nom del host definit a listener.ora i al tnsnames.ora per la IP de la màquina i voilà!!!  Funciona!!!
Sembla que no podia resoldre el nom del host. Probablement s'ha d'afegir el nom en algún fitxer de configuració del sistema per a que el reconegui o algo similar, però de moment, amb la IP ja funciona.
Continuaré investigant...

jueves, 21 de mayo de 2009

Connectar ORACLE i SQL Server

Objectiu final: Accedir mitjançant un DBLINK d'Oracle a una altra bbdd SQLServer.

Material:

  • Fedora Core 5 o superior
  • Oracle 10g (10.2.0) per a Linux
  • SQL Server 2000
Necessitarem:
Instal·lar el unixODBC
  1. Baixar el unixODBC d'aquesta adreça
  2. copiar el fitxer unixODBC*.tar.gz a un directori de treball /home/oracle per exemple
  3. # gunzip unixODBC*.tar.gz
  4. # tar xvf unixODBC*.tar
  5. # cd unixODBC*
  6. # ./configure –prefix=/usr/local –enable-gui=no
  7. # make
  8. # make install
Instal·lar el driver FreeTDS
  1. Baixar el driver de www.freetds.org. download
  2. copiar el fitxer a un directori de treball
  3. # tar -xvzf freetds-stable.tgz
  4. # ./configure –with-tdsver=8.0 –with-unixODBC=/usr/local
  5. # make
  6. # make install
Configurar el TDS
  1. Afegir al fitxer freetds.conf que es trobarà segurament a /usr/local/etc:
[test] --> nom de la connexió
host =
port = (1433 sòl ser el de SQL Server>
tds version = 8.0 (SQL Server 2000 és el 8.0 http://www.freetds.org/userguide/choosingtdsprotocol.htm)

Configurar el unixODBC

  1. Obrir el fitxer obdcinst.ini que hauria d'estar a /usr/local/etc i modificar-lo:
    [TDS]
    Description = FreeTDS driver
    Driver = /usr/local/lib/libtdsodbc.so
    Setup = /usr/local/lib/libtdsodbc.so
    Trace = Yes
    TraceFile = /tmp/freetds.log
    FileUsage = 1
  2. Obrir el fitxer odbc.ini que també hauria d'estar a /usr/local/etc i modificar-lo:
    [test]
    Driver = TDS
    Description = MS SQL Test
    Trace = Yes
    TraceFile = /tmp/mstest.log
    Servername = test
    Database =
    Port = 1433

Provar la connexió a la bbdd
  1. Executar al shell la següent comanda:
    # isql -v   
  2. +---------------------------------------+
    | Connected! |
    | |
    | sql-statement |
    | help [tablename] |
    | quit |
    | |
    +---------------------------------------+
    SQL> select * from "sysObjects";
    Si això funciona vol dir que ens hem connectat correctament
Configurar Oracle per a connectar amb MS SQLServer
  1. Crear un fitxer init.ora al directori $ORACLE_HOME/hs/admin on seria el nom de la connexió nova. Afegim en aquest fitxer les dades que apunten a la nostra connexió:
    • HS_FDS_CONNECT_INFO = el nom de la font de dades odbc (en el nostre cas test). Ha de coincidir amb el DSN
    • HS_FDS_SHAREABLE_NAME = el nom i la ruta del driver manager o driver
    • ODBCINI = el nom i ruta del fitxer de configuració del ODBC
    # This is a sample agent init file that contains the HS parameters that are
    # needed for an ODBC Agent.

    #
    # HS init parameters
    #
    HS_FDS_CONNECT_INFO = test
    HS_FDS_TRACE_LEVEL = 4
    HS_FDS_TRACE_FILE_NAME = /tmp/freetds.trc
    HS_FDS_SHAREABLE_NAME = /usr/local/lib/libodbc.so

    #
    # ODBC specific environment variables
    #
    set ODBCINI=/usr/local/etc/odbc.ini


    #
    # Environment variables required for the non-Oracle system
    #
Modificar el fitxer listener.ora
  1. Afegir un listener al fitxer de configuració listener.ora que trobem al directori $ORACLE_HOME/network/admin:
    SID_LIST_test =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = test)
    (ORACLE_HOME =)
    (PROGRAM = hsodbc)
    (ENVS=LD_LIBRARY_PATH=/lib:)
    )
    )

    test =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1522))
    )
    (ADDRESS_LIST =
    (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
    )
    )
    )
  2. Desprès de modificar el fitxer. Engenguem el nou listener amb la comanda:
    # lsnrctl start test
Modificar el tnsnames.ora
  1. Afegir la entrada nova també al tnsnames.ora:
    test =
    (DESCRIPTION=
    (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT=1522))
    (CONNECT_DATA=
    (SERVICE_NAME=test)
    )
    (HS=OK)
    )
  2. Proveu la nova connexió amb la comanda:
    # tnsping test
Crear el nou database link
  1. Connectar-se a Oracle amb un usuari
    # sqlplus system@
  2. SQL> create database link sqlserverdb connect to user identified by password using 'test';
  3. I per a comprovar que ha funcionat:
    SQL> select * from sysobjects@sqlserverdb;
  4. Si la select retorna resultats és que ho hem fet correctament, evidentment.

miércoles, 28 de enero de 2009

startup automático de las bbdd de oracle

En Linux, una vez creado el proceso en /etc/init.d/ para encender el oracle automaticamente al reiniciar la màquina, no sus olvideis de modificar el fichero /etc/oratab. En el se encuentra una lista de las bbdd que tenemos en la máquina y si queremos que se enciendan o no automaticamente al reiniciar el sistema de la siguiente forma:

:/opt/app/oracle/product/10.2.0/db_1:Y
:/opt/app/oracle/product/10.2.0/db_1:N

Simplemente cambiando Y o N se monta la base de datos escogida al reiniciar Oracle.

miércoles, 21 de enero de 2009

ORA-12500

Las conexiones se estan multiplicando y el uso en general de la bbdd ha empezado a crecer. Empiezan a atacar la bbdd por todas partes. En algunos intentos de conexión ha aparecido el fastidioso error:
ORA-12500: TNS:listener failed to start a dedicated server process
En el sistema los procesos de oracle (ps -A) eran numerosos. Lo curioso és que al principio las conexiones desde SQLDeveloper funcionaban, en cambio las de un cliente desarrollado en NetBeans no. Desconozco la razón de esta discriminación.
Rastreando por internet he llegado a la web donde escribe este señor al que apodaré Boris Yelsin (que por cierto, se merece el cielo y mucho mas) y he comprobado el parámetro de procesos. Según el init.ora o segun el TOAD o segun el comando "show parameter process" tenia 150 procesos como máximo.
Despues he comprobado en el fichero /opt/u01/app/oracle/admin//bdump/alert_.log
para ver si hay algún error mas y he encontrado este:
kkjcre1p: unable to spawn jobq slave process
Buscando en internet al respecto como siempre llegamos al mismo sitio (Boris Yelsin otra vez): http://www.dba-oracle.com/t_kkjcre1p_unable_to_spawn.htm
Efectivamente parece que la máquina no tiene suficientes recursos. La cuestión és si el problema es de la RAM o bien de la limitación del parámetro de Oracle para generar mas procesos para cada nueva conexión. Según parece hay tres posibilidades:
  1. El parámetro process es demasiado pequeño
  2. La RAM de la máquina es demasiado limitada
  3. El job_queue_processes es 0
Creo que de la RAM no es problema así que aumentaré el valor del parámetro. Para ello:
  1. entrar en: sqlplus /nolog
  2. connect sys as sysdba;
  3. ALTER SYSTEM SET processes=500 SCOPE=SPFILE;
    (el valor inicial era 150. Scope=spfile hace que el cambio afecte al spfile, con lo que al arrancar la bbdd de nuevo tendria que canviarse. Ojo, NO afecta al pfile, o sea, al init.ora, con lo que si queremos cambiarlo en el init.ora hay que hacerlo en el fichero y convertir el init.ora en un spfile. Otro rato veremos como hacer esta operación)
  4. shutdown immediate (hay que bajar la bbdd para que tenga efecto el cambio)
  5. startup
  6. show parameter process; --para comprobar que realmente ha cambiado.
La lucha sigue!!!

Introducción

Este es el n-esimo dia de mi guerra contra el sistema de base de datos Oracle. Y és una autentica guerra pues de tanto en cuanto me peleo con el, con todas y cada una de sus tropas. Pero hoy es diferente. La diferència es que después de la última batalla he decidido empezar este diario de guerra. Espero que sea útil, tanto para mi como para la gente en general, pues así poder luchar en futuras batallas con la ventaja que proporciona la experiencia.
Que la suerte nos acompañe!!

Oracle Wars © 2008. Template by Dicas Blogger.

TOPO