error: ORA-65096: nombre de usuario o rol común no válido en Oracle

118

Acabo de instalar oracle11g y le faltaba el esquema de Scott. Entonces estoy tratando de generarlo yo mismo. Obtuve el script sql del esquema "Scott", pero cuando trato de ejecutar la consulta "crear usuario Scott identificado por tiger;" muestra el siguiente error:

ORA-65096: nombre de rol o usuario común no válido en Oracle.

Básicamente, no me permite crear un usuario "Scott". ¿Por qué es así y cómo puedo solucionar mi problema?

enu
fuente
8
Eso es imposible de tener 11g, deberías estar encendido 12c.
Lalit Kumar B
¿Quizás instaló un cliente 11g, pero se está conectando a una base de datos 12c? ¿Qué instalaste exactamente?
Alex Poole
1
Agregue C ## antes del nombre de usuario.
Sathvik

Respuestas:

344

PELIGRO

La configuración de parámetros no documentados como este (como se indica con el subrayado inicial) solo debe realizarse bajo la dirección del Soporte de Oracle. Cambiar dichos parámetros sin dicha guía puede invalidar su contrato de soporte. Así que haz esto bajo tu propio riesgo.

Específicamente, si establece "_ORACLE_SCRIPT"=true, algunos cambios en el diccionario de datos se realizarán con la columna ORACLE_MAINTAINED establecida en 'Y'. Esos usuarios y objetos se excluirán incorrectamente de algunos scripts de DBA. Y pueden estar incluidos incorrectamente en algunos scripts del sistema.

Si está de acuerdo con los riesgos anteriores y no desea crear usuarios comunes de la manera correcta, utilice la respuesta a continuación.


Antes de crear el usuario, ejecute:

alter session set "_ORACLE_SCRIPT"=true;  

Encontré la respuesta aquí

Dr. Alquimia
fuente
6
Tenga en cuenta que es un parámetro oculto y solo debe usarse cuando lo recomiende el soporte de Oracle.
Lalit Kumar B
5
Es peligroso utilizar parámetros de subrayado (ocultos) en los sistemas de producción, ya que puede invalidar su contrato de soporte. Por lo tanto, debe aconsejar a las personas que los configuren sin dar la advertencia adecuada.
APC
3
esto es incorrecto y no es compatible con Oracle, lo he usado y causó otros problemas internos.
Firas Nizam
1
Funciona en Oracle Database 18c Express Edition Release 18.0.0.0.0 - Producción
Vitalie
2
@Victor: porque solo podemos cambiarlos cuando el soporte de Oracle nos lo indique. Como dije, establecer parámetros indocumentados por nuestra propia cuenta puede invalidar nuestro contrato de soporte. De manera más general, la configuración predeterminada de Oracle para los parámetros documentados y no documentados suele ser sólida para todas las aplicaciones y no es necesario cambiarla. Ajustar los parámetros de subrayado atrae a las personas que disfrutan de la emoción del acceso arcano, que es la peor razón para modificarlos. Pero si no tiene un contrato de soporte del que preocuparse, puede arriesgarse a dañar su sistema de la forma que elija ;-)
APC
55

Acabo de instalar oracle11g

ORA-65096: nombre de rol o usuario común no válido en Oracle

No, ha instalado Oracle 12c . Ese error solo puede estar activado 12cy no puede estar activado 11g.

Siempre verifique la versión de su base de datos hasta 4 lugares decimales:

SELECT banner FROM v$version WHERE ROWNUM = 1;

La base de datos de contenedores multiusuario Oracle 12c tiene:

  • un contenedor raíz ( CDB )
  • y / o cero, una o muchas bases de datos conectables ( PDB ).

Debe haber creado la base de datos como una base de datos de contenedor . Mientras, está intentando crear un usuario en el contenedor, es decir, CDB $ ROOT , sin embargo, debe crear el usuario en la base de datos PLUGGABLE .

No se supone que debe crear objetos relacionados con la aplicación en el contenedor, el contenedor contiene los metadatos para las bases de datos conectables. Debe utilizar la base de datos conectable para sus operaciones generales de base de datos. De lo contrario, no lo cree como contenedor y no utilice la tenencia múltiple . Sin embargo, desde 12cR2 en adelante, no puede crear una base de datos sin contenedor de todos modos.

Y lo más probable es que los esquemas de muestra ya estén instalados, solo necesita desbloquearlos en la base de datos conectable.

Por ejemplo, si creó una base de datos conectable como pdborcl:

sqlplus SYS/password@PDBORCL AS SYSDBA

SQL> ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger;

sqlplus scott/tiger@pdborcl

SQL> show user;
USER is "SCOTT"

Para mostrar los PDB y conectarse a una base de datos conectable desde el contenedor raíz:

SQL> show con_name

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

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

SQL> alter session set container = ORCLPDB;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
ORCLPDB

Sugiero leer, Pasos obligatorios posteriores a la instalación de Oracle 12c


Nota : Las respuestas que sugieren usar el _ORACLE_SCRIPTparámetro oculto para establecerlo en verdadero son peligrosas en un sistema de producción y también pueden invalidar su contrato de soporte. Tenga cuidado, sin consultar al soporte de Oracle, NO utilice parámetros ocultos .

Lalit Kumar B
fuente
El enlace anterior "Pasos obligatorios posteriores a la instalación de Oracle 12c" está roto. Nuevo enlace: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri
@Heri ¿Estás seguro? Porque está funcionando bien Pasos obligatorios posteriores a la instalación de Oracle 12c
Lalit Kumar B
47

En Oracle 12c y superior, tenemos dos tipos de bases de datos:

  1. Container DataBase (CDB) y
  2. Base de datos conectable (PDB).

Si quieres crear un usuario, tienes dos posibilidades:

  1. Puede crear un "usuario contenedor" también conocido como "usuario común".
    Los consumidores habituales pertenecen tanto a los CBD como a los PDB actuales y futuros. Significa que pueden realizar operaciones en bases de datos de contenedor o bases de datos conectables según los privilegios asignados.

    create user c##username identified by password;

  2. Puede crear un "usuario conectable" también conocido como "usuario local".
    Los usuarios locales pertenecen solo a un único PDB. A estos usuarios se les pueden otorgar privilegios administrativos, pero solo para ese PDB dentro del cual existen. Para eso, debes conectarte a un datable conectable así:

    alter session set container = nameofyourpluggabledatabase;

    y allí, puedes crear un usuario como normalmente:

    create user username identified by password;

No olvide especificar los espacios de tabla a utilizar, puede ser útil durante la importación / exportación de sus bases de datos. Consulte esto para obtener más información al respecto https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503

Steve Ruben
fuente
El estilo de esta respuesta es mi favorito, rápido de usar.
Zhiyong
0

modificar el conjunto de sesiones "_ORACLE_SCRIPT" = verdadero;

crear usuario sec_admin identificado por "Chutinhbk123 @!";

Tinh Xuan
fuente
-1

Crear dependencia del usuario sobre las herramientas de conexión de la base de datos

sql plus
SQL> connect as sysdba;
Enter user-name: sysdba
Enter password:
Connected.
SQL> ALTER USER hr account unlock identified by hr;
User altered
 then create user on sql plus and sql developer
Balavenkareddy
fuente
3
¿Podría formatear su código correctamente y dar un contexto de por qué esto resuelve el problema mejor que las otras respuestas?
Nico Haase
-1

Podría ser, una alternativa más segura "_ORACLE_SCRIPT"=truees cambiar "_common_user_prefix"de C##una cadena vacía. Cuando es nulo, cualquier nombre puede usarse para un usuario común. Encontrado allí .

Al cambiar ese valor, es posible que se enfrente a otro problema, ORA-02095, el parámetro no se puede modificar, que se puede solucionar de varias maneras, según su configuración ( fuente ).

Así que para mí funcionó eso:

alter system set _common_user_prefix = ''; scope=spfile;
Polígloto
fuente