błąd: ORA-65096: niepoprawna nazwa wspólnego użytkownika lub roli w oracle


118

Właśnie zainstalowałem oracle11g i brakowało mu schematu Scotta. Więc próbuję go wygenerować samodzielnie. Mam skrypt sql schematu „Scott”, ale kiedy próbuję uruchomić zapytanie „utwórz użytkownika Scott identyfikowanego przez tygrysa”; wyświetla następujący błąd:

ORA-65096: niepoprawna wspólna nazwa użytkownika lub roli w oracle.

Zasadniczo nie pozwala mi na utworzenie użytkownika „Scott”. Dlaczego tak jest i jak mogę rozwiązać problem?


8
Nie można tego mieć 11g, powinieneś być włączony 12c.
Lalit Kumar B

Może zainstalowałeś klienta 11g, ale łączysz się z bazą danych 12c? Co dokładnie zainstalowałeś?
Alex Poole,

1
Dołącz C ## przed nazwą użytkownika.
Sathvik

Odpowiedzi:


344

W 99,9% przypadków błąd ORA-65096: invalid common user or role nameoznacza, że ​​jesteś zalogowany do CDB, kiedy powinieneś być zalogowany do PDB.

Jeśli jednak nalegasz na tworzenie użytkowników w niewłaściwy sposób, wykonaj poniższe czynności.

ZAGROŻENIE

Ustawianie nieudokumentowanych parametrów w ten sposób (na co wskazuje wiodący znak podkreślenia) powinno być wykonywane tylko pod nadzorem Oracle Support. Zmiana takich parametrów bez takich wskazówek może unieważnić umowę serwisową. Więc zrób to na własne ryzyko.

W szczególności, jeśli ustawisz "_ORACLE_SCRIPT"=true, niektóre zmiany w słowniku danych zostaną wprowadzone przy kolumnie ORACLE_MAINTAINED ustawionej na „Y”. Ci użytkownicy i obiekty zostaną niepoprawnie wykluczeni z niektórych skryptów DBA. I mogą być nieprawidłowo zawarte w niektórych skryptach systemowych.

Jeśli nie masz nic przeciwko powyższemu ryzyku i nie chcesz tworzyć wspólnych użytkowników we właściwy sposób, użyj poniższej odpowiedzi.


Przed utworzeniem użytkownika uruchom:

alter session set "_ORACLE_SCRIPT"=true;  

Tutaj znalazłem odpowiedź


6
Należy pamiętać, że jest to parametr ukryty i należy go używać tylko wtedy, gdy jest to zalecane przez dział pomocy technicznej Oracle.
Lalit Kumar B

5
Używanie podkreślenia (ukrytych) parametrów w systemach produkcyjnych jest niebezpieczne, ponieważ może spowodować unieważnienie umowy pomocy technicznej. Dlatego powinieneś doradzać ludziom, aby ustawiali je bez odpowiedniego ostrzeżenia.
APC

3
to jest złe i nie jest obsługiwane w wyroczni, użyłem go i spowodowało to inne wewnętrzne problemy.
Firas Nizam

1
Działa na Oracle Database 18c Express Edition Release 18.0.0.0.0 - Produkcja
Vitalie

2
@Victor - Ponieważ możemy je zmieniać tylko na polecenie Oracle Support. Tak jak powiedziałem, ustawienie nieudokumentowanych parametrów z naszego własnego nietoperza może unieważnić naszą umowę wsparcia. Mówiąc bardziej ogólnie, domyślne ustawienia Oracle dla udokumentowanych i nieudokumentowanych parametrów są zwykle odpowiednie dla wszystkich aplikacji i nie wymagają zmiany. Poprawianie parametrów podkreślenia przemawia do ludzi, którzy lubią dreszczyk emocji związany z tajemnym dostępem, co jest najgorszym powodem, aby je modyfikować. Ale jeśli nie musisz się martwić o umowę serwisową, możesz zaryzykować uszkodzenie systemu w dowolny sposób ;-)
APC

56

Właśnie zainstalowałem oracle11g

ORA-65096: niepoprawna wspólna nazwa użytkownika lub roli w oracle

Nie, zainstalowałeś Oracle 12c . Ten błąd może być tylko włączony 12ci nie może być włączony 11g.

Zawsze sprawdzaj wersję bazy danych do 4 miejsc po przecinku:

SELECT banner FROM v$version WHERE ROWNUM = 1;

Baza danych Oracle 12c dla wielu dzierżawców zawiera:

  • kontener główny ( CDB )
  • i / lub zero, jedną lub wiele podłączalnych baz danych ( PDB ).

Baza danych musi być utworzona jako baza danych kontenerów . Podczas gdy próbujesz stworzyć użytkownika w kontenerze, czyli CDB $ ROOT , powinieneś jednak utworzyć go w bazie PLUGGABLE .

Nie należy tworzyć obiektów związanych z aplikacjami w kontenerze, kontener przechowuje metadane dla podłączanych baz danych. Podstawową bazę danych należy używać do wykonywania ogólnych operacji na bazie danych. W przeciwnym razie nie twórz go jako kontenera i nie używaj wielu dzierżawców . Jednak po 12cR2 i tak nie można utworzyć bazy danych niebędącej kontenerem.

I najprawdopodobniej przykładowe schematy mogły być już zainstalowane, wystarczy je odblokować w podłączanej bazie danych.

Na przykład, jeśli utworzyłeś podłączalną bazę danych jako 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"

Aby wyświetlić pliki PDB i połączyć się z podłączaną bazą danych z kontenera głównego:

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

Proponuję przeczytać artykuł Oracle 12c Obowiązkowe kroki po instalacji


Uwaga : odpowiedzi sugerujące użycie _ORACLE_SCRIPTukrytego parametru do ustawienia wartości true są niebezpieczne w systemie produkcyjnym i mogą również unieważnić umowę serwisową. Uwaga, bez konsultacji z pomocą techniczną Oracle NIE używaj ukrytych parametrów .


Powyższe łącze „Obowiązkowe kroki po instalacji Oracle 12c” jest uszkodzone. Nowy link: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri

@Heri Czy na pewno? Ponieważ działa dobrze Oracle 12c Obowiązkowe kroki po instalacji
Lalit Kumar B

47

W Oracle 12c i nowszych mamy dwa typy baz danych:

  1. Container DataBase (CDB) i
  2. Wtykowa baza danych (PDB).

Jeśli chcesz stworzyć użytkownika, masz dwie możliwości:

  1. Możesz utworzyć „użytkownika kontenera”, czyli „zwykłego użytkownika”.
    Zwykli użytkownicy należą do CBD, a także do obecnych i przyszłych PDB. Oznacza to, że mogą wykonywać operacje w kontenerowych bazach danych lub podłączalnych bazach danych zgodnie z przypisanymi uprawnieniami.

    create user c##username identified by password;

  2. Możesz utworzyć „podłączalnego użytkownika”, czyli „użytkownika lokalnego”.
    Użytkownicy lokalni należą tylko do jednego PDB. Tym użytkownikom można nadać uprawnienia administracyjne, ale tylko dla tego PDB, w którym istnieją. W tym celu powinieneś połączyć się z wtykowym datable w ten sposób:

    alter session set container = nameofyourpluggabledatabase;

    i tam możesz stworzyć użytkownika jak zwykle:

    create user username identified by password;

Nie zapomnij określić przestrzeni tabel, które mają być używane, może to być przydatne podczas importu / eksportu twoich DB. Zobacz to, aby uzyskać więcej informacji na ten temat https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503


Styl tej odpowiedzi jest moim ulubionym, szybkim w użyciu.
Zhiyong

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

-1

Utwórz zależność użytkownika od narzędzi łączenia bazy danych

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
Czy mógłbyś poprawnie sformatować swój kod i podać kontekst, dlaczego to rozwiązuje problem lepiej niż inne odpowiedzi?
Nico Haase,

-1

Być może bezpieczniejszą alternatywą "_ORACLE_SCRIPT"=truejest zmiana "_common_user_prefix"z C##na pusty ciąg. Gdy ma wartość null - dla zwykłego użytkownika można użyć dowolnej nazwy. Znaleziono tam .

Podczas zmiany tej wartości może pojawić się inny problem - ORA-02095 - parametr nie może być modyfikowany, co można naprawić na kilka sposobów w zależności od konfiguracji ( źródła ).

Więc dla mnie działało, że:

alter system set _common_user_prefix = ''; scope=spfile;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.