mikä on oletuskiintiö taulukkotasolla tietylle käyttäjälle oracle jos olet't asettaa yhden?
oma ympäristö
käytän Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
tilanteen selitystä
olin luomassa käyttäjää seuraavalla komennolla
create user USRPRACTICA2 identified by 1234 default tablespace users;
joten ok, määritin sille oletustaulukkopaikan, mutta en ole määritellyt mitään kiintiörajoitusta. Menin Oraakkelilääkärille ja luin tämän.:
oletuksena Käyttäjällä ei ole kiintiötä missään tietokannan taulukoissa. Jos käyttäjällä on oikeus luoda skeema-objekti, sinun on annettava kiintiö, jotta käyttäjä voi luoda objekteja. Aseta käyttäjille minimaalisesti kiintiö oletustaulutilalle ja lisäkiintiöt muille pöytätiloille, joissa he voivat luoda objekteja.
niin sitten sanoin No, ok! Nyt haluan testata, jos tämä käyttäjä ei todellakaan voi luoda taulukoita esimerkiksi, jos en antanut sille kiintiötä.
sitten annoin sille nämä oikeudet:
grant create session to USRPRACTICA2;grant create table to USRPRACTICA2;
No, nyt minun ei pitäisi pystyä luomaan taulukoita, koska en määritellyt kiintiötä tablespacen käyttäjille. Kokeillaan.
luon USRPRACTICA2: lla yhteyden oraakkeliin, yritän luoda taulukon, ja näin tapahtuu:
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.
Hups! Pöytä luotiin.
tällä hetkellä ajattelen, että ”No, meidän pitäisi nyt yrittää selvittää, mikä on tuolle käyttäjälle määrätty kiintiö tuossa pöytätasossa, ehkä Oraclessa on oletuskiintiö”. Kokeilin tätä.:
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';no rows selected
tässä vaiheessa ajattelin ,että ”tämä on hölynpölyä, ehkä en kirjoittanut kyselyä oikein”, joten kokeilin tätä:
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.
joten tämän tiedon arvasin, että varmasti, ei kiintiö oli määritetty käyttäjille tablespace käyttäjälle, että olen luonut.
arvelin myös, että Oraclessa sille pitäisi tallentaa jokin arvo oletuskiintiöineen pöytäavaruuksiin, jos sellaista ei aseta. Lisäksi kyseisellä Käyttäjällä ei myöskään ole rajatonta tilaa tablespacessa, koska se olisi ilmestynyt kyseiseen näkymään arvolla ”MAX_BYTES -1”.
selasin paljon etsien oletuskiintiöarvoa Oraclessa, ja sain vain pätkän Oraclesta, jossa sanottiin ”jos käyttäjällä on oikeus luoda skeema-objekti, sinun on annettava kiintiö, jotta käyttäjä voi luoda objekteja”. Mutta kuten tässä osoitin, sen pitäisi olla kiintiön oletusarvo jossain.
loppuun asti kokeilin vain toista asiaa. Jos annatte käyttäjälle kiintiöarvon näin
alter user USRPRACTICA2 quota 1M on USERS;
nyt jos kyselette taulukoiden kiintiöitä, löydätte tiedon
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
, joten kysymykseni tässä on…
annetaanko käyttäjälle oletuskiintiöarvo taulukkotasossa, jos sitä ei määritellä? Jos on, miten voin osoittaa sen arvon?