ошибка: ORA-65096: недопустимое общее имя пользователя или роли в Oracle

118

Я только что установил oracle11g, и в нем отсутствовала схема Скотта. Поэтому я пытаюсь создать его сам. Я получил sql-скрипт схемы «Скотт», но когда я пытаюсь запустить запрос «создать пользователя Скотта, идентифицированного тигром;» он отображает следующую ошибку:

ORA-65096: недопустимое имя обычного пользователя или роли в Oracle.

По сути, это не позволяет мне создать пользователя «Скотт». Почему это так и как я могу решить свою проблему?

enu
источник
8
Это невозможно 11g, ты должен быть включен 12c.
Lalit Kumar B
Возможно, вы установили клиент 11g, но подключаетесь к базе данных 12c? Что именно вы установили?
Alex Poole,
1
Добавьте C ## перед именем пользователя.
Сатвик

Ответы:

345

В 99,9% случаев ошибка ORA-65096: invalid common user or role nameозначает, что вы вошли в CDB, тогда как вы должны войти в PDB.

Но если вы настаиваете на неправильном создании пользователей, выполните следующие действия.

ОПАСНОСТЬ

Установка недокументированных параметров, подобных этому (обозначенных ведущим подчеркиванием), должна выполняться только под руководством службы поддержки Oracle. Изменение таких параметров без таких указаний может привести к аннулированию вашего контракта на поддержку. Так что делайте это на свой страх и риск.

В частности, если вы установили "_ORACLE_SCRIPT"=true, некоторые изменения словаря данных будут сделаны с столбцом ORACLE_MAINTAINED, установленным на «Y». Эти пользователи и объекты будут неправильно исключены из некоторых сценариев DBA. И они могут быть некорректно включены в некоторые системные скрипты.

Если вы согласны с вышеуказанными рисками и не хотите правильно создавать обычных пользователей, используйте ответ ниже.


Перед созданием пользователя запустите:

alter session set "_ORACLE_SCRIPT"=true;  

Я нашел ответ здесь

Доктор алхимия
источник
6
Имейте в виду, что это скрытый параметр, и его следует использовать только тогда, когда это рекомендовано службой поддержки Oracle.
Lalit Kumar B
5
Опасно использовать параметры подчеркивания (скрытые) в производственных системах, так как это может привести к недействительности вашего контракта на поддержку. Поэтому вам следует посоветовать людям установить их, не давая соответствующего предупреждения.
APC
3
это неправильно и не поддерживается в Oracle, я использовал его, и это вызвало другие внутренние проблемы.
Firas Nizam
1
Он работает с Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Виталий,
2
@Victor - потому что нам разрешено изменять их только по указанию службы поддержки Oracle. Как я уже сказал, установка недокументированных параметров самостоятельно может аннулировать наш контракт на поддержку. В общем, настройки Oracle по умолчанию для документированных и недокументированных параметров обычно подходят для всех приложений и не нуждаются в изменении. Настройка параметров подчеркивания привлекает людей, которым нравится острые ощущения от тайного доступа, а это худшая причина для их настройки. Но если у вас нет контракта на поддержку, о котором нужно беспокоиться, вы можете рискнуть повредить свою систему любым удобным для вас способом ;-)
APC
56

Я только что установил oracle11g

ORA-65096: недопустимое общее имя пользователя или роли в Oracle

Нет, вы установили Oracle 12c . Эта ошибка может быть только включенной 12cи не может быть включенной 11g.

Всегда проверяйте версию вашей базы данных до 4 знаков после запятой:

SELECT banner FROM v$version WHERE ROWNUM = 1;

Многопользовательская контейнерная база данных Oracle 12c содержит :

  • корневой контейнер ( CDB )
  • и / или ноль, одна или несколько подключаемых баз данных ( PDB ).

Вы должны были создать базу данных как базу данных контейнера . Пока вы пытаетесь создать пользователя в контейнере, то есть CDB $ ROOT , однако вы должны создать пользователя в базе данных PLUGGABLE .

Вы не должны создавать объекты, связанные с приложением, в контейнере, контейнер содержит метаданные для подключаемых баз данных. Вы должны использовать подключаемую базу данных для общих операций с базой данных. В противном случае не создавайте его как контейнер и не используйте мультитенантность . Однако начиная с версии 12cR2 вы все равно не можете создать неконтейнерную базу данных.

И, скорее всего, образцы схем могли быть уже установлены, вам просто нужно разблокировать их в подключаемой базе данных.

Например, если вы создали подключаемую базу данных как 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"

Чтобы отобразить PDB и подключиться к подключаемой базе данных из корневого контейнера:

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

Предлагаю прочитать, Обязательные шаги после установки Oracle 12c


Примечание : ответы, предлагающие использовать _ORACLE_SCRIPTскрытый параметр для установки значения true, опасны для производственной системы и могут также сделать недействительным ваш контракт на поддержку. Осторожно, без консультации со службой поддержки Oracle НЕ используйте скрытые параметры .

Лалит Кумар Б
источник
Вышеупомянутая ссылка «Обязательные шаги после установки Oracle 12c» не работает. Новая ссылка: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Хери
@Heri Ты уверен? Потому что он работает нормально Обязательные шаги после установки Oracle 12c
Лалит Кумар Б.
47

В Oracle 12c и выше у нас есть два типа баз данных:

  1. База данных контейнеров (CDB) и
  2. Подключаемая база данных (PDB).

Если вы хотите создать пользователя, у вас есть две возможности:

  1. Вы можете создать «пользователя контейнера», также известного как «обычный пользователь».
    Обычные пользователи принадлежат к CBD, а также к текущим и будущим PDB. Это означает, что они могут выполнять операции в БД контейнера или подключаемых БД в соответствии с назначенными привилегиями.

    create user c##username identified by password;

  2. Вы можете создать «подключаемого пользователя», также известного как «локальный пользователь».
    Локальные пользователи принадлежат только к одной PDB. Этим пользователям могут быть предоставлены административные привилегии, но только для той PDB, внутри которой они существуют. Для этого вы должны подключиться к подключаемому datable следующим образом:

    alter session set container = nameofyourpluggabledatabase;

    и там вы можете создать пользователя, как обычно:

    create user username identified by password;

Не забудьте указать используемые табличные пространства, это может быть полезно во время импорта / экспорта ваших баз данных. См. Дополнительную информацию об этом https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503

Стив Рубен
источник
Этот стиль ответа - мой любимый, быстрый в использовании.
Чжиюн
1
SQL> alter session set "_ORACLE_SCRIPT"=true;  
SQL> create user sec_admin identified by "Chutinhbk123@!";
Тинь Сюань
источник
-1

Создание зависимости пользователя от инструментов подключения к базе данных

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
Не могли бы вы правильно отформатировать свой код и дать некоторый контекст, почему это решает проблему лучше, чем другие ответы?
Нико Хаасе
-1

Может быть, более безопасной альтернативой "_ORACLE_SCRIPT"=trueявляется изменение "_common_user_prefix"с C##пустой строкой. Когда он нулевой - для обычного пользователя можно использовать любое имя. Нашел там .

Во время изменения этого значения вы можете столкнуться с другой проблемой - ORA-02095 - параметр не может быть изменен, который можно исправить несколькими способами, в зависимости от вашей конфигурации ( источника ).

Итак, для меня сработало следующее:

alter system set _common_user_prefix = ''; scope=spfile;
Полиглот
источник