“ 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 11.2.0.2.0版

Answers:


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古普塔

1
在Oracle XE 11上,用户表空间已经存在,因此您只需要alter database default tablespace users;alter user scott quota 50m on system;
Andrew Spencer

2

您必须在数据库中创建一个新表空间,因为对SYSTEM表空间的访问SYSDBA需要特权。

因此,创建一个新表空间并将其作为默认表空间分配给所有用户。当您创建任何用户时,默认情况下,它将为您分配特定的表空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.