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 zkuste vytvořit table
zobrazí se chyba s hlášením ORA-01950: no privileges on tablespace "SYSTEM"
. Co je to za chybu? 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 Release 11.2.0.2.0
Odpověď
Tato chyba říká, že uživatel nemá v tabulkovém prostoru kvótu SYSTEM
který je nastaven jako výchozí trvalý tabulkový prostor. Kvótu můžete uživateli přiřadit takto:
sql> alter user scott quota 50m on system;
Zde 50m
znamená, že kvóta uživatele v tabulkovém prostoru SYSTEM
je 50 megabajtů. Kvótu můžete také nastavit na unlimited
.
Je však špatnou praxí ukládat data uživatelů a aplikací do tabulkového prostoru SYSTEM
, protože to způsobuje fragmentaci dat a tím snižuje výkon. Doporučil bych vám proto vytvořit nový trvalý tabulkový prostor :
sql> create smallfile tablespace users datafile "/u01/app/oracle/oradata/ORCL/users.dbf" size 10g;
A poté jej nastavit jako výchozí trvalý tabulkový prostor databáze tak, aby objekty vytvořené uživateli šly do tohoto výchozího tabulkového prostoru:
Komentáře
Odpověď
Musíte vytvořit jeden nový tabulkový prostor do databáze, protože pro SYSTEM
přístup do tabulkového prostoru, jsou požadována oprávnění SYSDBA
.
Takže vytvořte jeden 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í přidělí konkrétní tabulkový prostor.
alter database default tablespace users
alter database default tablespace users;
aalter user scott quota 50m on system;