Tidligere oprettede jeg en bruger:

SQL>create user suhail identified by password SQL>User created. SQL>Grant create session,create table to suhail; SQL>Grant Succeeded. 

men når jeg logger ind som suhail og prøv at oprette en table Jeg får en fejl med at sige ORA-01950: no privileges on tablespace "SYSTEM" . Hvilken fejl er det? Hvorfor sker det?


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" 

Jeg bruger Oracle Database 11g Express Edition version 11.2.0.2.0

Svar

Denne fejl siger, at brugeren ikke har en kvote på tablespace SYSTEM som er indstillet som standard vedvarende tabellerum. Du kan tildele en bruger kvoten som denne:

sql> alter user scott quota 50m on system; 

Her, 50m betyder, at brugerkvoten på SYSTEM -tabellen er 50 mebibytes. Du kan også indstille kvoten til unlimited.

Det er dog en dårlig praksis at gemme bruger- og applikationsdata i SYSTEM tablespace, da det forårsager datafragmentering og dermed forringer ydeevnen. Så jeg vil anbefale dig at oprette et nyt permanent tablespace :

sql> create smallfile tablespace users datafile "/u01/app/oracle/oradata/ORCL/users.dbf" size 10g; 

Og indstil det derefter som den permanente standardtabelle i standarddatabasen, så objekter oprettet af brugerne går ind i standardtabellens rum:

Kommentarer

  • kan du venligst forklare kommandoen alter database default tablespace users
  • På Oracle XE 11 eksisterer brugerens tablespace allerede, så du behøver kun alter database default tablespace users; og alter user scott quota 50m on system;

Svar

Du skal oprette et nyt tabelområde i databasen, fordi for SYSTEM tablespace access, SYSDBA privilegier er påkrævet.

Så lav et nyt tablespace, og tildel det som standardtabelspace til alle brugere. Når du opretter en bruger, vil det som standard give tildele bestemt tabellerum.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *