1 ラージ・オブジェクトおよびSecureFilesの概要
ラージ・オブジェクト(LOB)、SecureFiles LOBおよびデータベース・ファイルシステム(DBFS)が様々なデータベース機能と連携して機能することにより、アプリケーション開発をサポートします。
ラージ・オブジェクトはOracle Database内部に大容量のデータを保持するために使用され、セキュリティ・ファイルはOracle Databaseを使用してラージ・オブジェクトを格納および管理する際にファイル・システムと同等あるいはファイル・システムよりすぐれたパフォーマンスを提供し、DBFSはOracle Databaseに格納されているファイルへのファイル・システム・アクセスを提供します。
内容は次のとおりです。
1.1 ラージ・オブジェクト
ラージ・オブジェクト(LOB) とは、大量のデータを保持するように設計されたデータ型のセットです。
単一のLOBの最大サイズには、データベースの構成に応じて8TBから128TBの幅があります。LOBにデータを格納することで、アプリケーションでデータを効果的にアクセスし操作することができます。
1.2 ラージ・オブジェクトを使用する理由
ラージ・オブジェクトを使用すると、大量のデータを複数のタイプの構造内に格納できます。
内容は次のとおりです。
1.2.1 ラージ・オブジェクトを使用するデータ型
ラージ・オブジェクトは、半構造化および構造化データに適しています。
ラージ・オブジェクト機能を使用すると、データベースからアクセスするオペレーティング・システム・ファイルのみでなく、データベースにもこの種のデータを格納できます。
-
半構造化データ
半構造化データは、通常はデータベースによって解釈されない論理構造を持ちます(アプリケーションまたは外部サービスが処理するXMLドキュメントなど)。アプリケーションで半構造化データを処理できるように、Oracle DatabaseにはOracle XML DB、Oracle MultimediaおよびOracle Spatial and Graphなどの機能が用意されています。
-
非構造化データ
非構造化データは、より小さい論理構造に容易には分割されず、通常はデータベースまたはアプリケーションによって解釈されません(バイナリ・ファイルとして拡張される写真イメージなど)。
アプリケーションを開発する場合、様々なタイプのデータが出現しますが、これらがすべてラージ・オブジェクトに適しているわけではありません。たとえば、次をラージ・オブジェクトとして作成する必要はありません。
-
単純な構造化データ
単純な構造化データは、ビジネス・ルールに基づいて構築されたリレーショナル表に編成できます。
-
複雑な構造化データ
複雑な構造化データは単純な構造化データよりも複雑であるため、コレクション型、REF型およびユーザー定義型など、Oracleデータベースのオブジェクト・リレーショナル機能に適しています。
インターネットおよびコンテンツ・リッチなアプリケーションの普及に伴い、Oracle Databaseでは次のことを実現するためのLOBのサポートが不可欠になっています。
-
非構造化データと半構造化データの効率的な格納
-
大量のデータの最適化
-
データベースの内外に格納されたデータにアクセスするための一定の方法の提供
1.2.2 半構造化データに使用するLOB
半構造化データには、XMLドキュメントやワード・プロセッサ・ファイルなどのドキュメント・ファイルが含まれます。これらのファイルには、アプリケーションによって処理または解釈されるがデータベースへの格納時により小さい論理単位に分割されない論理構造のデータが含まれます。
通常、半構造化データを使用するアプリケーションは、大量の文字データを使用します。キャラクタ・ラージ・オブジェクト(CLOB
)データ型と各国語キャラクタ・ラージ・オブジェクト(NCLOB
)データ型は、この種のデータの格納と操作に理想的です。
文字データは、バイナリ・ファイル・オブジェクト(BFILE
データ型)にも格納できます。BFILE
を使用して、オペレーティング・システム・ファイルからCLOB
またはNCLOB
インスタンスに読取り専用データをロードし、アプリケーションで操作できます。
1.2.3 非構造化データに使用するLOB
非構造化データは、標準コンポーネントに分解できないデータです。
これは、文字列として格納される名前、ID番号などの識別子および給与などのコンポーネントが通常含まれる、従業員に関するデータのような構造化データとは異なります。
写真などの非構造化データは、1と0の長いストリームで構成されます。これらのビットは、ディスプレイ上に画像を表示できるようにピクセルのオンとオフを切り替えるために使用されますが、データベース・ストレージ用の標準コンポーネントには分割されません。
また、テキスト、図形イメージ、静止ビデオ・クリップ、フル・モーション・ビデオおよびサウンド・ウェーブフォームなどの非構造化データは、サイズが大きくなる傾向があります。従業員レコードは通常、数百バイトですが、マルチメディア・データは、わずかであってもその何千倍もの大きさになる場合があります。
SQLデータ型は、BLOB
データ型(バイナリ・ラージ・オブジェクト)やBFILE
データ型(バイナリ・ファイル・オブジェクト)を含む大量の非構造化バイナリ・データに理想的です。
1.3 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はオブジェクトの属性にもなります。
関連項目:
1.4 各種のLOB
各種のLOBは、データベースまたは外部ファイルに格納できます。
データベース内のLOBを、内部LOBまたは内部永続LOBと呼ぶこともあります。
LOBには内部LOBと外部LOBがあります。
1.4.1 内部LOB
データベース内のLOBは、領域が最適化され効率的なアクセスが可能になるような形でデータベース表領域に格納されます。
内部LOBのSQLデータ型
内部LOBの宣言がサポートされているSQLデータ型は、BLOB
、CLOB
、およびNCLOB
です。
関連項目:
永続LOBと一時LOB
永続LOBと一時LOBは両方とも内部LOB (データベース内のLOB)です。
-
永続LOBとは、データベースの表の行に存在するLOBインスタンスです。
-
一時LOBは、ローカル・アプリケーションの有効範囲内でのみLOBをインスタンス化する場合に作成されます。
一時インスタンスを表の行に挿入すると、通常のインスタンスになります。
永続LOBは、コピー・セマンティクスを使用し、データベース・トランザクションに参加します。トランザクションまたはメディアに障害が発生した場合は永続LOBをリカバリでき、永続LOB値に対する変更はすべてコミットまたはロールバックできます。つまり、データベース・オブジェクトに適用されるACID (Atomicity, Consistency, Isolation, and Durability)プロパティはすべて永続LOBに適用されます。
1.4.2 外部LOBとBFILEデータ型
外部LOBは、データベース表領域の外にあるオペレーティング・システム・ファイルに格納されるデータ・オブジェクトです。
BFILE
は、データベースが外部LOBにアクセスするために使用するSQLデータ型であり、外部LOBで使用可能な唯一のSQLデータ型です。
BFILE
は読取り専用データ型です。データベースでは、BFILE
に格納されているデータに対する読取り専用のバイト・ストリーム・アクセスが可能です。アプリケーション内でBFILE
に対する書込みまたは更新を行うことはできません。
データベースは、BFILE
列で参照セマンティクスを使用します。BFILE
型の表列に格納されたデータは、データベースではなくオペレーティング・システム・ファイルに物理的に置かれます。
通常、BFILE
は次のデータの格納に使用します。
-
図形など、アプリケーションの実行中に変化しないバイナリ・データ
-
後で操作できるように
BLOB
やCLOB
のような他のラージ・オブジェクト型にロードされるデータ -
マルチメディアなど、バイト・ストリーム・アクセスに適したデータ
ハード・ディスク・ドライブ、CD-ROM、PhotoCDおよびDVDなど、オペレーティング・システムからアクセスする任意のストレージ・デバイスにBFILE
データを保持できます。データベースでは、オペレーティング・システムが、これらのオペレーティング・システム・ファイルへのストリーム・モード・アクセスをサポートしている場合、BFILE
にアクセスできます。
ノート:
外部LOBは、トランザクションには関係ありません。整合性および耐久性は、オペレーティング・システムで管理されるファイルシステムによってサポートされる必要があります。
1.5 LOBロケータ
LOBインスタンスはロケータと値を持ちます。
LOBロケータは、LOB値が物理的に格納されている場所への参照です。LOB値は、LOBに格納されているデータです。
LOBをパラメータ渡しなどの操作に使用する場合、実際にはLOBロケータを渡すことになります。ほとんどの場合、LOBロケータのセマンティクスに関係なく、アプリケーションでLOBインスタンスを操作できます。一部のプログラミング言語でのポインタとは異なり、LOBロケータを間接参照する必要はありません。
関連項目:
1.6 内部LOBと外部LOBのデータベース・セマンティクス
1.7 ラージ・オブジェクト・データ型
データベースは、ラージ・オブジェクト・データ型セットをSQLデータ型として提供しますが、LOBという用語は一般的にこのセットを示します。
通常、この表と関連する各項に記載されているデータ型の説明は、他のプログラム環境で提供される対応するデータ型にも適用されます。
表1-1に、データベースでサポートされる各ラージ・オブジェクト・データ型と、データ型で使用されるデータの種類を示します。
表1-1 ラージ・オブジェクト・データ型
SQLデータ型 | 説明 |
---|---|
|
キャラクタ・ラージ・オブジェクト 文字列データがデータベース文字セット形式で格納されます。データベース文字セットを使用する大きい文字列またはドキュメント専用です。データベース文字セットの文字は固定幅形式です。 |
|
各国語文字セット・ラージ・オブジェクト 文字列データ(通常はラージ文字列またはドキュメント)を各国語文字セット書式で格納します。可変幅形式の文字がサポートされます。 |
|
外部バイナリ・ファイル ホスト・オペレーティング・システムのファイルシステム内でデータベースの外部に格納される、データベース表からアクセス可能なバイナリ・ファイルです。
|
1.8 オブジェクト・データ型とLOBについて
通常、LOB列内のLOBインスタンスの使用方法と、オブジェクト・データ型のメンバーとしてのLOBインスタンスの使用方法に違いはありません。このマニュアルでは、LOB属性はオブジェクト・データ型のメンバーであるLOBインスタンスを指します。特に明記しないかぎり、LOB列の説明はLOB属性にも該当します。
1.9 LOBを使用した他のデータ型の記憶域と作成
LOBを使用して他のユーザー定義のデータ型を作成したり、他のデータ型をLOBとして格納できます。
次に、LOB型を使用して格納または作成する、データベースで提供されるデータ型の例を示します。
内容は次のとおりです。
1.10 BasicFilesおよびSecureFiles LOB
BasicFiles LOBおよびSecureFiles LOBは、Oracle Database 12cで使用される2つのストレージ・タイプです。
SecureFiles LOBには、圧縮と複製解除(拡張圧縮オプションの一部)、および暗号化(拡張セキュリティ・オプションの一部)を含む特定の拡張機能を適用できます。
SecureFiles LOBは、自動セグメント領域管理(ASSM)で管理される表領域でのみ作成できます。
SecureFilesは、Oracle Database 12c以降で使用されるLOBのデフォルトの記憶域メカニズムであり、LOBの格納および管理にはBasicFilesではなくSecureFilesを使用することをお薦めします。BasicFilesは今後のリリースで非推奨になる予定です。
関連項目:
両タイプの記憶域の詳細は、「Oracle LOB記憶域の使用」を参照してください
1.11 データベース・ファイルシステム(DBFS)
データベース・ファイルシステム(DBFS)により、Oracle Databaseに格納されるファイルへのファイルシステム・インタフェースが提供されます。
通常、Oracle Databaseに格納されるファイルはSecureFiles LOBとして格納され、パス名、ディレクトリおよび他のファイルシステム情報はデータベース表に格納されます。DBFSのデフォルトの記憶域手法はSecureFiles LOBですが、状況によってはBasicFiles LOBも使用できます。
関連項目:
DBFSを使用すると、データベースの外部に格納されたファイルに対するSecureFiles LOBロケータからの参照を作成できます。これらの参照は、DBFSリンクまたはデータベース・ファイルシステム・リンクと呼ばれます。
関連項目: