errore: ORA-65096: nome utente o ruolo comune non valido in Oracle


118

Ho appena installato oracle11g e mancava lo schema di Scott. Quindi sto cercando di generarlo da solo. Ho ricevuto lo script sql dello schema "Scott", ma quando provo a eseguire la query "crea utente Scott identificato da tiger;" visualizza il seguente errore:

ORA-65096: nome utente o ruolo comune non valido in Oracle.

Fondamentalmente non mi permette di creare un utente "Scott". Perché è così e come posso risolvere il mio problema?


8
Questo è impossibile 11g, dovresti esserci 12c.
Lalit Kumar B

Forse hai installato un client 11g, ma ti stai connettendo a un database 12c? Cosa hai installato esattamente?
Alex Poole

1
Aggiungi C ## prima del nome utente.
Sathvik

Risposte:


344

PERICOLO

L'impostazione di parametri non documentati come questo (come indicato dal trattino basso iniziale) dovrebbe essere eseguita solo sotto la direzione del supporto Oracle. La modifica di tali parametri senza tale guida potrebbe invalidare il contratto di assistenza. Quindi fallo a tuo rischio.

In particolare, se si imposta "_ORACLE_SCRIPT"=true, verranno apportate alcune modifiche al dizionario dei dati con la colonna ORACLE_MAINTAINED impostata su "Y". Tali utenti e oggetti verranno esclusi in modo errato da alcuni script DBA. E potrebbero essere inclusi in modo errato in alcuni script di sistema.

Se sei d'accordo con i rischi di cui sopra e non vuoi creare utenti comuni nel modo corretto, usa la risposta seguente.


Prima di creare l'esecuzione dell'utente:

alter session set "_ORACLE_SCRIPT"=true;  

Ho trovato la risposta qui


6
Attenzione, è un parametro nascosto e da utilizzare solo quando consigliato dal supporto Oracle.
Lalit Kumar B

5
È pericoloso utilizzare parametri di sottolineatura (nascosti) nei sistemi di produzione, poiché potrebbe invalidare il contratto di assistenza. Quindi dovresti consigliare alle persone di impostarli senza dare l'avviso appropriato.
APC

3
questo è sbagliato e non supportato in Oracle, l'ho usato e ha causato altri problemi interni.
Firas Nizam

1
Funziona su Oracle Database 18c Express Edition Release 18.0.0.0.0 - Produzione
Vitalie

2
@Victor - Perché siamo autorizzati a modificarli solo quando richiesto dal supporto Oracle. Come ho detto, l'impostazione di parametri non documentati dalla nostra mazza potrebbe invalidare il nostro contratto di supporto. Più in generale, le impostazioni predefinite di Oracle per i parametri documentati e non documentati sono generalmente valide per tutte le applicazioni e non devono essere modificate. La modifica dei parametri di sottolineatura fa appello alle persone che amano il brivido dell'accesso arcano, che è la ragione peggiore per modificarli. Ma se non hai un contratto di supporto di cui preoccuparti, sei libero di rischiare di danneggiare il tuo sistema in qualsiasi modo tu scelga ;-)
APC

56

Ho appena installato oracle11g

ORA-65096: nome utente o ruolo comune non valido in Oracle

No, hai installato Oracle 12c . Quell'errore potrebbe essere solo attivo 12ce non può essere attivo 11g.

Controlla sempre la versione del tuo database fino a 4 cifre decimali:

SELECT banner FROM v$version WHERE ROWNUM = 1;

Il database del contenitore multitenant Oracle 12c ha:

  • un root container ( CDB )
  • e / o zero, uno o più database pluggable ( PDB ).

È necessario aver creato il database come database contenitore . Mentre stai cercando di creare l'utente nel contenitore, cioè CDB $ ROOT , tuttavia, dovresti creare l'utente nel database PLUGGABLE .

Non dovresti creare oggetti relativi all'applicazione nel contenitore, il contenitore contiene i metadati per i database collegabili. È necessario utilizzare il database collegabile per le operazioni generali del database. Altrimenti, non crearlo come contenitore e non utilizzare il multi-tenancy . Tuttavia, da 12cR2 in poi non è possibile creare comunque un database non contenitore.

E molto probabilmente, gli schemi di esempio potrebbero essere già installati, devi solo sbloccarli nel database collegabile.

Ad esempio, se hai creato un database collegabile come 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"

Per mostrare i PDB e connettersi a un database collegabile dal contenitore principale:

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

Suggerisco di leggere, Oracle 12c Post Installation Passaggi obbligatori


Nota : le risposte che suggeriscono di utilizzare il _ORACLE_SCRIPTparametro nascosto per impostarlo su true sono pericolose in un sistema di produzione e potrebbero anche invalidare il contratto di supporto. Attenzione, senza consultare il supporto Oracle NON utilizzare parametri nascosti .


Il link sopra "Oracle 12c Post Installation Obbligatorio Passi" è interrotto. Nuovo collegamento: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri

@Heri Sei sicuro? Perché funziona bene Oracle 12c Post Installation Passaggi obbligatori
Lalit Kumar B

47

In Oracle 12c e versioni successive, abbiamo due tipi di database:

  1. Container DataBase (CDB) e
  2. Pluggable DataBase (PDB).

Se vuoi creare un utente, hai due possibilità:

  1. Puoi creare un "utente contenitore" noto anche come "utente comune".
    Gli utenti comuni appartengono ai CBD così come ai PDB attuali e futuri. Significa che possono eseguire operazioni in Container DB o Pluggable DB in base ai privilegi assegnati.

    create user c##username identified by password;

  2. È possibile creare un "utente collegabile" noto anche come "utente locale".
    Gli utenti locali appartengono solo a un singolo PDB. A questi utenti possono essere concessi privilegi amministrativi, ma solo per quel PDB all'interno del quale esistono. Per questo, dovresti connetterti a un datable collegabile in questo modo:

    alter session set container = nameofyourpluggabledatabase;

    e lì puoi creare utenti come al solito:

    create user username identified by password;

Non dimenticare di specificare i tablespace da utilizzare, può essere utile durante l'importazione / esportazione dei tuoi DB. Vedi questo per maggiori informazioni su di esso https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503


Lo stile di questa risposta è il mio preferito, veloce da usare.
Zhiyong

1
SQL> alter session set "_ORACLE_SCRIPT"=true;  
SQL> create user sec_admin identified by "Chutinhbk123@!";

-1

Creare la dipendenza dell'utente dagli strumenti di connessione al database

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

3
Potresti formattare correttamente il tuo codice e fornire un contesto sul perché questo risolve il problema meglio delle altre risposte?
Nico Haase

-1

Potrebbe essere un'alternativa più sicura a quella "_ORACLE_SCRIPT"=truedi passare "_common_user_prefix"da C##a una stringa vuota. Quando è nullo, qualsiasi nome può essere utilizzato per l'utente comune. Trovato .

Durante la modifica di quel valore potresti incontrare un altro problema - ORA-02095 - il parametro non può essere modificato, che può essere corretto in diversi modi, in base alla tua configurazione ( sorgente ).

Quindi per me ha funzionato:

alter system set _common_user_prefix = ''; scope=spfile;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.