jaki jest domyślny limit na tablespace dla danego użytkownika w oracle jeśli nie ustawisz'?

moje środowisko

używamOracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

wyjaśnienie sytuacji

tworzyłem użytkownika za pomocą następującego polecenia

create user USRPRACTICA2 identified by 1234 default tablespace users;

więc ok, przypisałem mu domyślną przestrzeń tablespace, ale nie podałem żadnego limitu kwot. Więc poszedłem do Oracle docs i przeczytałem to:

domyślnie użytkownik nie ma limitu na żadnej przestrzeni w bazie danych. Jeśli użytkownik ma uprawnienia do tworzenia obiektu schematu, należy przypisać limit, aby umożliwić użytkownikowi tworzenie obiektów. Minimalnie Przypisz użytkownikom limit domyślnej przestrzeni stołowej i dodatkowe limity dla innych przestrzeni stołowych, w których mogą tworzyć obiekty.

więc powiedziałem dobrze, ok! Teraz chcę sprawdzić, czy ten użytkownik naprawdę nie może tworzyć tabel, na przykład, jeśli nie przypisałem mu limitu.
wtedy przyznałem mu te przywileje:

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

Cóż, teraz nie powinienem być w stanie tworzyć tabel, ponieważ nie określiłem limitu na użytkowników przestrzeni tabel. Spróbujmy.
tworzę połączenie z USRPRACTICA2 do oracle, próbuję stworzyć tabelę i tak się dzieje:

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! Stół został stworzony.

w tym momencie myślę „cóż, powinniśmy teraz spróbować dowiedzieć się, jaki jest limit przypisany temu użytkownikowi na tej przestrzeni stołowej, może jest domyślny limit w oracle”. Więc próbowałem tego:

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

w tym momencie myślałem „to bzdura, może nie napisałem poprawnie zapytania”, więc próbowałem tego:

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.

więc z tej informacji domyśliłem się, że, na pewno, nie został przypisany limit na użytkowników tablespace dla użytkownika, który stworzyłem.
poza tym domyślałem się, że w oracle powinna być zapisana jakaś wartość z domyślnym limitem na tablespaces, jeśli jej nie ustawisz. Co więcej, ten użytkownik nie ma również nieograniczonej przestrzeni na powierzchni stołu, ponieważ pojawiłby się w tym widoku z wartością „MAX_BYTES -1”.

przeglądałem wiele szukając domyślnej wartości kwot w oracle, a wszystko, co mogłem uzyskać, to fragment z oracle mówiący „jeśli użytkownik ma uprawnienia do tworzenia obiektu schematu, musisz przypisać kwotę, aby umożliwić użytkownikowi tworzenie obiektów”. Ale oczywiście, jak pokazałem tutaj, powinna to być gdzieś domyślna wartość kwot.

aby zakończyć, właśnie próbowałem innej rzeczy. Jeśli nie przypisać wartość kontyngentu dla użytkownika, jak to

alter user USRPRACTICA2 quota 1M on USERS; 

teraz, jeśli zapytanie kwot tablespace, znajdziesz informacje

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

więc moje pytanie jest tutaj…

czy istnieje domyślna wartość kontyngentu przypisana do użytkownika w przestrzeni stołowej, jeśli go nie określisz? Jeśli tak, jak mogę pokazać tę wartość?

Leave a Reply

Twój adres e-mail nie zostanie opublikowany.