ヘッダーをスキップ
Oracle® Database SecureFilesおよびラージ・オブジェクト開発者ガイド
11gリリース2 (11.2)
B56263-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

1 ラージ・オブジェクトの概要

この章では、ラージ・オブジェクト(LOB)の概要と、LOBデータ型をアプリケーション開発に使用する方法について説明します。この章の内容は次のとおりです。

ラージ・オブジェクト

ラージ・オブジェクト(LOB)とは、大量のデータを保持するように設計されたデータ型のセットです。LOBには、データベースの構成に応じて最大サイズが8から128TBのデータを保持できます。データをLOBで格納すると、アプリケーションで効率的にアクセスして操作できます。

ラージ・オブジェクトを使用する理由

この項では、アプリケーション開発時に使用する各種のデータを紹介し、ラージ・オブジェクトに適したデータの種類について説明します。

現在のアプリケーションでは、次の種類のデータを扱う必要があります。

  • 単純な構造化データ

    この種のデータは、ビジネス・ルールに基づいて構築された単純な表に編成できます。

  • 複雑な構造化データ

    この種のデータは複雑な性質を持つため、コレクション型、REF型およびユーザー定義型など、Oracleデータベースのオブジェクト・リレーショナル機能に適しています。

  • 半構造化データ

    この種のデータは、通常はデータベースで解析されない論理構造を持っています。たとえば、アプリケーションや外部サービスで処理されるXML文書は、半構造化データとみなせます。アプリケーションで半構造化データを処理できるように、データベースにはOracle XML DB、アドバンスト・キューイングおよびメッセージなどのテクノロジが用意されています。

  • 非構造化データ

    この種のデータは、小さい論理構造に分解されることがなく、通常はデータベースやアプリケーションで解析されません。たとえば、バイナリ・ファイルとして格納されたフォト・イメージは、非構造化データです。

ラージ・オブジェクトは、最後の2種類のデータ、つまり半構造化データおよび非構造化データに適しています。ラージ・オブジェクト機能を使用すると、データベースからアクセスするオペレーティング・システム・ファイルのみでなく、データベースにもこの種のデータを格納できます。

インターネットおよびコンテンツ・リッチなアプリケーションの普及に伴い、データベースでは、次のことを実現するためのデータ型のサポートが不可欠になっています。

  • 非構造化データと半構造化データの効率的な格納

  • 大量のデータの最適化

  • データベースの内外に格納されたデータにアクセスするための一定の方法の提供

半構造化データに対するLOBの使用

半構造化データの例には、XML文書やワード・プロセッサ・ファイルなどのドキュメント・ファイルがあります。この種のドキュメントの場合、データはアプリケーションで処理または解析される論理構造に含まれており、データベースへの格納時に小さい論理単位に分解されることはありません。

通常、半構造化データが関係するアプリケーションは、大量の文字データを使用します。キャラクタ・ラージ・オブジェクト(CLOB)データ型と各国語キャラクタ・ラージ・オブジェクト(NCLOB)データ型は、この種のデータの格納と操作に理想的です。

文字データは、バイナリ・ファイル・オブジェクト(BFILEデータ型)にも格納できます。BFILEを使用して、オペレーティング・システム・ファイルからCLOBまたはNCLOBインスタンスに読取り専用データをロードし、アプリケーションで操作できます。

非構造化データに対するLOBの使用

非構造化データが標準コンポーネントに分解されることはありません。たとえば、従業員に関するデータは、文字列として格納される名前、ID番号などの識別子および給与などに構造化できます。これに対して、写真データは1と0(ゼロ)の長いストリームで構成されます。これらのビットは、ディスプレイで写真を見られるようにピクセルのオンとオフの切り替えに使用されますが、データベース記憶域に関しては、それより細かい構造に分解されることはありません。

また、テキスト、図形イメージ、静止ビデオ・クリップ、フル・モーション・ビデオおよびサウンド・ウェーブフォームなどの非構造化データは、サイズが大きくなる傾向があります。従業員レコードは通常、数百バイトですが、マルチメディア・データは、わずかであってもその何千倍もの大きさになる場合があります。

SQLデータ型は、BLOBデータ型(バイナリ・ラージ・オブジェクト)やBFILEデータ型(バイナリ・ファイル・オブジェクト)を含む大量の非構造化バイナリ・データに理想的です。

LONGを使用しない理由

データベースでは、LONGデータ型およびLOBデータ型をサポートしています。LOBの方がメリットが多いため、可能な場合は、LONGではなくLOBを使用するように既存のアプリケーションを変更してください。LONGからLOBへ移行すると、LONG列にアクセスしている既存のアプリケーションを簡単に移行してLOB列を使用できます。

バージョン7以前のOracle Database用に開発されたアプリケーションでは、非構造化データを大量に格納するためにLONGまたはLONG RAWデータ型を使用していました。

Oracle8i以上のデータベースでは、大量の構造化および半構造化データの格納にLOBデータ型の使用をお薦めします。LOBデータ型には、LONG型およびLONG RAW型と比較して次のようなメリットがあります。

  • LOB容量: LOBには、はるかに大量のデータを格納できます。LOBには、システム構成に応じて4GB以上のデータを格納できます。LONG型とLONG RAW型では、データは2GBに制限されます。

  • 表当たりのLOB列数: 1つの表は複数のLOB列を持つことができます。1つの表の各LOB列には、任意のLOB型を使用できます。Oracle Databaseリリース7.3以上では、表は1つのLONG列またはLONG RAW列に制限されます。

  • ランダムなピース単位のアクセス: LOBはデータへのランダム・アクセスをサポートしますが、LONGでサポートされるのは逐次アクセスのみです。

  • LOBはオブジェクトの属性にもなります。

各種のLOB

各種のLOBは、データベースまたは外部ファイルに格納できます。


注意:

データベース内のLOBを、内部LOBまたは内部永続LOBと呼ぶこともあります。

内部LOB

データベース内のLOBは、領域が最適化され効率的なアクセスが可能になるような形でデータベース表領域に格納されます。内部LOBの宣言がサポートされているSQLデータ型は、BLOBCLOB、およびNCLOBです。これらのデータ型の詳細は、「ラージ・オブジェクト・データ型」を参照してください。

永続LOBと一時LOB

内部LOB(データベース内のLOB)には、永続LOBと一時LOBがあります。永続LOBとは、データベースの表の行に存在するLOBインスタンスです。一時LOBは、ローカル・アプリケーションの有効範囲内でのみLOBをインスタンス化する場合に作成されます。

一時インスタンスを表の行に挿入すると、通常のインスタンスになります。

永続LOBは、コピー・セマンティクスを使用し、データベース・トランザクションに参加します。トランザクションまたはメディアに障害が発生した場合は永続LOBをリカバリでき、永続LOB値に対する変更はすべてコミットまたはロールバックできます。つまり、データ・オブジェクトの使用に関連するすべてのACID (原子性、一貫性、独立性、耐久性)プロパティは、永続LOBの使用に関連します。

外部LOBとBFILEデータ型

外部LOBは、データベース表領域の外にあるオペレーティング・システム・ファイルに格納されるデータ・オブジェクトです。データベースは、SQL BFILEデータ型を使用して外部LOBにアクセスします。BFILEデータ型は、唯一の外部LOBデータ型です。

BFILEは読取り専用データ型です。データベースでは、BFILEに格納されているデータに対する読取り専用のバイト・ストリーム・アクセスが可能です。アプリケーション内でBFILEに書き込むことはできません。

データベースは、BFILE列で参照セマンティクスを使用します。BFILE型の表列に格納されたデータは、データベース表領域ではなくオペレーティング・システム・ファイルに物理的に置かれます。

通常、BFILEは次のデータの格納に使用します。

  • 図形など、アプリケーションの実行中に変化しないバイナリ・データ

  • 後で操作できるようにBLOBCLOBのような他のラージ・オブジェクト型にロードされるデータ

  • マルチメディアなど、バイト・ストリーム・アクセスに適したデータ

  • 比較的サイズの大きい読取り専用データ(データベース表領域の大量使用を回避するため)

ハード・ディスク・ドライブ、CD-ROM、PhotoCDおよびDVDなど、オペレーティング・システムからアクセスする任意のストレージ・デバイスにBFILEデータを保持できます。データベースでは、オペレーティング・システムが、これらのオペレーティング・システム・ファイルへのストリーム・モード・アクセスをサポートしている場合、BFILEにアクセスできます。


注意:

外部LOBは、トランザクションには関係ありません。LOBの整合性および耐久性は、OSで管理されるファイルシステムによってサポートされる必要があります。

LOBロケータの概要

LOBインスタンスはロケータと値を持ちます。LOBロケータは、LOB値が物理的に格納されている場所への参照です。LOB値は、LOBに格納されているデータです。

LOBをパラメータ渡しなどの操作に使用する場合、実際にはLOBロケータを渡すことになります。ほとんどの場合、LOBロケータのセマンティクスに関係なく、アプリケーションでLOBインスタンスを操作できます。一部のプログラミング言語でのポインタとは異なり、LOBロケータを間接参照する必要はありません。

LOBロケータのセマンティクスとLOB値の格納方法については、いくつかの考慮事項があります。詳細は、このマニュアル全体の該当する箇所で説明しています。

内部LOBと外部LOBのデータベース・セマンティクス

どのプログラム環境でも、内部LOBと外部LOBのデータベース・セマンティクスには次のような違いがあります。

  • 内部LOBは、コピー・セマンティクスを使用します。

    コピー・セマンティクスにより、挿入、更新または割当て操作中にLOBロケータとLOB値の両方が論理的にコピーされます。これにより、LOBを含む各表のセルまたは各変数には一意のLOBインスタンスが確実に保持されます。

  • 外部LOBは、参照セマンティクスを使用します。

    参照セマンティクスにより、挿入操作中にはLOBロケータのみがコピーされます。(外部LOBは読取り専用のため、更新操作は外部LOBには適用できないことに注意してください。詳細は後に説明します。)

ラージ・オブジェクト・データ型

表1-1 に、データベースでサポートされる各ラージ・オブジェクト・データ型と、各データ型が使用される典型的なデータの種類を示します。この表に示されているデータ型名は、データベースで提供されるSQLデータ型です。通常、この表とこのマニュアルの他の部分に記載されているデータ型の説明は、他のプログラム環境で提供される対応するデータ型にも適用されます。また、LOBという用語は、通常はすべてのラージ・オブジェクト・データ型の集合を指すことに注意してください。

表1-1 ラージ・オブジェクト・データ型

SQLデータ型 説明

BLOB

バイナリ・ラージ・オブジェクト

すべての種類のデータがバイナリ形式で格納されます。通常は、イメージ、オーディオおよびビデオなどのマルチメディア・データに使用します。

CLOB

キャラクタ・ラージ・オブジェクト

文字列データがデータベース・キャラクタ・セット形式で格納されます。データベース・キャラクタ・セットを使用する大きい文字列またはドキュメント専用です。データベース・キャラクタ・セットの文字は固定幅形式です。

NCLOB

各国語キャラクタ・セット・ラージ・オブジェクト

文字列データが各国語キャラクタ・セット形式で格納されます。各国語キャラクタ・セットを使用する大きい文字列またはドキュメントに使用します。可変幅形式の文字がサポートされます。

BFILE

外部バイナリ・ファイル

ホスト・オペレーティング・システムのファイルシステム内でデータベースの外部に格納される、データベース表からアクセス可能なバイナリ・ファイルです。BFILEには、アプリケーションから読取り専用でアクセスできます。BFILEは、アプリケーションで操作されない、イメージ・データなどの静的データを格納するために使用します。

BFILEには、あらゆる種類のデータ、つまり任意のオペレーティング・システム・ファイルを格納できます。たとえば、文字データをBFILEに格納し、ロード時にキャラクタ・セットを指定してBFILEデータをCLOBにロードできます。


オブジェクト・データ型とLOB

LOBデータ型は、オブジェクト・データ型のフィールドまたはメンバーとして宣言できます。たとえば、オブジェクト型でCLOB型の属性を持つことができます。通常、LOB列内のLOBインスタンスの使用方法と、オブジェクト・データ型のメンバーであるLOBインスタンスの使用方法に違いはありません。使用方法の違いについては、該当する場合に説明します。このマニュアルでは、LOB属性はオブジェクト・データ型のメンバーであるLOBインスタンスを指します。特に明記しないかぎり、LOB列の説明はLOB属性にも該当します。

LOBを使用した他のデータ型の格納と作成

LOBを使用して他のユーザー定義のデータ型を作成したり、他のデータ型をLOBとして格納できます。この項では、LOB型を使用して格納または作成するデータ型の例として、データベースで提供される一部のデータ型について説明します。

LOBとして格納されるVARRAY

次の使用例で表を作成すると、データベースではVARRAY型のインスタンスがLOBの配列として格納されます。

  • VARRAYの記憶域句(VARRAY varray_item STORE AS)を指定せず、宣言したVARRAYデータのサイズが4000バイトを超える場合。

  • STORE AS LOB句(VARRAY varray_item STORE AS LOB ...)を使用してVARRAY列のプロパティを指定した場合。

CLOBとして格納されるXMLType列

LOBデータ型を使用して他のデータ型を格納する方法のよい例が、XMLTypeデータ型です。XMLTypeデータ型はCLOBとして格納される場合があります。XMLTypeデータ型をCLOBとして格納するように表または列を設定すると、データベースにスキーマをほとんど使用しないXML文書を格納できます。


関連項目:

  • XMLTypeの表と列の作成方法およびXMLをCLOBに格納する方法の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

  • XMLの操作方法の詳細は、『Oracle XML Developer's Kitプログラマーズ・ガイド』を参照してください。


Oracle Multimediaで使用されるLOB

Oracle Multimediaでは、LOBデータ型を使用して、MultimediaのORDAudio、ORDDoc、ORDImageおよびORDVideoなど、マルチメディア・アプリケーション用に特化されたデータ型が作成されます。Oracle Multimediaはデータベースのインフラストラクチャを使用して、オブジェクト型、メソッド、およびデータベースにこの特定の型のデータを表すために必要なLOBを定義します。


関連項目:

  • Oracle Multimediaの使用方法の詳細は、『Oracle Multimediaユーザーズ・ガイド』を参照してください。

  • Oracle Multimediaのデータ型の使用方法の詳細は、『Oracle Multimediaリファレンス』を参照してください。