プライマリ・コンテンツに移動
Oracle® Database SecureFilesおよびラージ・オブジェクト開発者ガイド
12cリリース1 (12.1)
B71284-05
目次へ移動
目次
索引へ移動
索引

前
次

1 ラージ・オブジェクトおよびSecureFilesの概要

ラージ・オブジェクト(LOB)、SecureFiles LOBおよびデータベース・ファイルシステム(DBFS)が様々なデータベース機能と連携して機能することにより、アプリケーション開発をサポートします。

ラージ・オブジェクトはOracle Database内部に大容量のデータを保持するために使用され、セキュリティ・ファイルはOracle Databaseを使用してラージ・オブジェクトを格納および管理する際にファイル・システムと同等あるいはファイル・システムよりすぐれたパフォーマンスを提供し、DBFSはOracle Databaseに格納されているファイルへのファイル・システム・アクセスを提供します。

ここでは、次の項目について説明します。

ラージ・オブジェクト

ラージ・オブジェクト(LOB) とは、大量のデータを保持するように設計されたデータ型のセットです。

単一のLOBの最大サイズには、データベースの構成に応じて8TBから128TBの幅があります。データをLOBで格納すると、アプリケーションで効率的にアクセスして操作できます。

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

ラージ・オブジェクトを使用すると、大量のデータを複数のタイプの構造内に格納できます。

ここでは、次の項目について説明します。

ラージ・オブジェクトを使用するデータ型

ラージ・オブジェクトは、半構造化および構造化データに適しています。

ラージ・オブジェクト機能を使用すると、データベースからアクセスするオペレーティング・システム・ファイルのみでなく、データベースにもこの種のデータを格納できます。

  • 半構造化データ

    半構造化データは、通常はデータベースによって解釈されない論理構造を持ちます(アプリケーションまたは外部サービスが処理するXMLドキュメントなど)。アプリケーションで半構造化データを処理できるように、Oracle DatabaseにはOracle XML DB、Oracle Multimedia DICOMおよびOracle Spatial and Graphなどの機能が用意されています。

  • 非構造化データ

    非構造化データは、より小さい論理構造に容易には分割されず、通常はデータベースまたはアプリケーションによって解釈されません(バイナリ・ファイルとして拡張される写真イメージなど)。

アプリケーションを開発する場合、様々なタイプのデータが出現しますが、これらがすべてラージ・オブジェクトに適しているわけではありません。たとえば、次をラージ・オブジェクトとして作成する必要はありません。

  • 単純な構造化データ

    単純な構造化データは、ビジネス・ルールに基づいて構築されたリレーショナル表に編成できます。

  • 複雑な構造化データ

    複雑な構造化データは単純な構造化データよりも複雑であるため、コレクション型、REF型およびユーザー定義型など、Oracleデータベースのオブジェクト・リレーショナル機能に適しています。

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

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

  • 大量のデータの最適化

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

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

半構造化データには、XMLドキュメントやワード・プロセッサ・ファイルなどのドキュメント・ファイルが含まれます。これらのファイルには、アプリケーションによって処理または解釈されるがデータベースへの格納時により小さい論理単位に分割されない論理構造のデータが含まれます。

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

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

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

非構造化データは、標準コンポーネントに分解できないデータです。

これは、文字列として格納される名前、ID番号などの識別子および給与などのコンポーネントが通常含まれる、従業員に関するデータのような構造化データとは異なります。

写真などの非構造化データは、1と0の長いストリームで構成されます。これらのビットは、ディスプレイ上に画像を表示できるようにピクセルのオンとオフを切り替えるために使用されますが、データベース・ストレージ用の標準コンポーネントには分割されません。

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

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

LONGを使用しない理由

Oracle Databaseでは、LONGおよびLOBデータ型をサポートしています。ただし、LOBには、次に示す別のメリットがあります。

大量の構造化および半構造化データの格納にLOBデータ型の使用をお薦めします(Oracle8i以上の場合)。Oracle7以前用に開発されたアプリケーションでは、非構造化データを大量に格納するためにLONGまたはLONG RAWデータ型を使用していました。

LONGからLOBへ移行すると、LONG列にアクセスしている既存のアプリケーションを簡単に移行してLOB列を使用できます。

LOBデータ型には、LONG型およびLONG RAW型と比較して次のようなメリットがあります。

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

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

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

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

各種のLOB

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

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

LOBには内部LOBと外部LOBがあります。

内部LOB

データベース内のLOBは、領域が最適化され効率的なアクセスが可能になるような形でデータベース表領域に格納されます。

内部LOBのSQLデータ型

内部LOBの宣言がサポートされているSQLデータ型は、BLOBCLOB、およびNCLOBです。これらのデータ型の詳細は、ラージ・オブジェクト・データ型を参照してください。

永続LOBと一時LOB

永続LOBと一時LOBは両方とも内部LOB (データベース内のLOB)です。

  • 永続LOBとは、データベースの表の行に存在するLOBインスタンスです。

  • 一時LOBは、ローカル・アプリケーションの有効範囲内でのみLOBをインスタンス化する場合に作成されます。

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

永続LOBは、コピー・セマンティクスを使用し、データベース・トランザクションに参加します。トランザクションまたはメディアに障害が発生した場合は永続LOBをリカバリでき、永続LOB値に対する変更はすべてコミットまたはロールバックできます。つまり、データベース・オブジェクトに適用されるACID (Atomicity, Consistency, Isolation, and Durability)プロパティはすべて永続LOBに適用されます。

外部LOBとBFILEデータ型

外部LOBは、データベース表領域の外にあるオペレーティング・システム・ファイルに格納されるデータ・オブジェクトです。

BFILEは、データベースが外部LOBにアクセスするために使用するSQLデータ型であり、外部LOBで使用可能な唯一のSQLデータ型です。

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

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

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

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

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

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

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

注意:

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

LOBロケータ

LOBインスタンスはロケータと値を持ちます。

LOBロケータは、LOB値が物理的に格納されている場所への参照です。LOB値は、LOBに格納されているデータです。

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

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

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

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

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

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

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

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

データベースは、ラージ・オブジェクト・データ型セットをSQLデータ型として提供しますが、LOBという用語は一般的にこのセットを示します。

通常、この表と関連する各項に記載されているデータ型の説明は、他のプログラム環境で提供される対応するデータ型にも適用されます。

表1-1に、データベースでサポートされる各ラージ・オブジェクト・データ型と、データ型で使用されるデータの種類を示します。

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

SQLデータ型 説明

BLOB

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

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

CLOB

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

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

NCLOB

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

文字列データ(通常はラージ文字列またはドキュメント)を各国語キャラクタ・セット書式で格納します。可変幅形式の文字がサポートされます。

BFILE

外部バイナリ・ファイル

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

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

オブジェクト・データ型とLOBについて

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

LOBを使用した他のデータ型の記憶域と作成

LOBを使用して他のユーザー定義のデータ型を作成したり、他のデータ型をLOBとして格納できます。

次に、LOB型を使用して格納または作成する、データベースで提供されるデータ型の例を示します。

ここでは、次の項目について説明します。

LOBとして格納されるVARRAY

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

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

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

Oracle Multimediaで使用されるLOB

Oracle Multimediaは、LOBデータ型を使用して、マルチメディア・アプリケーションでの使用に特化したオブジェクト型を作成します。

マルチメディア・データ型には、ORDAudioORDDocORDImageORDVideoおよびORDDicomが含まれます。Oracle Multimediaはデータベースのインフラストラクチャを使用して、オブジェクト型、メソッド、およびデータベースにこの特定の型のデータを表すために必要なLOBを定義します。

関連項目:

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

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

BasicFilesおよびSecureFiles LOB

SecureFiles LOBとは、Oracle Database 12cで使用される2つのストレージ・タイプの1つで、もう1つのタイプはBasicFiles LOBストレージです。

SecureFiles LOBには、圧縮と複製解除(拡張圧縮オプションの一部)、および暗号化(拡張セキュリティ・オプションの一部)を含む特定の拡張機能を適用できます。

SecureFiles LOBは、自動セグメント領域管理(ASSM)で管理される表領域でのみ作成できます。

SecureFilesは、Oracle Database 12c以降で使用されるLOBのデフォルトの記憶域メカニズムであり、LOBの格納および管理にはBasicFilesではなくSecureFilesを使用することをお薦めします。BasicFilesは今後のリリースで非推奨になる予定です。

関連項目:

両タイプの記憶域の詳細は、Oracle LOB記憶域の使用を参照してください

データベース・ファイルシステム(DBFS)

データベース・ファイルシステム(DBFS)により、Oracle Databaseに格納されるファイルへのファイルシステム・インタフェースが提供されます。

通常、Oracle Databaseに格納されるファイルはSecureFiles LOBとして格納され、パス名、ディレクトリおよび他のファイルシステム情報はデータベース表に格納されます。DBFSのデフォルトの記憶域手法はSecureFiles LOBですが、状況によってはBasicFiles LOBも使用できます。

DBFSを使用すると、データベースの外部に格納されたファイルに対するSecureFiles LOBロケータからの参照を作成できます。これらの参照は、DBFSリンクまたはデータベース・ファイルシステム・リンクと呼ばれます。