sábado, 3 de marzo de 2012

sqlplus, ORA-27121 y Linux Error 13

Tienes una base de datos Oracle corriendo y todo está bien; puedes entrar desde el servidor como sysdba sin ningún problema:

oracle@myserver:~$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 9 13:21:46 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

También puedes conectarte a la base de datos usando un listener, pero hay problemas cuando intentas conectarte con un usuario no privilegiado:

myuser@myserver:~$ sqlplus myusr/myusr@XE

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 9 13:26:27 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> exit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
myuser@myserver:~$ sqlplus myusr/myusr

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 9 13:19:12 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

ERROR:
ORA-01034: ORACLE not available
ORA-27121: unable to determine size of shared memory segment
Linux Error: 13: Permission denied


Enter user-name:
myuser@myserver:~$ set | grep ORA
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
ORACLE_SID=XE

Que está pasando aquí? La base de datos está arriba y abierta, puedes conectarte como sysdba o usando un listener, pero no puedes conectarte a la base de datos con un usuario ordinario en el servidor.

El problema es muy simple: tienes que cambiar los permisos del ejecutable $ORACLE_HOME/bin/oracle:

oracle@myserver:~$ ls -la $ORACLE_HOME/bin/oracle
-rwxr-x--x 1 oracle dba 74016776 May 24 2006 /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle
oracle@myserver:~$ chmod ug+s $ORACLE_HOME/bin/oracle
oracle@myserver:~$ ls -la $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle dba 74016776 May 24 2006 /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle

Haciéndolo podrás conectarte a la base de datos Oracle en el servidor con cualquier cuenta:

myuser@myserver:~$ sqlplus myusr/myusr

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 9 15:01:10 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Otro problema que podría darse debido a la misma causa raíz y con la misma solución es un error ORA-12547:

myuser@myserver:~$ sqlplus myusr/myusr

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 9 15:01:10 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

ERROR:
ORA-12547: TNS:lost contact

Puede ser resuelto de la misma forma:

oracle@myserver:~$ chmod 6751 $ORACLE_HOME/bin/oracle
oracle@myserver:~$ ls -la $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle dba 74016776 May 24 2006 /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle

Más información:

ora- shared memory segment
ORA-12547: TNS:Lost Contact From SqlPlus [ID 422173.1]

No hay comentarios.:

Publicar un comentario