Aiemmin luonut käyttäjän:
SQL>create user suhail identified by password SQL>User created. SQL>Grant create session,create table to suhail; SQL>Grant Succeeded.
mutta kun kirjaudun sisään nimellä suhail
ja yritä luoda table
Saan virheen sanomalla ORA-01950: no privileges on tablespace "SYSTEM"
. Mikä virhe on? Miksi se tapahtuu?
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"
Käytän Oracle Database 11g Express Edition -versiota 11.2.0.2.0
Vastaus
Tämä virhe kertoo, että käyttäjällä ei ole kiintiötä taulukotilassa SYSTEM
joka on asetettu pysyväksi oletustaulukoksi oletustilaksi. Voit määrittää käyttäjälle kiintiön näin:
sql> alter user scott quota 50m on system;
Täällä, 50m
tarkoittaa, että käyttäjän kiintiö SYSTEM
-taulukossa on 50 megatavua. Voit myös asettaa kiintiön arvoksi unlimited
.
Käyttäjä- ja sovellustietojen tallentaminen SYSTEM
-taulukkoihin on kuitenkin huono käytäntö, koska se aiheuttaa tietojen pirstoutumista ja heikentää siten suorituskykyä. Suosittelen, että luot uuden pysyvän taulukotilan :
sql> create smallfile tablespace users datafile "/u01/app/oracle/oradata/ORCL/users.dbf" size 10g;
Ja aseta se sitten oletustietokannan pysyväksi taulukkotilaksi, jotta käyttäjien luomat objektit menevät kyseiseen taulukkotilaan:
Kommentit
vastaus
Sinun on luotava yksi uusi taulukotila tietokantaan, koska SYSTEM
taulukotilan käyttöoikeus, SYSDBA
-oikeudet ovat välttämättömiä.
Luo siis yksi uusi taulukotila ja määritä se oletustaulukotilaksi kaikille käyttäjille. Kun luot minkä tahansa käyttäjän, se antaa oletusarvoisesti tietyn taulukotilan.
alter database default tablespace users
alter database default tablespace users;
jaalter user scott quota 50m on system;