『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)での変更。

リリース2 (12.2.0.1)のOracle Call Interface (OCI)での変更内容は次のとおりです。

新機能

このリリースの新機能は次のとおりです。

  • 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セッション・プールのサポート。

      • 新しいセッション・プール・ハンドル属性: 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 API upidpr()を使用する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では、usernamedb_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ロケータ(CLOBBLOB)を使用した分散操作がサポートされます(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_FLAGSOCI_DIRPATH_FLAGS_VLDTフラグ・セットと組み合せて使用し、日付と数値の内部表現を検証できます。ただし、これは時間のかかる操作であるため、デフォルトではこのフラグは設定されません。

    詳細は、「Oracle NUMBERおよびDATEデータの形式の検証について」および「ダイレクト・パス・コンテキスト・ハンドル(OCIDirPathCtx)の属性」を参照してください。

  • パスワード変更前のログインにおける期限切れのユーザー・アカウントに対する管理セッションの確立のサポート。OCIPasswordChange()のmodeパラメータは、OCI_AUTH値に加え、その管理セッションに対応する次の追加モード・フラグのいずれかを受け入れることができます: OCI_CPW_SYSDBAOCI_CPW_SYSOPEROCI_CPW_SYSASMOCI_CPW_SYSBKPOCI_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)の属性」を参照してください。

非推奨となった機能

次の非推奨の機能は、今後のリリースではサポートされません。