TimesTenでのOCIのサポートの概要

OCIをTimesTenとともに使用できます。サポートされている機能については、TimesTenのOCIの構文および使用方法は、Oracle Databaseと同じです。

内容は次のとおりです。

OCIの概要

OCIとは、データベースにアクセスしてSQL実行を制御するために使用可能な機能を備えたAPIのことです。OCIでは、CおよびC++プログラミング言語のデータ型、コール規則、構文およびセマンティックがサポートされています。

すべてのCまたはC++プログラムと同様にOCIプログラムをコンパイルおよびリンクします。前処理またはプリコンパイルのステップはありません。

データベース・アクセスおよび検索機能のOCIライブラリは、実行時にアプリケーションにリンクできる動的なランタイム・ライブラリの形式になっています。OCIライブラリには、次の機能領域が含まれます。

  • SQLアクセス機能

  • データ型マッピングおよび操作機能

次に、OCIに用意されている、またはOCIでサポートされている多数の役立つ機能の一部を示します。

  • 文のキャッシュ

  • 動的SQL

  • トランザクション制御文、セッション制御文およびシステム制御文(DML文のような)を処理する機能

  • サーバー・メタデータのレイヤーを公開する記述機能

  • コミット・リクエストを文の実行と関連付けてラウンドトリップを減らす機能

  • ラウンドトリップを減らす透過的プリフェッチ・バッファを使用した問合せの最適化

  • OCIハンドルの相互排他ロックを不要にするスレッド・セーフティ

OCIの一般情報は、Oracle Databaseドキュメント・セットに含まれているOracle Call Interfaceプログラマーズ・ガイドを参照してください。

TimesTenでのOCIの基本

TimesTen OCIサポートによって、既存の数多くのOCIアプリケーションをTimesTen直接接続またはクライアント/サーバー接続で実行できます。また、OCIをデータベース・インタフェースとして使用するPro*C/C++やODP.NETなどのその他の機能を使用することもできます。(OCI、Pro*C/C++およびODP.NETアプリケーションからPL/SQLをコールすることもできます。)

TimesTenは、OCIクライアント・ライブラリとしてOracle Instant Clientを備えています。これは、『Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイド』環境変数で説明されている、適切なttenvスクリプトを使用して構成します。

TimesTenリリース22.1のOCIは、Oracle Databaseリリース19cのOCIに基づいており、現在のOCI 8スタイルのAPIをサポートしています。

TimesTenアーキテクチャでのOCI

TimesTenアーキテクチャにおけるOCIサポートの位置付けを示します。

図3-1に、TimesTenアーキテクチャでのOCIサポートの位置付けを示します。

図3-1 TimesTenアーキテクチャでのOCI

図3-1の説明が続きます。
図3-1「TimesTenアーキテクチャでのOCI」の説明

TimesTenのOCIでのグローバリゼーション・サポート

TimesTenのOCIでは、グローバリゼーションがサポートされています。

TimesTenでの文字セットのサポートについて

TimesTenの文字セットはOracle Databaseと互換性があります。

TimesTenのデフォルトの文字セットはAMERICAN_AMERICA.US7ASCIIです(ただし、別の方法としてAL32UTF8をお薦めします)。『Oracle TimesTen In-Memory Databaseリファレンス』サポートされている文字セットを参照してください。

文字セットの指定

接続用の文字セットを指定するには、OCIプログラムでNLS_LANG環境変数を設定するか、またはOCIEnvNlsCreate()をコールできます。

NLS_LANGまたはOCIEnvNlsCreate()によって上書きされない場合、sys.odbc.iniまたはユーザーodbc.iniファイル内のConnectionCharacterSet設定がデフォルトで使用されます。文字セットを明示的に設定することをお薦めします。デフォルトはAMERICAN_AMERICA.US7ASCIIですが、別の方法としてAL32UTF8をお薦めします。

TimesTen OCIでは言語またはロケール(地域)設定はサポートされていないため、前述のAMERICAN_AMERICAなどのNLS_LANGの言語および地域コンポーネントは無視されます。ただし、言語およびロケールを指定しない場合にも、NLS_LANGの設定時に文字セットの前にピリオドを付ける必要があります。たとえば、AMERICAN_AMERICAは無視されますが、次の設定はいずれも有効です。

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

または:

NLS_LANG=.WE8ISO8859P1

ノート:

  • NLS_LANG環境設定は、TimesTenのデフォルトの文字セットよりも優先されます。

  • Windowsでは、NLS_LANG設定が環境にない場合、レジストリで設定が検索されます。OCIまたはPro*C/C++プログラムによるTimesTenへの接続に問題がある場合、HKEY_LOCAL_MACHINE\Software\ORACLE\配下にあるNLS_LANGの設定が(そのキーが存在する場合は)有効であること、およびTimesTenでサポートされている文字セットを示していることを確認します。

  • 『Oracle Databaseグローバリゼーション・サポート・ガイド』NLS_LANG環境変数でのロケールの選択を参照してください。

  • 『Oracle Call Interfaceプログラマーズ・ガイド』OCIEnvNlsCreate()を参照してください。

その他のグローバリゼーション機能

TimesTenのOCIでは、ここで示すグローバリゼーション機能もサポートされています。これらの機能は、環境変数、TimesTenの一般接続属性またはTimesTen ODBC接続オプションとして設定できます。

接続オプションの場合、ここでは名前の先頭に「TT_」が追加されます。環境変数の設定は、対応する接続属性または接続オプションの設定よりも優先されます。接続オプションの設定は、対応する接続属性の設定よりも優先されます。

  • NLS_LENGTH_SEMANTICS: デフォルトで、文字データ型CHARおよびVARCHAR2の長さは、文字数ではなくバイト数で指定します。シングルバイト文字エンコードの場合は、バイトでの指定は正しく機能します。マルチバイト文字エンコードの場合は、NLS_LENGTH_SEMANTICSを使用して、かわりに文字長セマンティクスによってCHAR列およびVARCHAR2列を作成できます。サポートされている設定は、BYTE(デフォルト)およびCHARです。(NCHAR列およびNVARCHAR2列は、常に文字ベースです。既存の列は影響を受けません。)

  • NLS_SORT: 文字データのソートの種類を指定します。NLS_LANGのデフォルト値よりも優先されます。有効な値は、BINARYまたはTimesTenでサポートされているすべての言語ソート名です。たとえば、ドイツ語の言語ソート順序を指定するには、NLS_SORT=Germanと設定します。

  • NLS_NCHAR_CONV_EXCP: NCHARまたはNVARCHARデータとCHARまたはVARCHAR2データの間の暗黙的または明示的なキャラクタ・タイプの変換中にデータが消失した場合に、エラーがレポートされるかどうかを指定します。有効な設定は、TRUEおよびFALSEです。デフォルト値はFALSEで、エラーはレポートされません。

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』グローバリゼーションのサポート『Oracle Databaseグローバリゼーション・サポート・ガイド』グローバリゼーション・サポート環境の設定、および「ODBC 3.5のSQLSetConnectAttrおよびSQLGetConnectAttrでの属性サポート」を参照してください。

TimesTenの制約事項と制限事項

この項では、Oracle DatabaseでのOCIと比較した、TimesTenでのOCIの制限事項について、次の各項目を説明します。

TimesTenでサポートされていないOracle Database機能

TimesTenに存在しない機能に関連するOCIコール(次のOracle Database機能をサポートしていない)は、TimesTenではサポートされていません。

  • アドバンスト・キューイング

  • ANYDATA

  • オブジェクトのサポート

  • コレクション

  • カートリッジ・サービス

  • ダイレクト・パス・ロード

  • 日付/時間間隔

  • イテレータ

  • BFILE

  • 暗号ツールキット

  • XML DBサポート

  • Spatialサービス

  • イベント処理

  • セッションの切替え

  • スクロール可能カーソル

TimesTenでのOCIの制限事項

TimesTenのOCIにおけるいくつかの制限事項を示します。

  • 非同期コールはサポートされていません。

  • 接続プーリングおよびセッション・プーリングはサポートされていません。

  • OCIDescribeAny()でのオブジェクトの記述は、名前による記述のみがサポートされます。PL/SQLオブジェクトの記述はサポートされていません。(また、「サポートされているOCIコール」でこの関数の項目を参照してください。)

  • TimesTenクライアント/サーバーの自動クライアント・フェイルオーバーはサポートされていません。

  • TNSPINGユーティリティでは、TimesTenへの接続は認識されていません。

  • INSERTUPDATEおよびDELETE文からの暗黙的ROWID値の取得はサポートされていません。(ただし、SELECT FOR UPDATE文ではサポートされています。)

  • 結果セットを返すTimesTen組込みプロシージャは、直接にはサポートされていません。ただし、この目的にPL/SQLを使用することはできます。「OCIでPL/SQLを使用してTimesTen組込みプロシージャをコール」を参照してください。

  • PL/SQLブロック、プロシージャ・コールまたは関数コールから単一のREF CURSORのみが返されます。

  • OCIBindArrayOfStruct()およびOCIDefineArrayOfStruct()による構造体のバインドおよび定義は、SQL文についてはサポートされていますが、PL/SQLについてはサポートされていません。(また、「サポートされているOCIコール」でこれらの関数の項目を参照してください。)

  • SQL*PlusやSQL*LoaderなどのOracle Databaseユーティリティはサポートされていません。(TimesTenでは、SQL*PlusのかわりにttIsqlを、SQL*LoaderのかわりにttBulkCpを使用できます。『Oracle TimesTen In-Memory Databaseリファレンス』ユーティリティを参照してください。)

  • 配列バインド(PL/SQL文に配列をバインドする機能)は、連想配列(索引付き表またはPL/SQL表)についてはサポートされていますが、VARRAY(変数サイズ配列)やネストされた表はサポートされていません。(「TimesTenのOCIでの連想配列のバインド」を参照してください。)

  • TimesTenとOracle DatabaseはどちらもXAをサポートしていますが、TimesTenではOCIを介したXAはサポートしていません。

  • OCIを使用すると、TimesTenでは、DML文に対する自動コミットが自動的に無効化されます。終了時に、トランザクションを明示的にコミットするか、ロールバックする必要があります。