¿Cuál es la cuota predeterminada en un espacio de tabla para un usuario determinado en oracle si no establece una cuota'?
Mi entorno
Estoy usando Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Explicación de la situación
Estaba creando un usuario con el siguiente comando
create user USRPRACTICA2 identified by 1234 default tablespace users;
Así que está bien, le asigné un espacio de tabla predeterminado, pero NO HE ESPECIFICADO ningún límite de cuota. Entonces fui a los documentos de Oracle, y leí esto:
De forma predeterminada, un usuario no tiene cuota en ningún espacio de tabla de la base de datos. Si el usuario tiene el privilegio de crear un objeto de esquema, debe asignar una cuota para permitirle crear objetos. Como mínimo, asigne a los usuarios una cuota para el espacio de tablas predeterminado y cuotas adicionales para otros espacios de tablas en los que puedan crear objetos.
Entonces dije bien, ok! Ahora quiero probar si este usuario realmente NO puede crear tablas, por ejemplo, si no le asigné una cuota.
Entonces, le concedí estos privilegios:
grant create session to USRPRACTICA2;grant create table to USRPRACTICA2;
Bueno, ahora no debería poder crear tablas ya que no especificé una cuota en los usuarios de los espacios de tabla. Vamos a intentarlo.
Creo una conexión con USRPRACTICA2 a oracle, trato de crear una tabla, y esto es lo que sucede:
SQL> CREATE TABLE EMP 2 (EMPNO NUMBER(4) NOT NULL, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), 6 HIREDATE DATE, 7 SAL NUMBER(7, 2), 8 COMM NUMBER(7, 2), 9 DEPTNO NUMBER(2));Tabla creada.
Oops! La mesa fue creada.
En este momento es cuando pienso «bueno, ahora deberíamos intentar averiguar cuál es la cuota asignada a ese usuario en ese espacio de tabla, tal vez haya una cuota predeterminada en oracle». Así que probé esto.:
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';no rows selected
En este punto estaba pensando «esto es una tontería, tal vez no escribí la consulta correctamente», así que probé esto:
SQL> select * from dba_ts_quotas;TABLESPACE_NAME USERNAME BYTES MAX_BYTES BLOCKS MAX_BLO------------------------------ -------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ----------SYSAUX AUDSYS 655360 -1 80SYSAUX GSMADMIN_INTERNAL 917504 -1 112SYSAUX DBSFWUSER 0 -1 0SYSAUX APPQOSSYS 0 -1 0SYSAUX GGSYS 0 -1 0SYSAUX OLAPSYS 0 -1 06 rows selected.
Así que con esta información, adiviné que, sin duda, no se asignó ninguna cuota para el espacio de tablas de usuarios para el usuario que creé.
Además, adiviné que en oracle debería almacenarse algún valor con la cuota predeterminada en los espacios de tabla si no establece uno. Además, ese usuario tampoco tiene espacio ilimitado en el espacio de tabla, porque habría aparecido en esa vista con un valor «MAX_BYTES -1».
Navegué mucho buscando un valor de cuota predeterminado en oracle, y todo lo que pude obtener es ese fragmento de oracle que dice «Si el usuario tiene el privilegio de crear un objeto de esquema, debe asignar una cuota para permitir que el usuario cree objetos». Pero obviamente, como mostré aquí, debería ser un valor de cuota predeterminado en algún lugar.
Para terminar, acabo de probar otra cosa. Si asigna un valor de cuota para el usuario como este
alter user USRPRACTICA2 quota 1M on USERS;
Ahora si consulta las cuotas de espacio de tabla, encontrará la información
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';TABLE USERNAME MAX_BYTES----- ------------ ----------USERS USRPRACTICA2 1048576
Así que mi pregunta aquí es…
¿Hay un valor de cuota predeterminado asignado a un usuario en un espacio de tabla si no lo especifica? Si es así, ¿cómo puedo mostrar ese valor?