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 suhail
i próbuję utworzyć table
pojawia się komunikat o błędzie: ORA-01950: no privileges on tablespace "SYSTEM"
. Jaki to 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"
Używam Oracle Database 11g Express Edition w wersji 11.2.0.2.0
Odpowiedź
Ten błąd oznacza, że użytkownik nie ma limitu przestrzeni tabel SYSTEM
który jest ustawiony jako domyślny trwały obszar tabel. Możesz przypisać użytkownikowi limit w następujący sposób:
sql> alter user scott quota 50m on system;
Tutaj 50m
oznacza, że limit użytkownika w obszarze tabel SYSTEM
wynosi 50 MB. Możesz również ustawić limit na unlimited
.
Jednak przechowywanie danych użytkownika i aplikacji w SYSTEM
obszarze tabel jest złą praktyką, ponieważ powoduje to fragmentację danych, a tym samym obniża wydajność. Dlatego zalecałbym 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 utworzone przez użytkowników trafiały do tego domyślnego obszaru tabel:
Komentarze
Odpowiedź
Musisz utworzyć jeden nowy obszar tabel w bazie danych, ponieważ dla SYSTEM
dostęp do obszaru tabel, SYSDBA
uprawnienia są wymagane.
Zatem utwórz nowy obszar tabel i przypisz go jako domyślny obszar tabel wszystkim użytkownikom. Kiedy tworzysz dowolnego użytkownika, domyślnie przypisuje on określoną przestrzeń tabel.
alter database default tablespace users
alter database default tablespace users;
ialter user scott quota 50m on system;