In precedenza ho creato un utente:
SQL>create user suhail identified by password SQL>User created. SQL>Grant create session,create table to suhail; SQL>Grant Succeeded.
ma quando accedo come suhail
e provo a creare un table
ricevo un errore che dice ORA-01950: no privileges on tablespace "SYSTEM"
. Che errore è? Perché si verifica?
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"
Sto utilizzando Oracle Database 11g Express Edition Release 11.2.0.2.0
Risposta
Questo errore indica che lutente non “ha quota nel tablespace SYSTEM
che è impostato come tablespace persistente predefinito. Puoi assegnare a un utente la quota in questo modo:
sql> alter user scott quota 50m on system;
Qui, 50m
significa che la quota utente sul tablespace SYSTEM
è di 50 mebibyte. Puoi anche impostare la quota su unlimited
.
Tuttavia è una cattiva pratica memorizzare i dati dellutente e dellapplicazione nel tablespace SYSTEM
poiché provoca la frammentazione dei dati e quindi riduce le prestazioni. Quindi ti consiglio di creare un nuovo tablespace permanente :
sql> create smallfile tablespace users datafile "/u01/app/oracle/oradata/ORCL/users.dbf" size 10g;
Quindi impostalo come tablespace permanente del database predefinito in modo che gli oggetti creati dagli utenti vadano in quel tablespace predefinito:
Commenti
Risposta
Devi creare un nuovo spazio tabella nel database perché per SYSTEM
accesso al tablespace, sono richiesti i privilegi SYSDBA
.
Quindi, crea un nuovo tablespace e assegnalo come tablespace predefinito a tutti gli utenti. Quando crei un utente, per impostazione predefinita assegnerà uno spazio tabella particolare.
alter database default tablespace users
alter database default tablespace users;
ealter user scott quota 50m on system;