Hvad er standard kvote på en tablespace for en given bruger i oracle, hvis du don ' t sæt en?
mit miljø
jeg bruger Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
forklaring af situationen
jeg oprettede en bruger med følgende kommando
create user USRPRACTICA2 identified by 1234 default tablespace users;
så ok, jeg tildelte det en standard tablespace, men jeg har ikke angivet nogen kvotegrænse. Så så gik jeg til Oracle docs, og jeg læste dette:
som standard har en bruger ingen kvote på nogen tablespace i databasen. Hvis brugeren har privilegiet at oprette et skemaobjekt, skal du tildele en kvote for at tillade brugeren at oprette objekter. Minimalt tildele brugere en kvote for standard tablespace, og yderligere kvoter for andre tablespaces, hvor de kan oprette objekter.
så så sagde jeg godt, ok! Nu vil jeg teste, om denne bruger virkelig ikke kan oprette tabeller, hvis jeg ikke tildelte det en kvote.
så gav jeg det disse privilegier:
grant create session to USRPRACTICA2;grant create table to USRPRACTICA2;
Nå, nu skulle jeg ikke kunne oprette tabeller, da jeg ikke angav en kvote på tablespace-brugerne. Lad os prøve.
jeg opretter en forbindelse med USRPRACTICA2 til oracle, jeg prøver at oprette en tabel, og det er hvad der sker:
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.
ups! Bordet blev oprettet.
i dette øjeblik er det, når jeg tænker “Nå, vi skal nu prøve at finde ud af, hvad der er den kvote, der er tildelt den bruger på den tablespace, måske er der en standardkvote i oracle”. Så jeg prøvede dette:
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';no rows selected
på dette tidspunkt tænkte jeg “dette er en vrøvl, måske skrev jeg ikke forespørgslen ordentligt”, så jeg prøvede dette:
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 disse oplysninger gættede jeg, at der helt sikkert ikke blev tildelt nogen kvote til brugere tablespace for den bruger, jeg oprettede.
jeg gættede også, at det i oracle skulle gemmes en værdi med standardkvoten på tablespaces, hvis du ikke indstiller en. Desuden har denne bruger heller ikke ubegrænset plads på tablespace, fordi det ville have vist sig i denne visning med en “MAKS_BYTES -1” værdi.
jeg gennemsøgte meget på udkig efter en standardkvoteværdi i oracle, og alt hvad jeg kunne få er det uddrag fra oracle, der siger “hvis brugeren har privilegiet at oprette et skemaobjekt, skal du tildele en kvote for at give brugeren mulighed for at oprette objekter”. Men selvfølgelig som jeg viste her, skulle det være en standardkvoteværdi et eller andet sted.
for at afslutte, prøvede jeg bare en anden ting. Hvis du tildeler en kvoteværdi for brugeren som denne
alter user USRPRACTICA2 quota 1M on USERS;
nu hvis du spørger tablespace-kvoterne, finder du oplysningerne
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å mit spørgsmål her er…
er der en standardkvoteværdi tildelt en bruger i en tablespace, hvis du ikke angiver den? Hvis ja, hvordan kan jeg vise denne værdi?