помилка: ORA-65096: недійсний загальний користувач або ім'я ролі в oracle


118

Я щойно встановив oracle11g, і в ньому відсутня схема Скотта. Тому я намагаюся створити це сам. У мене з'явився сценарій sql схеми "Скотт", але коли я намагаюся запустити запит "створити користувача Скотта, визначеного тигра"; вона відображає таку помилку:

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

В основному це не дозволяє мені створити користувача "Скотт". Чому це так, і як я можу виправити свою проблему?


8
Це неможливо мати 11g, ви повинні бути на 12c.
Лаліт Кумар Б

Можливо, ви встановили клієнт 11g, але ви підключаєтесь до бази даних 12c? Що саме ви встановили?
Алекс Пул,

1
Додайте C ## до імені користувача.
Сатвік

Відповіді:


344

НЕБЕЗПЕЧНО

Встановлення недокументованих параметрів на кшталт цього (як зазначено провідним підкресленням) слід проводити лише під керівництвом служби підтримки Oracle. Зміна таких параметрів без таких вказівок може визнати недійсним ваш договір про підтримку. Тож робіть це на свій страх і ризик.

Зокрема, якщо встановлено "_ORACLE_SCRIPT"=true, деякі зміни словника даних будуть внесені зі стовпцем ORACLE_MAINTAINED, встановленим на "Y". Ці користувачі та об'єкти будуть неправильно виключені з деяких сценаріїв DBA. І вони можуть бути неправильно включені в деякі системні сценарії.

Якщо ви добре з вищезазначеними ризиками, і не хочете створювати звичайних користувачів правильним способом, скористайтеся нижченаведеною відповіддю.


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

alter session set "_ORACLE_SCRIPT"=true;  

Тут я знайшов відповідь


6
Будьте в курсі, це прихований параметр і його можна використовувати лише тоді, коли рекомендується підтримкою Oracle.
Лаліт Кумар Б

5
Використовувати параметри підкреслення (прихованих) у виробничих системах небезпечно, оскільки це може визнати недійсним ваш договір підтримки. Тож вам слід порадити людям встановлювати їх, не надаючи відповідного попередження.
APC

3
це неправильно і не підтримується в оракулі, я використовував це, і це викликало інші внутрішні проблеми.
Фірас Нізам

1
Він працює над Oracle Database 18c Express Edition випуску 18.0.0.0.0 - Виробництво
Vitalie

2
@Victor - Оскільки нам дозволяється змінювати їх лише тоді, коли це вказує Служба підтримки Oracle. Як я вже говорив, встановлення незадокументованих параметрів від власного кажана може визнати недійсним наш договір підтримки. Загалом, параметри Oracle за замовчуванням для документально підтверджених та недокументованих параметрів зазвичай звучать для всіх програм і не потребують змін. Налаштування параметрів підкреслення подобається людям, які насолоджуються хвилюванням таємного доступу, що є найгіршою причиною їх налаштування. Але якщо у вас немає договору про підтримку, про який потрібно турбуватися, ви можете ризикувати пошкодити вашу систему будь-яким обраним способом ;-)
APC

55

Я щойно встановив 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 обов'язкові кроки після встановлення
Lalit Kumar B

47

В Oracle 12c і вище ми маємо два типи баз даних:

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

Якщо ви хочете створити користувача, у вас є дві можливості:

  1. Ви можете створити "користувача контейнера", який називається "звичайний користувач".
    Звичайні користувачі належать до КБР, а також до поточних та майбутніх ПТД. Це означає, що вони можуть виконувати операції в контейнерах DB або Pluggable DB відповідно до призначених привілеїв.

    create user c##username identified by password;

  2. Ви можете створити "підключеного користувача", який називається "місцевим користувачем".
    Місцеві користувачі належать лише до одного ПТД. Цим користувачам можуть бути надані адміністративні пільги, але лише для тієї PDB, всередині якої вони існують. Для цього вам слід підключитися до підключуваних даних, таких як:

    alter session set container = nameofyourpluggabledatabase;

    і там ви можете створити користувача, як зазвичай:

    create user username identified by password;

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


Стиль цієї відповіді - мій улюблений, швидкий у використанні.
Чжійонг

0

змінити набір сеансу "_ORACLE_SCRIPT" = вірно;

створити користувача sec_admin, ідентифікований "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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.