Archive

Posts Tagged ‘Oracle .NET’

Oracleで長い文字列をVARCHAR2で利用する場合の注意点

ODP.NETで大きなサイズの文字列を扱った際にハマったのでメモです。

VARCHAR2で利用できる最大桁

テーブルに定義する場合は4000byteまで利用できる(Oracle 12c以降は32767まで)。

PL/SQLで利用する場合は 32767まで(4000バイト以上は内部CLOBに自動変換される)

文字列関数

SUBSTRなどの文字列関数はNSL_LANGによって扱える長さが異なる。

例えば、NLS_LANGがJA16SJISなどマルチバイト文字を2バイトで表す場合、SUBSTRで扱える文字列は32767/2=16384までとなる。32767バイトを超えるサイズの文字列を扱う場合は、DBMS_LOBパッケージのSUBSTRなどを利用する。通常のSUBSTRとDBMS_LOB.SUBSTRは微妙にインターフェイスが異なるので注意!!

ODP.NETとの相互運用

ODP.NETのIn/OutパラメーターにVARCHAR2を利用する場合も、NLS_LANGの定義によって利用できる文字列のサイズが決まる。NLS_LANGがJA16SJS*の場合は16384まで利用できる。これ以上の文字サイズを利用する場合は、OracleDbType.Clobを利用する。

カテゴリー:プログラミング, Oracle タグ:

パフォーマンスカウンターでODP.NETのプーリング状態を確認しよう

2011年11月22日 2件のコメント

.NETからOracleデータベースに接続する場合は、ODP.NET(Oracle Data Provider for .NET)を使うことがほとんどだと思います。ODP.NETも他のADO.NETのプロバイダーと同様コネクションプーリングなどの機能は標準でサポートされています。では、実際にプーリングが効いているかを確認するにはどうしたらいいでしょうか。

ODP.NETのコネクション状態を確認するには、ODP.NETのインストール時に自動的に追加されるWindowsのパフォーマンスカウンターを参照するのが簡単です。パフォーマンスカウンターの参照方法は、ODP.NETのマニュアルに詳しい解説があります。→ 接続プール・パフォーマンス・カウンタ

前々から存在自体は知っていたのですが、なぜか表示されないので諦めていましたが、ODP.NETのマニュアルにしっかり書いてありますね。レジストリーの値と構成ファイル(web.config|app.config)を変更して、有効にしてあげましょう。

レジストリーの変更

パフォーマンス・カウンタの公開を個別に有効または無効にするには、タイプREG_SZのレジストリ値PerformanceCountersを使用します。このレジストリ値は次のようになります。

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ODP.NET\Assembly_Version

うちのPC(Windows7 64bit)の場合は、コッチみたい

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\ODP.NET\Assembly_Version

構成ファイルの変更

<configuration>
  <oracle.dataaccess.client>
  <settings>
    <add name="PerformanceCounters" value="3"/>
  </settings>
  </oracle.dataaccess.client>
</configuration>

設定する値は、ODP.NETのマニュアルの表3-2に定義された値の合計です。マニュアルでは、HardConnectsPerSecond(1)およびHardDisconnectsPerSecond(2)の値を採りたいので3が設定されています。すべての値を採りたい場合は、4095を指定すればいいでしょう。

両方に設定が行われていると、収集可能なインスタンスが表示されます。インスタンスはAppDomain単位で表示されるようなので、確認したいインスタンスを選択して追加ボタンをクリックしてカウンターを追加してあげましょう。

image

こんな風に表示されます。動きが少なくてあんまり面白くないですね。

image