erreur: ORA-65096: nom d'utilisateur ou de rôle commun non valide dans oracle

118

Je viens d'installer oracle11g, et il manquait le schéma Scott. J'essaye donc de le générer moi-même. J'ai eu le script sql du schéma "Scott", mais quand j'essaye d'exécuter la requête "créer l'utilisateur Scott identifié par tiger;" il affiche l'erreur suivante:

ORA-65096: nom d'utilisateur ou de rôle commun non valide dans oracle.

Fondamentalement, cela ne me permet pas de créer un utilisateur "Scott". Pourquoi cela et comment puis-je résoudre mon problème?

enu
la source
8
C'est impossible à avoir 11g, vous devriez l'être 12c.
Lalit Kumar B
Peut-être avez-vous installé un client 11g, mais vous vous connectez à une base de données 12c? Qu'avez-vous installé exactement?
Alex Poole
1
Ajoutez C ## avant le nom d'utilisateur.
Sathvik

Réponses:

344

99,9% du temps, l'erreur ORA-65096: invalid common user or role namesignifie que vous êtes connecté à la CDB alors que vous devez être connecté à une PDB.

Mais si vous insistez pour créer des utilisateurs dans le mauvais sens, suivez les étapes ci-dessous.

DANGER

La définition de paramètres non documentés comme celui-ci (comme indiqué par le trait de soulignement principal) ne doit être effectuée que sous la direction d'Oracle Support. La modification de ces paramètres sans ces conseils peut invalider votre contrat de support. Alors faites-le à vos risques et périls.

Plus précisément, si vous définissez "_ORACLE_SCRIPT"=true, certaines modifications du dictionnaire de données seront apportées avec la colonne ORACLE_MAINTAINED définie sur «Y». Ces utilisateurs et objets seront exclus à tort de certains scripts DBA. Et ils peuvent être incorrectement inclus dans certains scripts système.

Si vous êtes d'accord avec les risques ci-dessus et que vous ne souhaitez pas créer des utilisateurs communs de la bonne manière, utilisez la réponse ci-dessous.


Avant de créer l'utilisateur, exécutez:

alter session set "_ORACLE_SCRIPT"=true;  

J'ai trouvé la réponse ici

Dr Alchemy
la source
6
Attention, il s'agit d'un paramètre masqué et à n'utiliser que sur recommandation du support Oracle.
Lalit Kumar B
5
Il est dangereux d'utiliser des paramètres de soulignement (masqués) dans les systèmes de production, car cela peut invalider votre contrat de support. Vous devriez donc conseiller aux gens de les définir sans donner l'avertissement approprié.
APC
3
c'est faux et non pris en charge dans oracle, je l'ai utilisé et cela a causé d'autres problèmes internes.
Firas Nizam
1
Il fonctionne sur Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Vitalie
2
@Victor - Parce que nous ne sommes autorisés à les modifier que sur instruction du support Oracle. Comme je l'ai dit, la définition de paramètres non documentés de notre propre chef peut invalider notre contrat de support. Plus généralement, les paramètres par défaut d'Oracle pour les paramètres documentés et non documentés sont généralement valables pour toutes les applications et n'ont pas besoin d'être modifiés. La modification des paramètres de soulignement plaît aux personnes qui apprécient le frisson de l'accès aux arcanes, ce qui est la pire raison de les modifier. Mais si vous n'avez pas de contrat de support à craindre, vous êtes libre de risquer d'endommager votre système de la manière que vous choisissez ;-)
APC
56

Je viens d'installer oracle11g

ORA-65096: nom d'utilisateur ou de rôle commun non valide dans oracle

Non, vous avez installé Oracle 12c . Cette erreur ne peut être que activée 12cet ne peut pas l'être 11g.

Vérifiez toujours la version de votre base de données jusqu'à 4 décimales:

SELECT banner FROM v$version WHERE ROWNUM = 1;

La base de données de conteneurs multi-locataires Oracle 12c comprend:

  • un conteneur racine ( CDB )
  • et / ou zéro, une ou plusieurs bases de données enfichables ( PDB ).

Vous devez avoir créé la base de données en tant que base de données conteneur . Pendant que vous essayez de créer un utilisateur dans le conteneur, c'est-à-dire CDB $ ROOT , vous devez cependant créer l'utilisateur dans la base de données PLUGGABLE .

Vous n'êtes pas censé créer des objets liés à l'application dans le conteneur, le conteneur contient les métadonnées des bases de données enfichables. Vous devez utiliser la base de données enfichable pour vos opérations générales sur la base de données. Sinon, ne le créez pas en tant que conteneur et n'utilisez pas la multi-location . Cependant, à partir de 12cR2, vous ne pouvez pas créer de base de données sans conteneur de toute façon.

Et très probablement, les exemples de schémas ont peut-être déjà été installés, il vous suffit de les déverrouiller dans la base de données enfichable.

Par exemple, si vous avez créé une base de données enfichable en tant que 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"

Pour afficher les PDB et vous connecter à une base de données enfichable à partir du conteneur racine:

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

Je suggère de lire les étapes obligatoires de la post-installation d'Oracle 12c


Remarque : les réponses suggérant d'utiliser le _ORACLE_SCRIPTparamètre hidden pour définir sur true sont dangereuses dans un système de production et peuvent également invalider votre contrat de support. Attention, sans consulter le support Oracle, n'utilisez PAS de paramètres cachés .

Lalit Kumar B
la source
Le lien ci-dessus "Oracle 12c Post Installation Mandatory Steps" est rompu. Nouveau lien: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri
@Heri Etes-vous sûr? Parce que cela fonctionne bien Étapes obligatoires après l'installation d'Oracle 12c
Lalit Kumar B
47

Dans Oracle 12c et supérieur, nous avons deux types de bases de données:

  1. Container DataBase (CDB) et
  2. Base de données enfichable (PDB).

Si vous souhaitez créer un utilisateur, vous avez deux possibilités:

  1. Vous pouvez créer un "utilisateur conteneur" aka "utilisateur commun".
    Les utilisateurs courants appartiennent aux CBD ainsi qu'aux PDB actuels et futurs. Cela signifie qu'ils peuvent effectuer des opérations dans des DB de conteneur ou des DB enfichables selon les privilèges attribués.

    create user c##username identified by password;

  2. Vous pouvez créer un "utilisateur enfichable" aka "utilisateur local".
    Les utilisateurs locaux n'appartiennent qu'à un seul PDB. Ces utilisateurs peuvent avoir des privilèges administratifs, mais uniquement pour la PDB dans laquelle ils existent. Pour cela, vous devez vous connecter à un datable enfichable comme ça:

    alter session set container = nameofyourpluggabledatabase;

    et là, vous pouvez créer un utilisateur comme d'habitude:

    create user username identified by password;

N'oubliez pas de spécifier le ou les tablespace (s) à utiliser, cela peut être utile lors de l'import / export de vos bases de données. Voir ceci pour plus d'informations à ce sujet https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503

Steve Ruben
la source
Le style de cette réponse est mon préféré, rapide à utiliser.
Zhiyong le
1
SQL> alter session set "_ORACLE_SCRIPT"=true;  
SQL> create user sec_admin identified by "Chutinhbk123@!";
Tinh Xuan
la source
-1

Créer une dépendance utilisateur sur les outils de connexion à la base de données

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
la source
3
Pouvez-vous formater votre code correctement et expliquer pourquoi cela résout le problème mieux que les autres réponses?
Nico Haase le
-1

Peut-être, une alternative plus sûre à "_ORACLE_SCRIPT"=trueest de passer "_common_user_prefix"de C##à une chaîne vide. Lorsqu'il est nul - n'importe quel nom peut être utilisé pour un utilisateur commun. Trouvé là-bas .

Lors de la modification de cette valeur, vous pouvez être confronté à un autre problème - ORA-02095 - le paramètre ne peut pas être modifié, qui peut être corrigé de plusieurs manières, en fonction de votre configuration ( source ).

Donc pour moi cela a fonctionné:

alter system set _common_user_prefix = ''; scope=spfile;
Polyglotte
la source