『Oracle Call Interfaceプログラマーズ・ガイド』のこのリリースでの変更点
内容は次のとおりです。
-
Oracle Database 12cリリース2 (12.2)での変更点
Oracle Database 12cリリース2 (12.2.0.1)での変更
Oracle Database 12cリリース2 (12.2.0.1)での変更。
新機能
このリリースの新機能は次のとおりです。
-
Oracle Shardingインタフェース - スタンドアロン接続用の接続を開始する際のデータベース・シャーディング機能と、OCIセッション・プールからの接続の取得のためのインタフェースのサポート、およびカスタム接続プール用のインタフェースのサポート:
-
新しいシャーディング・キーおよびスーパー・シャーディング・キー記述子型の
OCIShardingKey
とOCI記述子のOCI_DTYPE_SHARDING_KEY
。この記述子型は、シャーディング・キーおよびスーパー・シャーディング・キーを構成するために使用します。この記述子型は、シャーディング・キーおよびスーパー・シャーディング・キー記述子を割り当てるためにOCIDescriptorAlloc()
コールのtype
パラメータに新しく追加されました。 -
新しい
OCIShardingKeyColumnAdd()
コールでは、シャーディング・キー列をOCIShardingKey
に追加して複合シャーディング・キーまたは複合スーパー・シャーディング・キーを構成できます。 -
新しい
OCIShardingKeyReset()
コールでは、アプリケーションで、新しいシャーディング・キーまたはスーパー・シャーディング・キーを作成するためにOCIShardingKey
をリセットして割当て済の記述子を再利用できます。 -
新しいサービス・コンテキスト・ハンドル属性:
-
OCI_ATTR_SHARDING_KEY
- スタンドアロン接続およびOCIセッション・プールでは、この属性はOCISessionGet()
コールを実行する前にOCIAuthハンドルに設定されます。カスタム・プールでは、この属性はシャーディング・キーを特定の接続(OCISvcCtx
)に関連付けます。 -
OCI_ATTR_SUPER_SHARDING_KEY
- スタンドアロン接続およびOCIセッション・プールでは、この属性はOCISessionGet()
コールを実行する前にOCIAuthハンドルに設定されます。カスタム・プールでは、この属性はスーパー・シャーディング・キーを特定の接続(OCISvcCtx
)に関連付けます。 -
OCI_ATTR_SHARDING_KEY_B64
- 診断目的で、この属性はシャーディング・キーまたはスーパー・シャーディング・キーの値のBASE64表現を取得します。OCI_DTYPE_SHARDING_KEY
記述子のこの属性により、OCIAttrGet()
コールでは入力としてOCIShardingKey
記述子型を使用して、シャーディング・キーまたはスーパー・シャーディング・キーのBASE64表現を戻します。
-
-
スタンドアロン接続およびOCIセッション・プールの場合:
-
OCISessionGet()
コールでは、シャーディング・キーおよびスーパー・シャーディング・キーを構成するために使用するOCIShardingKey
記述子型など、様々なプロパティが設定されたOCIAuthハンドルを入力として使用します。これらのプロパティが設定された状態で、OCISessionGet()
コールは、指定されたシャーディング・キーおよびスーパー・シャーディング・キーの値に対応するデータが含まれる特定のシャードに対する新規セッションまたは適切な既存のセッション(OCIセッション・プールで使用可能な場合)を取得します。
-
-
カスタム・プールで使用する場合、特定のシャードに対する接続を戻すには、シャード接続が作成されているシャード名を特定するとともに、一致する接続の検索を可能にするシャード名とシャーディング・キーまたはスーパー・シャーディング・キーのマッピングも特定する必要があります。次の新機能によりこの動作が可能になります。
-
属性
OCI_ATTR_INSTNAME
は、OCIAttrGet()
コールを使用して特定の接続に対応するシャード・インスタンス名を戻すために、サービス・コンテキストで使用します。 -
新しい
OCIShardInstancesGet()
コールは、特定のシャーディング・キー、スーパー・シャーディング・キーおよび接続文字列のインスタンスのリストを戻します。 -
新しい
OCISessionGet()
のモードOCI_SESSGET_CUSTOM_POOL
は、カスタム・プールで使用すると、新しいシャード・インスタンスへの接続時にシャード・トポロジ情報を明示的にキャッシュできます。
-
詳細は、「OCIDescriptorAlloc()」、「OCIShardingKeyColumnAdd()」、「OCIShardingKeyReset()」、「サービス・コンテキスト・ハンドル属性」、「OCIAttrGet()」、「OCIShardInstancesGet()」および「OCISessionGet()」を参照してください。
詳細は、「シャードを使用するためのOCIインタフェースについて」、「OCIセッション・プールから接続を取得するためのシャーディング・キーおよびスーパー・シャーディング・キーの指定について」、「カスタム・プールから接続を取得するためのシャーディング・キーおよびスーパー・シャーディング・キーの指定について」および「OCI記述子」を参照してください。
詳細は、『Oracle Database管理者ガイド』のOracle Sharding用のアプリケーション開発に関する項を参照してください。
-
-
結果列の照合記述のサポート:
-
新しい文ハンドル属性
OCI_ATTR_COLLATION_ID
- 文の記述情報から照合を戻します。
詳細は、「列属性」を参照してください。
-
-
OCIセッション・プーリングの機能拡張
-
OCIセッション・プールおよびDRCPでの複数プロパティ・タグのサポート:
OCISessionGet()
のtaginfo
パラメータが、タグで複数の文字列プロパティを保持できるように拡張されています。セミコロン(;)文字で区切られた複数の文字列プロパティが含まれるこのようなタグは、複数プロパティ・タグと呼ばれます。複数プロパティ・タグのプロパティの順序は、プール内で一致するセッションを検出するために重要です。複数プロパティ・タグは、OCI_SESSGET_MULTIPROPERTY_TAG
モードと組み合せて使用する必要があります。OCISessionGet()
によって戻されるretTagInfo
パラメータでも、戻されたセッションに対応する複数プロパティ・タグを戻すことができます(found
パラメータと組み合せて解釈する必要があります)。セッションは、(
OCI_SESSRLS_RETAG
|
OCI_SESSRLS_MULTIPROPERTY_TAG
モードで)OCISessionRelease()
を起動して、tagパラメータを複数プロパティ・タグに設定することで、複数プロパティ・タグによってタグ付けできます。この機能は、DRCPでも動作します。詳細は、「データベース常駐接続プーリング」を参照してください。
詳細は、「セッション・プールでのタグの使用について」および「OCISessionGet()」を参照してください。
-
新しい
OCI_SPOOL_ATTRVAL_TIMEDWAIT
モードがOCIセッション・プール・ハンドルに追加され、使用可能なセッションの取得を待機するOCISessionGet()
コールをタイムアウトするために使用できます。タイムアウト値は、OCI_ATTR_SPOOL_WAIT_TIMEOUT
属性によって指定できます。詳細は、「セッション・プール・ハンドル属性」を参照してください。
-
OCIセッション・プーリングの機能拡張(アクティブでない接続の検出、クリーンアップ、アイドル・セッションの再確立など)。これにより、信頼性が高まり、基礎となるネットワークの停止またはデータベース・ノードの障害の後に、使用可能なセッションを
OCISessionGet()
で戻すことのできる確実性が向上します。
-
-
HAインフラストラクチャでのアプリケーション・コンティニュイティのサポート:
-
プールを使用するアプリケーションのOCIセッション・プールのサポート。
-
新しい
FAILOVER_TYPE
の値:TRANSACTION
。この値により、リカバリ可能なエラーの受信時に、処理中のトランザクションのリプレイがサポートされます。 -
計画済メンテナンスの隠蔽用:
-
新しいOCI透過的アプリケーション・フェイルオーバー(TAF)のエラー・コード。詳細は、Oracle Databaseエラー・メッセージ・リファレンスの
ORA-25410
、ORA-25417
、ORA-25418
およびORA-25419
を参照してください。
-
-
計画外停止の隠蔽用:
-
OCIセッション・プールのサポート。
-
新しいセッション・プール・ハンドル属性:
OCI_ATTR_FOCBK
- この属性をOCIAttrSet()
とともに使用して、OCIセッション・プールの各セッションに関連付けるTAFコールバックおよびコンテキストを定義するか、この属性をOCIAttrGet()
とともに使用して、セッション・プールに定義されたTAFコールバックおよびコンテキストをOCIFocbkStruct
に移入します。 -
新しいAPI
OCIRequestDisableReply()
- OCIを起動してアプリケーション要求の終了までコールの記録を停止します(要求の終了はOCISessionRelease()
でマークされます)。このコールは、OCIのアプリケーション・コンティニュイティが有効になっているが、そのアプリケーションがリプレイ不可のコード・セクションに入っている場合に使用します。 -
新しいTAFコールバック関数の
TAFcbk_fn
- フェイルオーバーが発生した場合、ユーザー・セッションの再確立中にコールバック関数を複数回起動できるように、コールバック関数を登録します。最初のコールでは、アプリケーションがユーザーに対し、フェイルオーバーの進行中に遅延が発生することを通知し、2番目のコールでは、ユーザーに対し、接続が再確立されて使用可能になったこと、またはフェイルオーバーに失敗した場合はフェイルオーバーが発生しないことを通知します。接続が再確立されて使用可能になると、クライアントでは、ALTER SESSION
コマンドをリプレイし、ユーザーに対してフェイルオーバーが発生したことなどを通知できます。 -
新しい認証情報ハンドル属性の
OCI_ATTR_FIXUP_CALLBACK
- OCISessionPoolを使用しないアプリケーションまたはカスタム・プールを使用するアプリケーションでは、認証ハンドルの属性でOCISessionGet()
に渡されるコールバックを指定します。OCISessionPoolを使用するアプリケーションでは、この属性は、認証ハンドルで設定し、次にそれを属性OCI_ATTR_SPOOL_AUTH
が属性OCI_ATTR_FIXUP_CALLBACK
に設定された状態のセッション・プール・ハンドルで設定する必要があります。
-
詳細は、「OCIとアプリケーション・コンティニュイティ」、「ユーザー・セッション・ハンドル属性」、「セッション・プール・ハンドル属性」、「認証情報ハンドル属性」、「セッション状態の修正のためのPL/SQLコールバック」、「OCIRequestDisableReplay()」および「透過的アプリケーション・フェイルオーバー・コールバック構造およびパラメータ」を参照してください。
-
-
最大128バイトの識別子のサポート:
名前の長さは、128バイトまで指定できるようになりました。以前は、30バイトまでに制限されていました。たとえば、名前の中でも特にOCIDirPath (ダイレクト・パス・ロード関数)の識別名を保持するハンドル属性などで、これらの名前として属性名、ディレクトリ別名および識別子名が含まれます。
30バイトの識別子名のみをサポートする古いOCIクライアントは、引き続きリリース2 (12.2)のOCI APIで動作します。
識別子の長さが増加する場合、状況によっては、非推奨のV7 API
odessp()
および非推奨のUPI APIupidpr()
を使用するOCIアプリケーションを変更する必要があります。詳細は、「既存のOCIリリース7アプリケーションのアップグレードについて」の「ノート」を参照してください。 -
プラガブル・データベースのサポート:
-
マルチテナント・コンテナ・データベース(CDB)に対するOCIコールの拡張機能:
クライアント結果キャッシュは、プラガブル・データベースへの接続とともに動作します。
-
ALTER SESSION SET CONTAINERに対するOCIコールの拡張機能:
これらの操作を実行するには、クライアントはサーバーと同じバージョンである必要があり、それ以外の場合、古いバージョンのクライアントではエラーが発生します。
-
ALTER SESSION SET CONTAINER
文では、OCIのTIMESTAMP WITH TIMEZONE
またはTIMESTAMP WITH LOCAL TIMEZONE
データ型を使用するアプリケーションがサポートされます。これにより、アプリケーションでは、異なるデータベース・タイムゾーン設定または異なるデータベース・タイムゾーン・ファイル・バージョン設定を持つプラガブル・データベース間で切替えが可能になります。 -
ALTER SESSION SET CONTAINER
文を使用すると、文字セットが異なる2つのプラガブル・データベース間でOCI接続を切り替えることができます。
-
詳細は、「マルチテナント・コンテナ・データベース(CDB)が含まれるOCI APIコールの一般的な拡張機能」および「ALTER SESSION SET CONTAINERのOCI拡張機能」を参照してください。
-
-
OTTパラメータの
USERID
では、username
とdb_name
の組合せに対して最大243バイトの長さが受入れ可能になりました(この組合せはOCIContextGetValue()
コールのキーとして追加および使用されます)。Oracle Database 12cリリース1 (12.1)では、最大長は64バイトでした。詳細は、「OTTパラメータ」の「USERID」を参照してください。
-
OCIContextSetValue()
、OCIContextGetValue()
およびOCIContextClearValue()
の各関数で、keylen
パラメータの最大長が64バイトから255バイトに増加しました。詳細は、「OCIContextSetValue()」、「OCIContextGetValue()」および「OCIContextClearValue()」を参照してください。
-
<wallet_location>
要素が、oraaccess.xml
クライアント構成ファイルのOracle Notification Service (ONS)パラメータのons
セクションに追加されました。詳細は、「接続パラメータのデフォルトの指定について」を参照してください。
-
新しい関数と変更された関数を対象とするXStreamでのSCNバージョン1からバージョン2への変換のサポート:
このサポートには、新しい関数の
OCILCRScnToPosition2()
、OCILCRComparePosition()
、OCILCRConvertPosition()
、OCILCRGetLCRIDVersion()
と、変更された関数のOCILCRSCNsFromPosition()
(バージョン1とバージョン2の両方をサポート)およびOCILCRScnToPosition()
(SCN値がバージョン1の最大値を超えるとエラーが発生)が含まれます。詳細は、「OCILCRScnToPosition2()」、「OCILCRComparePosition()」、「OCILCRConvertPosition()」、「OCILCRGetLCRIDVersion()」、「OCILCRSCNsFromPosition()」および「OCILCRSCNToPosition()」を参照してください。
詳細は、Oracle Database XStreamガイドの論理変更レコードに関する項を参照してください。
-
XStream関数では、フェデレーションPDBでのアプリケーション・コンテナおよびアプリケーション共通オブジェクトのレプリケーションがサポートされます
このサポートには、次の関数の変更が含まれます。-
OCILCRHeaderGet()
の新しいLCRフラグ:OCI_LCR_APPCON_REPLAY
- 論理変更レコード(LCR)がアプリケーション・コンテナ同期文からリプレイされることを示します。 -
OCIXStreamOutAttach()
の新しいモード・フラグ:-
OCIXSTREAM_OUT_ATTACH_APP_CONTAINER
- アプリケーションは、アプリケーション・コンテナ文(ALTER PLUGGABLE DATABASE APPLICATION
)のLCRを取得します。 -
OCIXSTREAM_OUT_ATTACH_EXTENDED_TXID
- アプリケーションは、拡張トランザクションID形式の要求を行います。
-
詳細は、「OCILCRHeaderGet()」および「OCIXStreamOutAttach()」を参照してください。
-
-
OCIでの分散LOBのサポート:
リモート表からLOBロケータを選択する問合せがサポートされます。DBLinkを使用するリモート表でのDML操作がサポートされます。
問合せおよびDMLの
FROM
またはWHERE
句に記載されるすべての表は、同じ場所に存在する必要があります。リモート・ロケータをWHERE
句のバインド変数として使用する場合、それらは同じ場所に存在する必要があります。表またはロケータを同じ場所に配置することで、それらは同じデータベース・リンクを使用することになります。OCI LOB APIでは、リモートLOBロケータ(
CLOB
、BLOB
)を使用した分散操作がサポートされます(BFILE
ロケータを除く)。2つのロケータを受け入れるすべてのLOB APIで、両方のLOBが1つのデータベースに存在している必要があります。
新しいLOBロケータ属性:
OCI_ATTR_LOB_REMOTE
を使用して、LOBロケータがローカル・データベース表に属するか、リモート・データベース表に属するかを検出できます。ブール・データ型として戻されるTRUE
の値は、LOBロケータがリモート・データベース表に基づくことを示します。次のLOB関数では、リモート・ロケータが渡されるとエラーがスローされます: OCILobAssign()、OCILobLocatorAssign()、OCILobEnableBuffering()、OCILobDisableBuffering()、OCILobFlushBuffer()、OCILobArrayRead()、OCILobArrayWrite()およびOCILobLoadFromFile2()。
詳細は、「LOB関数」、「LOBでのOCI関数の使用について」および「LOBロケータ属性」を参照してください。
詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』の分散LOBの使用およびリモートLOBの操作に関する章を参照してください。
-
従来のDML操作によるハイブリッド列圧縮(HCC)のサポート:
OCIでの配列の挿入中にHCCを使用できます。HCCの従来型配列の挿入は、ASSM表領域のHCC表でのみサポートされます。
詳細は、「OCI配列インタフェース」を参照してください。
HCCを構成する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。
-
ALTER SESSION SWITCH CONTAINER SWITCH SERVICE
文を使用するOCIコールの制限。詳細は、「ALTER SESSION SWITCH CONTAINER SWITCH SERVICEが含まれるOCIコールの制限」を参照してください。
-
ストリーム・データのロード時におけるOracle
NUMBER
およびDATE
データの形式または内部表現の検証のサポート:ストリームが
OCIDirPathLoadStream()
を使用してサーバーで解析されるときに、ダイレクト・パス・コンテキスト・ハンドルの属性OCI_ATTR_DIRPATH_FLAGS
をOCI_DIRPATH_FLAGS_VLDT
フラグ・セットと組み合せて使用し、日付と数値の内部表現を検証できます。ただし、これは時間のかかる操作であるため、デフォルトではこのフラグは設定されません。詳細は、「Oracle NUMBERおよびDATEデータの形式の検証について」および「ダイレクト・パス・コンテキスト・ハンドル(OCIDirPathCtx)の属性」を参照してください。
-
パスワード変更前のログインにおける期限切れのユーザー・アカウントに対する管理セッションの確立のサポート。
OCIPasswordChange()
のmodeパラメータは、OCI_AUTH
値に加え、その管理セッションに対応する次の追加モード・フラグのいずれかを受け入れることができます:OCI_CPW_SYSDBA
、OCI_CPW_SYSOPER
、OCI_CPW_SYSASM
、OCI_CPW_SYSBKP
、OCI_CPW_SYSDGD
およびOCI_CPW_SYSKMT
。詳細は、「OCIPasswordChange()」を参照してください。
-
線形スナップショットのサイズが24バイトから34バイトに変更されており、コレクション・イメージ・フォームの再構成が必要です。
古いクライアントまたはサーバーでリリース12.2以上のデータベースに接続してコレクションにアクセスする場合、線形スナップショットを含むコレクション・イメージ・フォームは、古いクライアントまたはサーバーを対象に送受信を行うときに変換する必要があります。この変換の結果、パフォーマンスが低下します。この変換を避けるため、バージョン12.2のクライアントまたはサーバーを使用することをお薦めします。
詳細は、「OCIオブジェクトの概要」を参照してください。
-
Instant Clientで、
ORA_TZFILE
環境変数を使用して、ファイル・システムからタイムゾーン・ファイルを読み取ることができるようになりました。以前は、ORA_TZFILE
環境変数を指定すると、データ共有ライブラリにバンドルされているタイムゾーン・ファイルが読み取られ、ファイル・システムのタイムゾーン・ファイルは無視されていました。 -
2つの新しいサービス・コンテキスト・ハンドル属性の
OCI_ATTR_MAX_CHARSET_RATIO
およびOCI_ATTR_MAX_NCHARSET_RATIO
を使用して、それぞれサーバー文字セットからクライアント文字セットまたは各国語文字セットへの最大文字セット拡張率を取得できます。これにより、変換の前に最適なメモリー・バッファを効率的に割り当てることができるため、データがデータベースから戻されたときにそれを保持するための十分な領域を割り当てることができます。これは、サーバーとクライアント間の文字セットまたは各国語文字セットが異なる場合に便利です。詳細は、「文字セットの選択について」および「サービス・コンテキスト・ハンドル属性」を参照してください
-
SYSRACアクセス用の新しい認証モード
OCI_SYSRAC
を、OCISessionBegin()
のmode
パラメータで使用できます。このモードでは、SYSRACアクセス用に認証されます。また、SYSBACKUPアクセス用のOCI_SYSBKP
、SYSDGアクセス用のOCI_SYSDGD
およびSYSKMアクセス用のOCI_SYSKMT
という各認証モードは、Oracle 12cリリース1 (12.1)で実装されましたが、最近までそのリリースのドキュメントに記載されていませんでした。これらのモードも、この現行リリースのドキュメントに記載されています。詳細は、「OCIの認証管理」および「OCISessionBegin()」を参照してください。
-
新しい文ハンドル属性の
OCI_ATTR_SQL_ID
は、サーバーから特定のSQL文のSQL_ID
を取得し、それをクライアントで使用できるようにします。詳細は、「文ハンドル属性」を参照してください。
-
2つの新しいダイレクト・パス・コンテキスト・ハンドル(
OCIDirPathCtx
)の属性:-
OCI_ATTR_DIRPATH_DEF_EXP_CACHE_SIZE
- 一度に評価されるデフォルト式の数を指定します。デフォルトは100です。行ごとに評価する必要のあるデフォルト式では、この値を増加するとパフォーマンスが向上する可能性があります。 -
OCI_ATTR_DIRPATH_DEFAULTS
- ダイレクト・パスAPIで、明示的にロードされない列のデフォルト式を処理する方法を指定します。
詳細は、「ダイレクト・パス・コンテキスト・ハンドル(OCIDirPathCtx)の属性」を参照してください。
-
非推奨となった機能
次の非推奨の機能は、今後のリリースではサポートされません。
-
OCIリリース7.3 API
詳細は、「既存のOCIリリース7アプリケーションのアップグレードについて」を参照してください。
-
LOBバッファリング・サブシステムAPI
Oracle Database 12cリリース2 (12.2.0.1)では、次のファンクションの使用は推奨されていません。これらのLOBバッファリング関数を使用するかわりに、「LOBデータ、長さおよびチャンク・サイズのプリフェッチ」で説明されているLOBプリフェッチ機能を使用してください。
-
文関数API
Oracle 12cリリース2 (12.2.0.1)以上では、次の関数は非推奨です:
OCIStmtPrepare()
。すべてのOCIアプリケーションで、非推奨のコールOCIStmtPrepare()のかわりにOCIStmtPrepare2()を使用することを強くお薦めします。
HAインフラストラクチャでアプリケーション・コンティニュイティの使用をサポートするには、
OCIStmtPrepare2()
コールを使用します。OCIStmtPrepare()
を使用するアプリケーションでは、「エラー - ORA-25412: OCIStmtPrepareへのコールにより、トランザクションの再実行が無効化されています」
というエラーが戻されます。