Anteriormente, criei um usuário:
SQL>create user suhail identified by password SQL>User created. SQL>Grant create session,create table to suhail; SQL>Grant Succeeded.
mas quando faço login como suhail
e tento criar um table
Recebo um erro dizendo ORA-01950: no privileges on tablespace "SYSTEM"
. Que erro é esse? Por que isso ocorre?
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"
Estou usando o Oracle Database 11g Express Edition versão 11.2.0.2.0
Resposta
Este erro diz que o usuário não tem cota no espaço de tabela SYSTEM
que é definido como o espaço de tabela persistente padrão. Você pode atribuir a cota a um usuário assim:
sql> alter user scott quota 50m on system;
Aqui, 50m
significa que a cota do usuário no espaço de tabela SYSTEM
é de 50 mebibytes. Você também pode definir a cota para unlimited
.
No entanto, é uma prática ruim armazenar dados de usuários e aplicativos no espaço de tabela SYSTEM
, pois isso causa fragmentação de dados e, portanto, degrada o desempenho. Portanto, recomendo que você crie um novo espaço de tabela permanente :
sql> create smallfile tablespace users datafile "/u01/app/oracle/oradata/ORCL/users.dbf" size 10g;
E então defina-o como o espaço de tabela permanente do banco de dados padrão para que os objetos criados pelos usuários entrem nesse espaço de tabela padrão:
Comentários
Resposta
Você deve criar um novo espaço de tabela no banco de dados porque para SYSTEM
acesso ao espaço de tabela, SYSDBA
privilégios são necessários.
Portanto, crie um novo espaço de tabela e atribua-o como o espaço de tabela padrão para todos os usuários. Quando você cria qualquer usuário, por padrão, ele atribui um espaço de tabela específico.
alter database default tablespace users
alter database default tablespace users;
ealter user scott quota 50m on system;