Anteriormente creé un usuario:
SQL>create user suhail identified by password SQL>User created. SQL>Grant create session,create table to suhail; SQL>Grant Succeeded.
pero cuando inicio sesión como suhail
e intento crear un table
Aparece un error que dice ORA-01950: no privileges on tablespace "SYSTEM"
. ¿Qué error es? ¿Por qué ocurre?
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"
Estoy usando Oracle Database 11g Express Edition Release 11.2.0.2.0
Respuesta
Este error dice que el usuario no tiene cuota en el espacio de tabla SYSTEM
que se establece como el espacio de tabla persistente predeterminado. Puede asignar a un usuario la cuota de esta manera:
sql> alter user scott quota 50m on system;
Aquí, 50m
significa que la cuota de usuario en el SYSTEM
espacio de tabla es 50 mebibytes. También puede establecer la cuota en unlimited
.
Sin embargo, es una mala práctica almacenar los datos del usuario y de la aplicación en SYSTEM
tablespace, ya que provoca la fragmentación de datos y, por lo tanto, degrada el rendimiento. Por lo tanto, le recomendaría crear un nuevo tablespace permanente. :
sql> create smallfile tablespace users datafile "/u01/app/oracle/oradata/ORCL/users.dbf" size 10g;
Y luego configúrelo como el espacio de tabla permanente predeterminado de la base de datos para que los objetos creados por los usuarios entren en ese espacio de tabla predeterminado:
Comentarios
Respuesta
Tienes que crear un nuevo espacio de tabla en la base de datos porque para SYSTEM
acceso al espacio de tabla, SYSDBA
se requieren privilegios.
Por lo tanto, cree un nuevo espacio de tabla y asígnelo como el espacio de tabla predeterminado para todos los usuarios. Cuando crea cualquier usuario, de forma predeterminada le asignará un espacio de tabla particular.
alter database default tablespace users
alter database default tablespace users;
yalter user scott quota 50m on system;