表領域に空きがあるのにORA-01536が出てINSERT出来ないとき

OracleRDBMSを利用している人向けのお話。
このORA-01536はかなりメジャーなノウハウらしいのでいまさら言及するのもあれだけど、表領域はまだ空きがあるのに!とあわわわ、ってならないためにまとめておきますね。引っかかる情報は多いほうがいいし。

原因

tablespace quota がどうの、って書いてあるとおりで、INSERTなどを発行しようとしているユーザーの、その表領域に対するquota(クオータ)が不足しています。クオータは領域の使用量に対する制限で、"ユーザー:表領域"ごとに設定できます。設定されているクオータは

SELECT * from user_ts_quotas; -- とか
SELECT * from dba_ts_quotas; 

で確認できます。

対策1. UNLIMITED TABLESPACEシステム権限の付与

まず、クオータ(制限)がまったく存在しないように見せることもできます。UNLIMITED TABLESPACEシステム権限がそれで、こんな感じで権限を与えればクオータの問題には悩まなくなるかと思われます。

GRANT UNLIMITED TABLESPACE TO ユーザー名

ただ、表領域ごとに設定できるわけじゃなくて、どの表領域に対しても制限なくなるので、まあケースバイケース。

対策2. クオータの設定

まあ、例えば

ALTER USER ユーザー名 QUOTA UNLIMITED ON 表領域名

こんな感じ。UNLIMITEDのとこは数量的な表記も出来ます。詳しくは調べてくださいな。(UNLIMITED 使うことが多いような気がしたので)