Qual é a cota padrão em um tablespace para um determinado usuário no oracle se você não definir um?
ambiente
eu estou usando Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Explicação da situação
eu estava criando um usuário com o seguinte comando
create user USRPRACTICA2 identified by 1234 default tablespace users;
Então ok, eu lhe atribuído um tablespace padrão, mas eu NÃO ESPECIFICADO qualquer limite de cota. Então eu fui para os documentos Oracle, e eu li isso:
por padrão, um usuário não tem cota em nenhum espaço de tabela no banco de dados. Se o usuário tiver o privilégio de criar um objeto de esquema, você deve atribuir uma cota para permitir que o usuário crie objetos. Minimamente, atribua aos usuários uma cota para o espaço de tabela padrão e cotas adicionais para outros espaços de tabela nos quais eles podem criar objetos.
então eu disse bem, ok! Agora quero testar se esse usuário realmente não pode criar tabelas, por exemplo, se não atribuí a ele uma cota.
então, eu concedi esses privilégios:
grant create session to USRPRACTICA2;grant create table to USRPRACTICA2;
bem, agora não deveria ser capaz de criar tabelas, pois não especificei uma cota nos usuários do tablespace. Vamos tentar.
eu crio uma conexão com USRPRACTICA2 para oracle, tento criar uma tabela, e é isso que acontece:
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! A tabela foi criada.
neste momento é quando eu penso “bem, agora devemos tentar descobrir qual é a cota atribuída a esse usuário nesse espaço de tabela, talvez haja uma cota padrão no oracle”. Então eu tentei isso:
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';no rows selected
neste ponto, eu estava pensando “isso é um absurdo, talvez eu não escrever corretamente a consulta”, então eu tentei isso:
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.
Assim, com esta informação eu imaginei que, com certeza, a quota não foi atribuído para os usuários tablespace para o usuário que eu criei.
além disso, adivinhei que no oracle deveria ser armazenado algum valor com a cota padrão em tablespaces se você não definir um. Além disso, esse usuário também não tem espaço ilimitado no espaço de tabela, porque teria aparecido nessa visualização com um valor” MAX_BYTES -1″.
eu pesquisei muito Procurando um valor de cota padrão no oracle, e tudo o que pude obter é aquele trecho do oracle dizendo “se o usuário tiver o privilégio de criar um objeto de esquema, você deve atribuir uma cota para permitir que o usuário crie objetos”. Mas, obviamente, como mostrei aqui, deve ser um valor de cota padrão em algum lugar.
para terminar, acabei de tentar outra coisa. Se você atribuir um valor de cota para o usuário como este
alter user USRPRACTICA2 quota 1M on USERS;
agora, se você consultar as cotas de tablespace, encontrará as informações
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
então minha pergunta aqui está…
existe um valor de cota padrão atribuído a um usuário em um tablespace se você não especificá-lo? Em caso afirmativo, como posso mostrar esse valor?