Dříve jsem vytvořil uživatele:
SQL>create user suhail identified by password
SQL>User created.
SQL>Grant create session,create table to suhail;
SQL>Grant Succeeded.
ale když se přihlásím jako suhail
a pokusím se vytvořit table
dostanu chybovou zprávu ORA-01950: no privileges on tablespace 'SYSTEM'
. Jaká je chyba? Proč k tomu dochází?
SQL> connect suhail
Enter password:
Connected.
SQL> create table suhail_table(name char(10));
create table suhail_table(name char(10))
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'SYSTEM'
Používám Oracle Database 11g Express Edition verze 11.2.0.2.
Tato chyba říká, že uživatel nemá kvótu v tabulkovém prostoru SYSTEM
, která je nastavena jako výchozí trvalý tabulkový prostor. Uživateli můžete přiřadit kvótu takto:
sql> alter user scott quota 50m on system;
Tady, 50m
znamená, že uživatelská kvóta v tabulkovém prostoru SYSTEM
je 50 mebibytes. Můžete také nastavit kvótu na unlimited
.
Je však špatnou praxí ukládat uživatelská a aplikační data do tabulkového prostoru SYSTEM
, protože to způsobuje fragmentaci dat a snižuje tak výkon. Doporučuji vám proto vytvořit nový stálý tabulkový prostor:
sql> create smallfile tablespace users datafile '/u01/app/Oracle/oradata/ORCL/users.dbf' size 10g;
A pak jej nastavte jako výchozí databázový trvalý tabulkový prostor, takže objekty vytvořené uživateli přejdou do tohoto výchozího tabulkového prostoru:
sql> alter database default tablespace users;
Musíte vytvořit jeden nový tabulkový prostor do databáze, protože pro přístup do tabulkového prostoru SYSTEM
jsou vyžadována oprávnění SYSDBA
.
Vytvořte tedy nový nový tabulkový prostor a přiřaďte jej jako výchozí tabulkový prostor všem uživatelům. Když vytvoříte libovolného uživatele, ve výchozím nastavení mu přiřadí konkrétní tabulkový prostor.