web-dev-qa-db-ja.com

"ORA-01950:テーブルスペース 'SYSTEM'に対する権限がありません":どのエラーですか?

以前にユーザーを作成しました:

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を使用しています

15
Suhail Gupta

このエラーは、ユーザーがデフォルトの永続的なテーブルスペースとして設定されているテーブルスペース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;
22

SYSTEMテーブルスペースアクセスにはSYSDBA権限が必要なため、データベースに新しいテーブルスペースを1つ作成する必要があります。

したがって、1つの新しいテーブルスペースを作成し、それをデフォルトのテーブルスペースとしてすべてのユーザーに割り当てます。ユーザーを作成すると、デフォルトで特定のテーブルスペースが割り当てられます。

2
Ankit