問題

私はXMLを格納しているテーブルを作っています。 XMLを格納するには、CLOBデータ型を使用しています。私のXMLの最大サイズは5KBです。テーブルの作成中にCLOB列のサイズを定義する必要がありますか?

  ベストアンサー

clobを設定するとき(varcharとは異なり)、サイズを正確に定義しません。単にclobです。

lob の最大サイズは 4Gb です。

ストレージごとに、次のようにスペースを使用します。

  1. lobがin-rowと定義され、lobが〜4kb未満の場合、ドキュメントが保持するスペースの量を占めます。 (例えば、512バイトのin-rowのxmlを格納し、512バイトを使用します。
  2. 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

  同じタグがついた質問を見る

sqloracle11gclob