Vad är standardkvoten på ett tabellutrymme för en viss användare i oracle om du inte't ställer in en?
min miljö
jag använder Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
förklaring av situationen
jag skapade en användare med följande kommando
create user USRPRACTICA2 identified by 1234 default tablespace users;
så ok, jag tilldelade det ett standardbord, men jag har inte angett någon kvotgräns. Så då gick jag till Oracle docs, och jag läste detta:
som standard har en användare ingen kvot på något tabellutrymme i databasen. Om användaren har behörighet att skapa ett schemaobjekt måste du tilldela en kvot för att tillåta användaren att skapa objekt. Tilldela användare en kvot för standardtabellen och ytterligare kvoter för andra tabellutrymmen där de kan skapa objekt.
så då sa jag bra, ok! Nu vill jag testa om den här användaren verkligen inte kan skapa tabeller till exempel om jag inte tilldelade den en kvot.
sedan beviljade jag det dessa privilegier:
grant create session to USRPRACTICA2;grant create table to USRPRACTICA2;
Tja, nu borde jag inte kunna skapa tabeller eftersom jag inte angav en kvot på tablespace-användarna. Låt oss prova det.
jag skapar en anslutning med USRPRACTICA2 till oracle, jag försöker skapa ett bord, och det här är vad som händer:
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.
Hoppsan! Bordet skapades.
just nu är när jag tänker ”Tja, vi borde nu försöka lista ut vad som är kvoten tilldelad den användaren på det tabellutrymmet, kanske finns det en standardkvot i oracle”. Så jag försökte detta:
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';no rows selected
vid denna tidpunkt tänkte jag ”det här är en nonsens, kanske skrev jag inte frågan ordentligt”, så jag försökte det här:
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.
så med denna information gissade jag att, säkert, ingen kvot tilldelades för användare tabellutrymme för användaren som jag skapade.
jag gissade också att i oracle borde det lagras något värde med standardkvoten på tabellutrymmen om du inte ställer in en. Dessutom har den användaren inte obegränsat utrymme på tabellutrymmet, eftersom det skulle ha dykt upp i den vyn med ett ”MAX_BYTES -1” – värde.
jag bläddrade mycket och letade efter ett standardkvotvärde i oracle, och allt jag kunde få är det utdrag från oracle som säger ”om användaren har privilegiet att skapa ett schemaobjekt måste du tilldela en kvot för att tillåta användaren att skapa objekt”. Men uppenbarligen som jag visade här borde det vara ett standardkvotvärde någonstans.
för att avsluta försökte jag bara en annan sak. Om du tilldelar ett kvotvärde för användaren så här
alter user USRPRACTICA2 quota 1M on USERS;
nu om du frågar tabellkvoterna hittar du informationen
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
så min fråga här är…
finns det ett standardkvotvärde tilldelat en användare i ett tabellutrymme om du inte anger det? Om så är fallet, hur kan jag visa det värdet?