検索
連載

ODP.NETのデータアクセス・チューニングODP.NETファーストステップ(3)(1/4 ページ)

Windowsプラットフォームにおけるアプリケーション開発は、.NETが主流となりつつある。本連載はVisual Basicから.NETへの移行を考えているOracleアプリケーション開発者に向けて、「Oracle Data Provider for .NET」を使うメリットや独自機能、新しいプログラミング・スタイルなどを解説する。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

主な内容

--Page 1--

▼LOBデータの操作とチューニング

▼BLOBアクセスの基本操作

▼LOBデータ取得時のパフォーマンス・チューニング

--Page 2--

OracleDataReader使用時のパフォーマンス・チューニング

ODP.NETからPL/SQLを利用

ストアドプロシージャの呼び出し方法

ストアドファンクションから戻り値を取得する方法

--Page 3--

PL/SQL配列を利用する方法

--Page 4--

非接続型でのデータアクセスの注意点


 今回はOracle Data Provider for .NET(以下、ODP.NET)を利用してOracleデータベースへアクセスするための詳細な説明と、パフォーマンスを向上させるためのコーディング・テクニックについて説明します。

LOBデータの操作とチューニング

 LOBとはラージオブジェクト(Large Object)のことで、ギガバイト級の大きなファイルサイズのデータを扱うオブジェクトです。LOBのデータ型は主にBLOB(Binary Large Object)とCLOB(Character Large Object)の2種類に分類されます。

BLOBアクセスの基本操作

 まず、ODP.NETからBLOBへのアクセス方法を説明します。

手順1

 テスト用のBLOBフィールドを含んだテーブルを作成します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

手順2

 以下のサンプル用ビットマップ・イメージファイルをダウンロードして、Cドライブのtempディレクトリに保存してください。

手順3

 BLOBフィールドへの値の代入は、以下のようなコードになります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 OracleParameterオブジェクトのOracleDbTypeプロパティをBlobに指定し、画像データなどのバイナリデータを格納します。

注意:今回のサンプルコードはすべて、ODP.NETの名前空間の指定(Oracle.DataAccess.ClientとOracle.DataAccess.Types)を省略して記述してあります。

手順4

 BLOBフィールドから値を取得し、PictureBoxに表示するコードは以下になります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 BLOB型で格納された情報を取得するには、OracleDataReaderオブジェクトのGetOracleBlobメソッドを使用し、結果をOracleBlobオブジェクトに格納します。

LOBデータ取得時のパフォーマンス・チューニング

 LOBの列型を含むOracleDataReaderが作成されると、OracleDataReaderを作成したOracleCommandのInitialLOBFetchSizeプロパティの値がOracleDataReaderによってチェックされ、LOBの列データをすぐにフェッチする必要があるかどうかが判断されます。デフォルトでは、InitialLOBFetchSizeは「0」に設定されています。

 OracleCommandのInitialLOBFetchSizeプロパティの値が「0」のままであれば、LOBデータ全体の取得は、アプリケーションによってデータが明示的に要求されるまで延期されます。InitialLOBFetchSizeプロパティが「0」以外の値に設定されていると、その値の文字数またはbyte数までLOBデータが即座にフェッチされます。

 InitialLOBFetchSizeプロパティがデフォルトの「0」の場合、OracleDataReaderのGetOracleBlob/GetOracleClobメソッドを起動して、OracleBlob/OracleClobオブジェクトを取得できます。ただしInitialLOBFetchSizeが「0」以外の値に設定されていると、GetOracleBlob/GetOracleClobメソッドは無効です。その場合には、GetBytes/GetCharsメソッドをそれぞれ使用してBLOB/CLOBデータをフェッチする必要があります。InitialLOBFetchSizeを指定したコードは以下のようになります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 InitialLOBFetchSizeを「0」以外の値に設定すると、OracleBlob/OracleClobオブジェクトを使用してLOBデータを取得するよりも、高いパフォーマンスを得られることがあります。OracleDataReaderからOracleBlob/OracleClobオブジェクトを取得する必要のないアプリケーションで、LOB列データがそれほど大きくない場合がこれに該当します。InitialLOBFetchSizeは、問い合わせで返されるLOB列データのサイズがすべての行でほぼ同じ場合、特に便利です。

 一般にInitialLOBFetchSizeは、問い合わせで返される行のうち、80%を超える行のLOBデータのサイズよりも大きな値に設定することをお勧めします。例えば、80%の行でLOBデータのサイズが1Kbytesよりも小さく、20%の行で1Mbytesよりも大きい場合には、InitialLOBFetchSizeを1Kbytesに設定します。(次ページへ続く)

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る