Eerder heb ik een gebruiker aangemaakt:
SQL>create user suhail identified by password SQL>User created. SQL>Grant create session,create table to suhail; SQL>Grant Succeeded.
maar als ik inlog als suhail
en probeer een table
te maken. Ik krijg een foutmelding met ORA-01950: no privileges on tablespace "SYSTEM"
. Welke fout is het? Waarom gebeurt dit?
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"
Ik gebruik Oracle Database 11g Express Edition Release 11.2.0.2.0
Answer
Deze fout zegt dat de gebruiker “geen quota heeft voor de tabelruimte SYSTEM
die is ingesteld als de standaard persistente tabelruimte. U kunt een gebruiker het quotum als volgt toewijzen:
sql> alter user scott quota 50m on system;
Hier 50m
betekent dat het gebruikersquotum op de SYSTEM
-tabelruimte 50 mebibytes is. U kunt het quotum ook instellen op unlimited
.
Het is echter een slechte gewoonte om gebruikers- en applicatiegegevens op te slaan in SYSTEM
tabelruimte, aangezien dit gegevensfragmentatie veroorzaakt en dus de prestaties verslechtert. Daarom raad ik u aan een nieuwe permanente tabelruimte te maken :
sql> create smallfile tablespace users datafile "/u01/app/oracle/oradata/ORCL/users.dbf" size 10g;
En stel het vervolgens in als de standaard database permanente tabelruimte zodat objecten die door de gebruikers zijn gemaakt naar die standaard tabelruimte gaan:
Reacties
Antwoord
Je moet een nieuwe tabelruimte aanmaken in de database omdat voor de SYSTEM
toegang tot de tabelruimte, SYSDBA
rechten zijn vereist.
Maak dus een nieuwe tabelruimte aan en wijs deze toe als de standaardtabelruimte aan alle gebruikers. Wanneer u een gebruiker aanmaakt, zal deze standaard een bepaalde tafelruimte toewijzen.
alter database default tablespace users
alter database default tablespace users;
enalter user scott quota 50m on system;