„ORA-01950: brak uprawnień w obszarze SYSTEMU”: Co to za błąd?

15

Wcześniej utworzyłem użytkownika:

SQL>create user suhail identified by password
SQL>User created.
SQL>Grant create session,create table to suhail;
SQL>Grant Succeeded.

ale kiedy loguję się jako suhaili próbuję utworzyć, pojawia tablesię komunikat o błędzie ORA-01950: no privileges on tablespace 'SYSTEM'. Co to za błąd? Dlaczego tak się dzieje?


SQL> connect suhail
Enter password:
Connected.
SQL> create table suhail_table(name char(10));
create table suhail_table(name char(10))
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'SYSTEM'

Korzystam z Oracle Database 11g Express Edition Release 11.2.0.2.0

Suhail Gupta
źródło

Odpowiedzi:

22

Ten błąd mówi, że użytkownik nie ma przydziału dla SYSTEMobszaru tabel, który jest ustawiony jako domyślny trwały obszar tabel. Możesz przypisać użytkownikowi taki przydział:

sql> alter user scott quota 50m on system;

Tutaj 50moznacza, że użytkownik kontyngent na SYSTEMtabel wynosi 50 mebibytes. Możesz także ustawić limit na unlimited.

Jednak złą praktyką jest przechowywanie danych użytkowników i aplikacji w obszarze SYSTEMtabel, ponieważ powoduje to fragmentację danych, a tym samym obniża wydajność. Polecam więc utworzenie nowego stałego obszaru tabel:

sql> create smallfile tablespace users datafile '/u01/app/oracle/oradata/ORCL/users.dbf' size 10g;

A następnie ustaw go jako domyślny stały obszar tabel bazy danych, aby obiekty tworzone przez użytkowników trafiały do ​​tego domyślnego obszaru tabel:

sql> alter database default tablespace users;
Yasir Arsanukaev
źródło
czy możesz wyjaśnić poleceniealter database default tablespace users
Suhail Gupta,
1
W Oracle XE 11 przestrzeń tabel użytkowników już istnieje, więc wystarczy alter database default tablespace users;ialter user scott quota 50m on system;
Andrew Spencer
2

Musisz utworzyć jeden nowy obszar tabel w bazie danych, ponieważ do SYSTEMdostępu do obszaru tabel SYSDBAwymagane są uprawnienia.

Utwórz więc nowy obszar tabel i przypisz go jako domyślny obszar tabel wszystkim użytkownikom. Podczas tworzenia dowolnego użytkownika domyślnie przypisuje on określony obszar tabel.

Ankit
źródło