“ORA-01950:表空间 'SYSTEM' 上没有权限”:这是什么错误?

Suh*_*pta 16 oracle oracle-11g-r2 permissions tablespaces

早些时候我创建了一个用户:

SQL>create user suhail identified by password
SQL>User created.
SQL>Grant create session,create table to suhail;
SQL>Grant Succeeded.
Run Code Online (Sandbox Code Playgroud)

但是当我以身份登录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'
Run Code Online (Sandbox Code Playgroud)

我使用的是 Oracle 数据库 11g 快捷版 11.2.0.2.0 版

Yas*_*irA 22

此错误表示用户在SYSTEM设置为默认持久表空间的表空间上没有配额。您可以像这样为用户分配配额:

sql> alter user scott quota 50m on system;
Run Code Online (Sandbox Code Playgroud)

这里,50m表示SYSTEM表空间上的用户配额为 50 兆字节。您还可以将配额设置为unlimited.

然而,将用户和应用程序数据存储在SYSTEM表空间中是一种不好的做法,因为它会导致数据碎片化,从而降低性能。所以我建议你创建一个新的永久表空间:

sql> create smallfile tablespace users datafile '/u01/app/oracle/oradata/ORCL/users.dbf' size 10g;
Run Code Online (Sandbox Code Playgroud)

然后将其设置为默认数据库永久表空间,以便用户创建的对象进入该默认表空间:

sql> alter database default tablespace users;
Run Code Online (Sandbox Code Playgroud)