エラーが発生している新しいOracleデータベースがあります。
ORA-01950: no privileges on tablespace 'USERS'
私はやった:
alter user kainaw quota 100M on 'USERS';
grant unlimited tablespace to kainaw;
それでも、1回の挿入でそのエラーが返されます。ディスククォータ以外に、「テーブルスペース 'USERS'に対する特権がない」エラーの原因は何ですか?
更新:
Oracleのバージョンは11.2.0.3.0(11g)です。サーバーのコマンドプロンプトからログインしています。したがって、ユーザーkainawをsysdbaに変更します。次に、ログアウトし、ユーザーkainawにログインしてテストします。
insert into i.test values (1);
注:i.testは、数値フィールドのみのテーブルです。上記のエラーが発生します。私はカイナウとしてログアウトし、sysdbaとしてログインし、権限で再生し、ログアウト、ログイン、テスト、エラー、ログアウト、ログイン、...
不正なユーザーに権限を付与しています。
スキーマの所有者i
はテーブルを所有しているため、テーブルスペースに対する関連する権限を付与する必要があるユーザーです。
これは、テーブルスペースに対する権限がないためです。これを修正するために、ユーザーにテーブルスペース割り当てを付与します。
SQL> alter user <your username> quota unlimited on tablespace_name;
SQL> GRANT UNLIMITED TABLESPACE TO <your username>;
詳細 ora-0195
これが機能しない場合は、テーブル定義、特にインデックスを確認してください。詳細については、私のブログのこの投稿をご覧ください。 表の定義を確認してください
ありがとう、ジェイソン
これは非常に一般的なエラーであり、テーブルスペースに対する権限が不十分なために発生します。これを試してみてください。
SQL>select USERNAME, DEFAULT_TABLESPACE from dba_users where USERNAME='XXXXX';
SQL> alter user USER_NAME DEFAULT TABLESPACE TABLESPC_NAME quota unlimited on TABLESPC_NAME;
他の人がきちんと言ったように、テーブルのownerには、データをテーブルスペースに格納するための「アクセス許可」、つまり、データを引き起こした個人ではなく、そのテーブルスペース内の割り当てが必要ですto be格納されます。
私のタプセンスの価値:
どのユーザーにもUNLIMITED TABLESPACEを付与しないでください。
それは、彼らがたまたま何が呼ばれているかを知っている場合、データベース内部のシステムテーブルスペースを含むanyテーブルスペースにデータを落書きすることを可能にします。
ユーザーを抑制し、準備した(およびsize)テーブルスペースへの書き込みのみを許可します。私のように、スキーマとテーブルスペースを関連付けて、テーブルスペースのポイントインタイムリカバリ(TSPITR)を使用して個別に復元可能なユニットを作成する場合-明らかにCDBの古い戦略であり、ユーザーがデータベースの古いコーナーにデータを書き込むことができる一部のスペースを見つけることができる場所では、その回復戦略が完全に損なわれます。