表領域に空きがあるのに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 使うことが多いような気がしたので)