私はXMLを格納しているテーブルを作っています。 XMLを格納するには、CLOBデータ型を使用しています。私のXMLの最大サイズは5KBです。テーブルの作成中にCLOB列のサイズを定義する必要がありますか?
ベストアンサー
clobを設定するとき(varcharとは異なり)、サイズを正確に定義しません。単にclob
です。
lob の最大サイズは 4Gb です。
ストレージごとに、次のようにスペースを使用します。
- lobがin-rowと定義され、lobが〜4kb未満の場合、ドキュメントが保持するスペースの量を占めます。 (例えば、512バイトのin-rowのxmlを格納し、512バイトを使用します。
- lob が行から定義されている場合(または 4kb を超えた場合)、テーブルを作成する際に定義した「チャンク」サイズの倍数を使用します。
lob 列を作成するときは、in-row および out-of-row オプションを制御するためにその storage 節を指定できます。
LOB (c) STORE AS lobseg (DISABLE STORAGE IN ROW CHUNK 16384)
つまり、lobを通常のテーブルデータとインラインで保存することはできず、チャンクごとに16kbの倍数でストレージを割り当てるので、ドキュメントが1kbであっても16kbのストレージが必要です。
xmlドキュメントがわずか5KBの場合は、in-rowストレージを検討し、小さなチャンクサイズを設定することができます(最小チャンクサイズは1ブロックなので、4kbのextentsを持つテーブルスペースがある場合、minumumチャンクサイズは4kbになります。 lessを指定すると無視されます)。 in-rowロブを許可するという欠点は、テーブルが大きくなるため、大きな範囲スキャンが少し苦しむ可能性が
また、11gでは、検討したいロブセグメントを圧縮するオプションがあります(ライセンスがカバーしている場合)。このような小さなドキュメントでは、大きな利点はありません。
もっと読む: http://docs.oracle.com/cd/B28359_01/appdev.111/b28393/adlob_tables.htm