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サポートの位置付けを示します。
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への接続は認識されていません。 -
INSERT
、UPDATE
および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文に対する自動コミットが自動的に無効化されます。終了時に、トランザクションを明示的にコミットするか、ロールバックする必要があります。