Fehler: ORA-65096: Ungültiger allgemeiner Benutzer- oder Rollenname in Oracle


118

Ich habe gerade oracle11g installiert und es fehlte das Scott-Schema. Also versuche ich es selbst zu generieren. Ich habe das SQL-Skript des Schemas "Scott" erhalten, aber wenn ich versuche, die Abfrage "Benutzer Scott erstellen, der vom Tiger identifiziert wurde" auszuführen. Es wird der folgende Fehler angezeigt:

ORA-65096: Ungültiger allgemeiner Benutzer- oder Rollenname in Oracle.

Grundsätzlich erlaubt es mir nicht, einen Benutzer "Scott" zu erstellen. Warum ist das so und wie kann ich mein Problem beheben?


8
Das ist unmöglich zu haben 11g, du solltest dran sein 12c.
Lalit Kumar B

Vielleicht haben Sie einen 11g-Client installiert, stellen aber eine Verbindung zu einer 12c-Datenbank her? Was genau hast du installiert?
Alex Poole

Fügen Sie C ## vor dem Benutzernamen hinzu.
Sathvik

Antworten:


343

ACHTUNG

Das Festlegen von undokumentierten Parametern wie diesem (wie durch den führenden Unterstrich angegeben) sollte nur unter Anleitung des Oracle-Supports erfolgen. Das Ändern solcher Parameter ohne diese Anleitung kann Ihren Supportvertrag ungültig machen. Tun Sie dies also auf eigenes Risiko.

Wenn Sie festlegen "_ORACLE_SCRIPT"=true, werden einige Änderungen am Datenwörterbuch vorgenommen, wobei die Spalte ORACLE_MAINTAINED auf 'Y' gesetzt ist. Diese Benutzer und Objekte werden von einigen DBA-Skripten fälschlicherweise ausgeschlossen. Und sie sind möglicherweise in einigen Systemskripten falsch enthalten.

Wenn Sie mit den oben genannten Risiken einverstanden sind und keine normalen Benutzer auf die richtige Weise erstellen möchten, verwenden Sie die folgende Antwort.


Bevor Sie den Benutzer erstellen, führen Sie Folgendes aus:

alter session set "_ORACLE_SCRIPT"=true;  

Ich habe die Antwort hier gefunden


6
Beachten Sie, dass es sich um einen versteckten Parameter handelt , der nur verwendet werden darf, wenn dies vom Oracle-Support empfohlen wird.
Lalit Kumar B

5
Es ist gefährlich, unterstrichene (versteckte) Parameter in Produktionssystemen zu verwenden, da dies Ihren Supportvertrag ungültig machen kann. Sie sollten den Leuten daher raten, sie ohne entsprechende Warnung einzustellen.
APC

3
Dies ist falsch und wird in Oracle nicht unterstützt. Ich habe es verwendet und es hat weitere interne Probleme verursacht.
Firas Nizam

1
Es funktioniert auf Oracle Database 18c Express Edition Release 18.0.0.0.0 - Produktion
Vitalie

2
@ Victor - Weil wir sie nur ändern dürfen, wenn Sie vom Oracle-Support dazu aufgefordert werden. Wie ich bereits sagte, kann das Setzen von undokumentierten Parametern auf eigene Faust unseren Supportvertrag ungültig machen. Im Allgemeinen sind die Standardeinstellungen von Oracle für dokumentierte und nicht dokumentierte Parameter für alle Anwendungen einwandfrei und müssen nicht geändert werden. Das Optimieren von Unterstrichparametern spricht Menschen an, die den Nervenkitzel des arkanen Zugangs genießen, was der schlechteste Grund ist, sie zu optimieren. Wenn Sie jedoch keinen Supportvertrag haben, über den Sie sich Sorgen machen müssen, können Sie riskieren, Ihr System auf eine von Ihnen gewählte Weise zu beschädigen ;-)
APC

55

Ich habe gerade oracle11g installiert

ORA-65096: Ungültiger allgemeiner Benutzer- oder Rollenname in Oracle

Nein, Sie haben Oracle 12c installiert . Dieser Fehler konnte nur aktiviert sein 12cund kann nicht aktiviert sein 11g.

Überprüfen Sie Ihre Datenbankversion immer mit bis zu 4 Dezimalstellen:

SELECT banner FROM v$version WHERE ROWNUM = 1;

Die Oracle 12c-Containerdatenbank mit mehreren Mandanten verfügt über:

  • ein Root-Container ( CDB )
  • und / oder null, eine oder mehrere steckbare Datenbanken ( PDB ).

Sie müssen die Datenbank als Containerdatenbank erstellt haben . Während Sie versuchen, einen Benutzer im Container zu erstellen, dh CDB $ ROOT , sollten Sie den Benutzer jedoch in der PLUGGABLE-Datenbank erstellen .

Sie dürfen keine anwendungsbezogenen Objekte im Container erstellen, der Container enthält die Metadaten für die steckbaren Datenbanken. Sie sollten die steckbare Datenbank für Ihre allgemeinen Datenbankoperationen verwenden. Andernfalls erstellen Sie es nicht als Container und verwenden Sie keine Mandantenfähigkeit . Ab 12cR2 können Sie jedoch ohnehin keine Nicht-Container-Datenbank erstellen.

Und höchstwahrscheinlich wurden die Beispielschemata bereits installiert. Sie müssen sie nur in der steckbaren Datenbank entsperren .

Wenn Sie beispielsweise eine steckbare Datenbank erstellt haben als 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"

So zeigen Sie die PDBs an und stellen vom Root-Container aus eine Verbindung zu einer steckbaren Datenbank her:

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

Ich empfehle, die obligatorischen Schritte für Oracle 12c nach der Installation zu lesen


Hinweis : Antworten, die vorschlagen, den _ORACLE_SCRIPTversteckten Parameter auf true zu setzen, sind in einem Produktionssystem gefährlich und können auch Ihren Supportvertrag ungültig machen. Beachten Sie, dass Sie ohne Rücksprache mit dem Oracle-Support KEINE versteckten Parameter verwenden dürfen .


Der obige Link "Obligatorische Schritte nach der Installation von Oracle 12c" ist fehlerhaft. Neuer Link: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri

@Heri Bist du sicher? Weil es gut funktioniert Oracle 12c Nach der Installation Obligatorische Schritte
Lalit Kumar B

45

In Oracle 12c und höher gibt es zwei Arten von Datenbanken:

  1. Container DataBase (CDB) und
  2. Steckbare Datenbank (PDB).

Wenn Sie einen Benutzer erstellen möchten, haben Sie zwei Möglichkeiten:

  1. Sie können einen "Container-Benutzer" oder "Common User" erstellen.
    Gemeinsame Benutzer gehören zu CBDs sowie zu aktuellen und zukünftigen PDBs. Dies bedeutet, dass sie Operationen in Container-DBs oder steckbaren DBs gemäß den zugewiesenen Berechtigungen ausführen können.

    create user c##username identified by password;

  2. Sie können einen "steckbaren Benutzer" oder "lokalen Benutzer" erstellen.
    Lokale Benutzer gehören nur zu einem einzelnen PDB. Diese Benutzer erhalten möglicherweise Administratorrechte, jedoch nur für den PDB, in dem sie vorhanden sind. Dazu sollten Sie sich wie folgt mit steckbaren Daten verbinden:

    alter session set container = nameofyourpluggabledatabase;

    und dort können Sie Benutzer wie gewohnt erstellen:

    create user username identified by password;

Vergessen Sie nicht, die zu verwendenden Tabellenbereiche anzugeben. Dies kann beim Import / Export Ihrer DBs hilfreich sein. Weitere Informationen hierzu finden Sie unter https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503


Der Stil dieser Antwort ist mein Favorit, schnell zu verwenden.
pzy

-1

Erstellen Sie eine Benutzerabhängigkeit von den Datenbankverbindungstools

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
Könnten Sie bitte Ihren Code richtig formatieren und einen Kontext angeben, warum dies das Problem besser löst als die anderen Antworten?
Nico Haase

-1

Möglicherweise ist es sicherer "_ORACLE_SCRIPT"=true, "_common_user_prefix"von C##einer leeren Zeichenfolge zu wechseln . Wenn es null ist, kann ein beliebiger Name für einen normalen Benutzer verwendet werden. Gefunden dort .

Während Sie diesen Wert ändern, tritt möglicherweise ein anderes Problem auf - ORA-02095 - Der Parameter kann nicht geändert werden. Dieser Parameter kann je nach Konfiguration ( Quelle ) auf verschiedene Arten behoben werden .

Also für mich hat das funktioniert:

alter system set _common_user_prefix = ''; scope=spfile;

-1

Sitzungssatz ändern "_ORACLE_SCRIPT" = true;

Benutzer sec_admin erstellen, identifiziert durch "Chutinhbk123 @!";

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.