«ORA-01950: нет прав для табличного пространства« SYSTEM »»: что это за ошибка?

15

Ранее я создал пользователя:

SQL>create user suhail identified by password
SQL>User created.
SQL>Grant create session,create table to suhail;
SQL>Grant Succeeded.

но когда я вхожу как suhailи пытаюсь создать, tableя получаю сообщение об ошибке ORA-01950: no privileges on tablespace 'SYSTEM'. Что это за ошибка? Почему это происходит?


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'

Я использую Oracle Database 11g Express Edition Release 11.2.0.2.0

Сухай гупта
источник

Ответы:

22

Эта ошибка говорит о том, что у пользователя нет квоты на табличное пространство, SYSTEMкоторая установлена ​​как постоянное табличное пространство по умолчанию. Вы можете назначить пользователю квоту следующим образом:

sql> alter user scott quota 50m on system;

Здесь 50mозначает, что пользовательская квота в SYSTEMтабличном пространстве составляет 50 мегабайт. Вы также можете установить квоту на unlimited.

Однако хранить данные пользователей и приложений в SYSTEMтабличном пространстве - плохая практика, так как это приводит к фрагментации данных и, следовательно, к снижению производительности. Поэтому я бы порекомендовал вам создать новое постоянное табличное пространство:

sql> create smallfile tablespace users datafile '/u01/app/oracle/oradata/ORCL/users.dbf' size 10g;

А затем установите его как постоянное табличное пространство базы данных по умолчанию, чтобы объекты, созданные пользователями, попадали в это табличное пространство по умолчанию:

sql> alter database default tablespace users;
Ясир Арсанукаев
источник
не могли бы вы объяснить командуalter database default tablespace users
Suhail Gupta
1
В Oracle XE 11 табличное пространство пользователей уже существует, так что вам нужно только alter database default tablespace users;иalter user scott quota 50m on system;
Эндрю Спенсер
2

Вы должны создать одно новое табличное пространство в базе данных, потому что для SYSTEMдоступа к табличному пространству SYSDBAтребуются привилегии.

Итак, создайте одно новое табличное пространство и назначьте его в качестве табличного пространства по умолчанию для всех пользователей. Когда вы создаете любого пользователя, по умолчанию он будет назначать определенное табличное пространство.

Анкит
источник