Plus tôt, j'ai créé un utilisateur:
SQL>create user suhail identified by password
SQL>User created.
SQL>Grant create session,create table to suhail;
SQL>Grant Succeeded.
mais lorsque je me connecte en tant que suhail
et que j'essaye de créer un table
j'obtiens une erreur disant ORA-01950: no privileges on tablespace 'SYSTEM'
. De quelle erreur s'agit-il? Pourquoi cela se produit-il?
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'
J'utilise Oracle Database 11g Express Edition version 11.2.0.2.
Cette erreur indique que l'utilisateur n'a pas de quota sur le tablespace SYSTEM
qui est défini comme le tablespace persistant par défaut. Vous pouvez attribuer à un utilisateur le quota comme ceci:
sql> alter user scott quota 50m on system;
Ici, 50m
signifie que le quota utilisateur sur l'espace de table SYSTEM
est de 50 mégaoctets. Vous pouvez également définir le quota sur unlimited
.
Cependant, il est déconseillé de stocker les données des utilisateurs et des applications dans l'espace de table SYSTEM
car cela entraîne une fragmentation des données et dégrade ainsi les performances. Je vous recommande donc de créer un nouvel espace disque logique permanent:
sql> create smallfile tablespace users datafile '/u01/app/Oracle/oradata/ORCL/users.dbf' size 10g;
Et puis définissez-le comme espace de table permanent de base de données par défaut afin que les objets créés par les utilisateurs entrent dans cet espace de table par défaut:
sql> alter database default tablespace users;
Vous devez créer un nouvel espace de table dans la base de données car pour l'accès à l'espace de table SYSTEM
, les privilèges SYSDBA
sont requis.
Créez donc un nouvel espace de table et affectez-le comme espace de table par défaut à tous les utilisateurs. Lorsque vous créez un utilisateur, il donnera par défaut un espace de table particulier.