mi az alapértelmezett kvóta egy tablespace egy adott felhasználó oracle, ha nem't beállítani egy?

környezetem

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

a helyzet magyarázata

a következő paranccsal hoztam létre egy felhasználót

create user USRPRACTICA2 identified by 1234 default tablespace users;

tehát rendben, hozzárendeltem egy alapértelmezett táblaterületet, de nem adtam meg kvótakorlátot. Aztán elmentem az Oracle docs-hoz, és ezt olvastam:

alapértelmezés szerint a felhasználónak nincs kvótája az adatbázis egyik táblaterületén sem. Ha a felhasználó jogosult sémaobjektum létrehozására, akkor hozzá kell rendelnie egy kvótát, amely lehetővé teszi a felhasználó számára objektumok létrehozását. Minimálisan rendeljen a felhasználóknak kvótát az alapértelmezett táblaterülethez, további kvótákat pedig más táblaterületekhez, amelyekben objektumokat hozhatnak létre.

tehát akkor azt mondtam, Jól van! Most azt akarom tesztelni, hogy ez a felhasználó valóban nem tud-e táblákat létrehozni, ha nem rendeltem hozzá kvótát.
ezután megadtam neki ezeket a kiváltságokat:

grant create session to USRPRACTICA2;grant create table to USRPRACTICA2; 

Nos, most már nem tudok táblákat létrehozni, mivel nem adtam meg kvótát a tablespace felhasználóira. Próbáljuk meg.
kapcsolatot hozok létre az USRPRACTICA2-vel az oracle-hez, megpróbálok létrehozni egy táblát, és ez történik:

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.

Hoppá! Az asztal létrejött.

ebben a pillanatban azt gondolom, hogy “Nos, most meg kell próbálnunk kitalálni, hogy mi a kvóta az adott felhasználóhoz az adott táblaterületen, talán van egy alapértelmezett kvóta az oracle-ben”. Szóval megpróbáltam ezt:

SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';no rows selected

ezen a ponton arra gondoltam, hogy “ez ostobaság, talán nem írtam megfelelően a lekérdezést”, ezért megpróbáltam ezt:

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.

tehát ezzel az információval sejtettem, hogy biztosan nem rendeltek kvótát a felhasználók táblaterületéhez az általam létrehozott felhasználó számára.
azt is kitaláltam, hogy az oracle – ben valamilyen értéket kell tárolni az alapértelmezett kvótával a tablespaces-en, ha nem állít be egyet. Továbbá, hogy a felhasználó is nincs korlátlan hely a tablespace, mert megjelent volna, hogy a nézet egy “MAX_BYTES -1” értéket.

sokat böngésztem az alapértelmezett kvótaértéket keresve az oracle – ben, és csak azt a részletet tudtam megkapni az oracle-től, amely azt mondja: “Ha a Felhasználónak joga van sémaobjektum létrehozására, akkor kvótát kell rendelnie ahhoz, hogy a felhasználó objektumokat hozzon létre”. De nyilvánvalóan, ahogy itt megmutattam, valahol alapértelmezett kvótaértéknek kell lennie.

hogy befejezzem, csak kipróbáltam egy másik dolgot. Ha hozzárendel egy kvótaértéket a felhasználóhoz, mint ez

alter user USRPRACTICA2 quota 1M on USERS; 

most, ha lekérdezi a táblaterület kvótákat, megtalálja az információkat

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

tehát a kérdésem itt van…

van-e alapértelmezett kvótaérték hozzárendelve egy felhasználóhoz egy tablespace-ben, ha nem adja meg? Ha igen, hogyan tudom megmutatni ezt az értéket?

Leave a Reply

Az e-mail-címet nem tesszük közzé.