SafeChildren Banner

Havoc Oracle Solaris Experts

miércoles, 10 de marzo de 2010

ORA-01031 Al Conectar con Oracle con sqlplus / as sysdba

Introducción
Puede que nos pasa que al intentar conectarnos a nuestra Oracle con "sqlplus / as sysdba", nos responda con el error ORA-01031: Insufficient privileges y nos pida el usuario y contraseña de nuevo.

Este problema se debe principalmente a problemas con los propietarios de los archivos de Oracle y/o sus grupos, me explico, si instalamos Oracle RDBMS con el usuario oracle y grupo dba pero por cualquier motivo cambiamos el grupo del usuario oracle a otro, entonces Oracle -el motor- no autenticará al usuario del sistema oracle porque no pertecene al grupo que él tiene almacenado -dba-

Para solucionarlo, primero debemos verificar los permisos de los archivos: listener.ora, sqlnet.ora y tnsnames.ora que se encuentran en <TNS_ADMIN> que pertenezcan al usuario que debe ejecutar Oracle RDMS

$ id -p
uid=2011(oracle) gid=2010(dba) projid=106(group.dba)
$ ls -l $ORACLE_HOME/network/admin/*.ora
-rw-------   1 oracle   dba         1690 ago 18  2009 /u01/app/oracle/10.2/db/network/admin/listener.ora
-rw-r-----   1 oracle   dba           91 ago 12  2009 /u01/app/oracle/10.2/db/network/admin/sqlnet.ora
-rw-r-----   1 oracle   dba         8391 nov 17 16:56 /u01/app/oracle/10.2/db/network/admin/tnsnames.ora
A continuación, debemos verificar que en nuestro $TNS_ADMIN/sqlnet.ora tenemos correctamente la búsqueda de nombre -en mi caso sólo files-

$ cat $ORACLE_HOME/network/admin/sqlnet.ora
sqlnet.expire_time = 2
sqlnet.inbound_connect_timeout = 90
names.directory_path=(TNSNAMES)
Por último, el más importante, con qué usuario y grupo se linkaron los binarios de Oracle RDBMS en la instalación, para ello, debemos buscar en el archivo <config.s> la entrada 0x0008    15 donde se muestra que grupo tiene Oracle RDBMS asignado

$ cat $ORACLE_HOME/rdbms/lib/config.s |grep "0x0008"
/* 0x0008         26 */         .type   ss_dba_grp,#object
/* 0x0008         27 */         .size   ss_dba_grp,16
/* 0x0008         13 */         .align  8
/* 0x0008         15 */         .ascii  "dba\0"
Llegados a este punto, si nuestro valor es diferente -que era nuestro caso de ejemplo- tenemos que asignar el grupo <dba> a nuestro usuario <oracle> o, hacer un relink de Oracle -esto lo veremos en otro post-.

Para modificar nuestro usuario <oracle> y añadir como grupo <dba>, simplemente utilizaremos el comando <usermod> con la opción -G para añadirlos
# usermod -G dba,oinstall oracle
Conclusión
Las instalaciones de Oracle tienen muchas configuraciones y parámetros unidos al usuario y al nombre del host, por ello, como recomendación, hacer los cambios antes de instalar los productos de Oracle, os ahorrará muchos disgustos

Referencias

No hay comentarios:

Publicar un comentario