Como solucionar los errores ORA-65096 ORA-65049 en Oracle 12c

Pues eso amig@s,

Si al crear un usuario, el sqlplus/tora nos devuelve errores del tipo ORA-65096 y ORA-65049 se debe a que tenemos un contenedor creado en la bbdd actual. Ya explico en un articulo anterior se que van los CDB y PDB así que me voy a ahorrar la explicación :p

Por ejemplo al crear un usuario en una bbdd con contenedor nos encontraremos con un error similar a este:

SQL> create user prueba identified by prueba;
create user prueba identified by prueba
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

Según la explicación del error:

oerr ora 65096
65096, 00000, "invalid common user or role name"
// *Cause:  An attempt was made to create a common user or role with a name
//          that wass not valid for common users or roles.  In addition to
//          the usual rules for user and role names, common user and role
//          names must start with C## or c## and consist only of ASCII
//          characters.
// *Action: Specify a valid common user or role name.
//

SQL> create user prueba identified by prueba container=current;
create user prueba identified by prueba container=current
                               *
ERROR at line 1:

ORA-65049: creation of local user or role is not allowed in CDB$ROOT


oerr ora 65049
65049, 00000, "creation of local user or role is not allowed in CDB$ROOT"
// *Cause:   An attempt was made to create a local user or role in CDB$ROOT.
// *Action:  If trying to create a common user or role, specify CONTAINER=ALL.

//


Ahora bien, para solucionar esto (siempre y cuando comencemos a trabajar con contenedores), debemos decidir si el usuario va a administrar multiples CDB's o solo un PDB, para ello debemos configurar el contenedor correcto en nuestra bbdd, así que comprobaremos los PDB's disponibles:

SQL> select PDB from v$services;

PDB
------------------------------
T12P2
T12P1
CDB$ROOT
CDB$ROOT
CDB$ROOT
CDB$ROOT

6 rows selected.

Para crear un usuario comun en el contenedor, debemos comprobar el nombre de la conexion:

SQL> show con_name

CON_NAME
------------
CDB$ROOT

Conociendo el nombre del contenedor, lo indicamos en el comando para crear el usuario:

create user c##prueba identified by prueba;

Para crear un usuario local primero debemos identificar el contenedor:

SQL> alter session set container=T12P1;

Session altered.

SQL> show con_name

CON_NAME
-----------
T12P1

Al definir el contenedor, ya no tendremos que utilizar el c## delante del usuario:

SQL> create user prueba identified by prueba;

User created.

Ahora podremos ver ambos usuarios (común y local) en la tabla DBA_USERS:

SQL> select username from dba_users where username like '%PRUEBA%';

USERNAME
-----------------------------------------------------------------
C##PRUEBA
PRUEBA

Más información > Aquí

Espero que les resulte útil.
Salu2.
Share on Google Plus
    Blogger Comment

3 comentarios:

Oscar Canek dijo...

Claro y conciso, muy buen post.

Carlos Alberto dijo...

buenos días, tengo una duda estoy realizan los pasos que estas sugiriendo para solventar el error Ora-65096 pero me están pasando que el error persiste.


Realizo la conexión con SQLPLUS y arrojo los parámetros que estas dando (hasta allí todo bien) arrojo el comando para crear el usuario y se sale el mismo error, ya no se que mas puedo hacerle podrían ayudarme?

Guillem Martinez dijo...

Buen post!

La unica pega que le encuentro es que se ve muy oscuro el texto... por lo demas 10/10

Saludos,