以前にユーザーを作成しました:
SQL>create user suhail identified by password
SQL>User created.
SQL>Grant create session,create table to suhail;
SQL>Grant Succeeded.
しかし、suhail
としてログインしてtable
を作成しようとすると、「ORA-01950: no privileges on tablespace 'SYSTEM'
。どのようなエラーですか?なぜそれが起こるのですか?
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'
私はOracle Database 11g Express Editionリリース11.2.0.2.0を使用しています
このエラーは、ユーザーがデフォルトの永続的なテーブルスペースとして設定されているテーブルスペースSYSTEM
にクォータを持っていないことを示しています。次のようにユーザーに割り当てを割り当てることができます。
sql> alter user scott quota 50m on system;
ここに、 50m
は、SYSTEM
テーブルスペースのユーザークォータが50メビバイトであることを意味します。クォータをunlimited
に設定することもできます。
ただし、ユーザーとアプリケーションのデータをSYSTEM
テーブルスペースに格納することはお勧めしません。データが断片化し、パフォーマンスが低下するためです。そのため、新しい永続的なテーブルスペースを作成することをお勧めします。
sql> create smallfile tablespace users datafile '/u01/app/Oracle/oradata/ORCL/users.dbf' size 10g;
次に、それをデフォルトのデータベース永続テーブルスペースとして設定し、ユーザーが作成したオブジェクトがそのデフォルトのテーブルスペースに入るようにします。
sql> alter database default tablespace users;
SYSTEM
テーブルスペースアクセスにはSYSDBA
権限が必要なため、データベースに新しいテーブルスペースを1つ作成する必要があります。
したがって、1つの新しいテーブルスペースを作成し、それをデフォルトのテーブルスペースとしてすべてのユーザーに割り当てます。ユーザーを作成すると、デフォルトで特定のテーブルスペースが割り当てられます。