“ORA-01950: sem privilégios no espaço de tabela 'SYSTEM'”: que erro é esse?

15

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 eu faço o login suhaile 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 Release 11.2.0.2.0

Suhail Gupta
fonte

Respostas:

22

Este erro diz que o usuário não possui cota no espaço de tabela SYSTEMque é definido como o espaço de tabela persistente padrão. Você pode atribuir a um usuário a cota assim:

sql> alter user scott quota 50m on system;

Aqui, 50msignifica que a cota do usuário no SYSTEMespaço de tabela é de 50 mebibytes. Você também pode definir a cota para unlimited.

No entanto, é uma prática recomendada armazenar dados de usuários e aplicativos no SYSTEMespaço de tabela, pois causa fragmentação dos dados e, portanto, prejudica o desempenho. Então, eu 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 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:

sql> alter database default tablespace users;
Yasir Arsanukaev
fonte
você pode, por favor, explicar o comandoalter database default tablespace users
Suhail Gupta 11/03/2013
1
No Oracle XE 11, o espaço de tabela de usuários já existe, então você só precisa alter database default tablespace users;ealter user scott quota 50m on system;
Andrew Spencer
2

É necessário criar um novo espaço de tabela no banco de dados, pois para o SYSTEMacesso ao espaço de tabela, SYSDBAsão necessários privilégios.

Portanto, crie um novo espaço de tabela e atribua-o como o espaço de tabela padrão a todos os usuários. Quando você cria um usuário, por padrão, ele atribui um espaço de tabela específico.

Ankit
fonte