jaká je výchozí kvóta na prostírání pro daného uživatele v oracle, pokud nechcete't nastavit jeden?
Moje prostředí
používám Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
vysvětlení situace
vytvářel jsem uživatele následujícím příkazem
create user USRPRACTICA2 identified by 1234 default tablespace users;
takže ok, přiřadil jsem mu výchozí tabulkový prostor, ale nezadal jsem žádný limit kvóty. Tak jsem šel do Oracle docs, a četl jsem to:
ve výchozím nastavení nemá Uživatel žádnou kvótu na žádné ploše v databázi. Pokud má uživatel oprávnění k vytvoření objektu schématu, musíte přiřadit kvótu, která uživateli umožní vytvářet objekty. Minimálně přiřaďte uživatelům kvótu pro výchozí prostor tabulky a další kvóty pro další prostory tabulky, ve kterých mohou vytvářet objekty.
tak jsem řekl dobře, ok! Nyní chci vyzkoušet, zda tento uživatel opravdu nemůže vytvořit tabulky, například pokud jsem mu nepřidělil kvótu.
pak jsem mu udělil tato privilegia:
grant create session to USRPRACTICA2;grant create table to USRPRACTICA2;
No, teď bych neměl být schopen vytvářet tabulky, protože jsem nezadal kvótu na tablespace uživatele. Zkusíme to.
vytvářím spojení s USRPRACTICA2 s oracle, snažím se vytvořit tabulku a to se stane:
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.
Jejda! Tabulka byla vytvořena.
v tuto chvíli si myslím ,že „no, měli bychom se nyní pokusit zjistit, jaká je kvóta přiřazená tomuto uživateli na tomto stolním prostoru, možná je v oracle výchozí kvóta“. Tak jsem to zkusil:
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';no rows selected
v tuto chvíli jsem si myslel „To je nesmysl, možná jsem nenapsal dotaz správně“, tak jsem to zkusil:
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.
takže s touto informací jsem uhodl, že pro uživatele, který jsem vytvořil, nebyla přidělena žádná kvóta.
také jsem uhodl, že v oracle by měla být uložena nějaká hodnota s výchozí kvótou na tabulkách, pokud ji nenastavíte. Navíc, že uživatel také nemá neomezený prostor na tablespace, protože by se objevil v tomto pohledu s hodnotou“ MAX_BYTES -1″.
hodně jsem procházel hledáním výchozí hodnoty kvóty v oracle a vše, co jsem mohl získat, je ten úryvek z oracle, který říká: „Pokud má uživatel oprávnění k vytvoření objektu schématu, musíte přiřadit kvótu, která uživateli umožní vytvářet objekty“. Ale samozřejmě, jak jsem zde ukázal, někde by to měla být výchozí hodnota kvóty.
na závěr jsem zkusil jinou věc. Pokud přidělíte hodnotu kvóty pro uživatele, jako je tento
alter user USRPRACTICA2 quota 1M on USERS;
Nyní, pokud se dotazujete na kvóty tablespace, najdete informace
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
takže moje otázka je zde…
existuje výchozí hodnota kvóty přiřazená uživateli v prostoru tabulky, pokud ji nezadáte? Pokud ano, jak mohu tuto hodnotu ukázat?