> Q.CREATE TABLE文実行時に以下のエラーが発生します。
>
>     -------------------------------------------------
>   ORA-03237:
>   指定サイズのINITIALエクステントは表領域(TS1)に
>   割当てできません。
>     -------------------------------------------------
>
>    調査をした結果、以下の動作を確認しました。
>    ・表領域(TS1)の空き領域は十分である。
>    ・LOB列が含まれており、LOB列の定義を外すと、正常終了した。
>    ・エラーが発生するのは9i環境で、8i環境では発生しません。


この現象は、LOB列と8iでは発生しないという事がポイントです。

まず、Oracleの仕様として、LOB列の場合は、db_block_size * 3
のサイズを1エクステント内に収める必要があります。


例えば、db_block_sizeが16Kである場合、LOB列を使用する為には、
16K*3=48Kのエクステントが必要となります。(1エクステントのサイズで)


では、表領域には、十分な空き領域があるにも関わらず、
何故1エクステントで48Kが確保できなかったのか???


理由は1つ。
ローカル管理表領域のエクステント管理方式としてUNIFORM方式を使用し、
そのUNIFORMサイズが48Kより小さかったから!
でしょうね。


UNIFORM方式の場合は、エクステントサイズは固定となるので、
1エクステントのサイズは全て固定となります。
なので、そのサイズが小さかった為に、LOBの仕様である、
db_block_size * 3 のエクステントが確保出来なかったのでしょう。


表領域をその他の方式とした場合は、以下の理由により、エラーは発生しません。

まず、ローカル管理表領域のもう一つの方式である、AUTO ALLOCATE の場合、
エクステントのサイズはOracleによって自動的に決定されるので、問題なし。
(セグメントサイズに従い64KB、1MB、8MB、64MBのエクステントを自動で確保)


もう一つ、ディクショナリ管理の場合。
この場合は、オブジェクト作成時にSTORAGE句に指定した値が使用されるので、
こちらもエラー発生は防止できます。


Oracle8iまでは、デフォルトの管理方式がディクショナリ管理であり、
それを利用していた為、8i環境ではエラーが発生しなかったのでしょう。


尚、UNIFORMサイズの変更を行うには、表領域を再作成しなくてはいけません。