SQLファンクションとしての外部プロシージャの起動
データベース内でPL/SQLを使用して外部プロシージャを起動するステップを示します。
外部プロシージャの概要
外部プロシージャは、第3世代の言語で記述されたファンクションで、PL/SQLまたはSQL内からPL/SQLルーチンまたはファンクションであるかのようにコールできます。
外部プロシージャは、再利用性、効率性およびモジュール性を促進します。 他の言語で記述された既存の動的リンク・ライブラリ(DLL)は、PL/SQLプログラムからコールできます。 DLLは必要な場合にのみロードされ、コール元プログラムに影響を与えずに拡張できます。
また、外部プロシージャを使用すると、SQLトランザクション処理に適したPL/SQLよりも特定のタスクをより効率的に実行できるため、パフォーマンスも向上します。
外部プロシージャは、次の場合に役立ちます:
-
科学的問題や工学的問題の解決
-
データの分析
-
デバイスやプロセスのリアルタイム制御
詳細については、「外部プロシージャとは」を参照してください。
Autonomous Databaseでの外部プロシージャの使用について
ユーザー定義関数を使用して、Autonomous Databaseの外部プロシージャを起動して使用できます。
外部プロシージャは、Autonomous Databaseインスタンスにはインストールしません。 外部プロシージャを使用するには、プロシージャはOracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているVMでリモートでホストされます。
外部プロシージャは、Autonomous Databaseがプライベート・エンドポイントにある場合にのみサポートされます。 EXTPROCエージェント・インスタンスはプライベート・サブネットでホストされ、Autonomous Databaseはリバース接続エンドポイント(RCE)を介してEXTPROCエージェントにアクセスします。
ノート:
Autonomous Databaseは、C言語の外部プロシージャのみをサポートします。外部プロシージャは、次を使用してデプロイされます:
-
EXTPROCエージェントがインストールされ、Oracle Cloud Infrastructure (OCI)マーケットプレイス・スタックの一部として構成されたOracle提供のコンテナ・イメージ。EXTPROCエージェント・インスタンスは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているVMにリモートでホストされます。 Autonomous DatabaseとEXTPROCエージェント・インスタンス間のセキュアな通信は、プライベート・エンドポイントで実行されているAutonomous DatabaseインスタンスからEXTPROCエージェント・インスタンスにトラフィックが許可されるように、ネットワーク・セキュリティ・グループ(NSG)ルールを設定することで保証されます。EXTPROCエージェント・イメージは、ポート16000で外部プロシージャをホストおよび実行するように事前構成されています。 -
ライブラリを作成し、外部ファンクションおよびプロシージャを登録および起動するためのPL/SQLプロシージャ。
詳細については、「DBMS_CLOUD_FUNCTIONパッケージ」を参照してください。
次のステップに従って、Autonomous Databaseで外部プロシージャを起動します:
-
Cプロシージャを定義します。 「Cプロシージャの定義」を参照してください。
-
共有オブジェクト(
.soファイル)ライブラリを作成します。 「共有ライブラリ(.so)ファイルの作成」を参照してください。 -
Autonomous Database
EXTPROCスタック・アプリケーションを起動します。 「OCI Marketplace EXTPROCスタック・アプリケーションの入手」を参照してください。 -
Oracle Autonomous Database
EXTPROCエージェントをプロビジョニングおよび構成します。 詳細については、「EXTPROCエージェント・アプリケーションのスタックの作成」を参照してください。 -
EXTPROCエージェント・インスタンスに接続するようにAutonomous Databaseを構成します。 詳細については、「WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成」を参照してください。 -
DBMS_CLOUD_FUNCTION.CREATE_CATALOGを使用してリモート・ライブラリを作成します。 詳細については、「外部プロシージャをSQLファンクションとして起動するステップ」を参照してください。 -
前のステップで作成したユーザー定義関数を使用します。 詳細については、「外部プロシージャをSQLファンクションとして起動するステップ」を参照してください。
Cプロシージャの定義
これらのプロトタイプのいずれかを使用して、Cプロシージャを定義します。
-
Kernighan & Ritchieスタイルのプロトタイプ。 たとえば:
void UpdateSalary(x) float x; ... -
全幅より小さい数値データ型以外のISO/ANSIプロトタイプ(
float,short,charなど)。 たとえば:void UpdateSalary(double x) ... -
デフォルトの引数格上げによってサイズの変わらないその他のデータ型。
デフォルトの引数格上げによってサイズが変わる定義の例は次のとおりです。
void UpdateSalary(float x) ...
共有ライブラリ(.so)ファイルの作成
共有オブジェクト(.soファイル)ライブラリを作成します。 共有オブジェクト・ライブラリには、前のステップで定義したCプロシージャ(外部プロシージャ)が含まれています。
次のコマンドを使用して、共有オブジェクト・ライブラリを生成します:
gcc -I/u01/app/oracle/extproc_libs/ -shared -fPIC -o extproc.so UpdateSalary.cこれにより、共有オブジェクト(.so)、extproc.soライブラリが作成されます。 前のステップで定義したUpdateSalaryプロシージャは、extproc.soライブラリに含まれています。 共有オブジェクト(.so)ライブラリは、実行時に動的にロードされます。
OCI Marketplace EXTPROCスタック・アプリケーションの入手
OCI MarketplaceのEXTPROCスタック・アプリケーションを取得するステップを示します。
EXTPROCスタック・アプリケーションの起動
「EXTPROCアプリケーション詳細」ページからEXTPROCスタック・アプリケーションを起動します。
これにより、EXTPROCエージェントのスタックを作成できる「スタックの作成」ページが表示されます。
WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成
自己署名ウォレットは、EXTPROCエージェント・アプリケーションの作成の一部として作成されます。 このウォレットを使用すると、Extrpocエージェント・インスタンスにアクセスできます。
EXTPROCエージェント・インスタンスでリモート・プロシージャを実行するには、Autonomous DatabaseおよびEXTPROCエージェントが相互トランスポート・レイヤー・セキュリティ(mTLS)を使用して接続します。 Mutual Transport Layer Security (mTLS)を使用する場合、クライアントは、信頼できるクライアント認証局(CA)証明書を持つ標準のTLS 1.2を使用して、TCPS (セキュアTCP)データベース接続を介して接続します。 詳細については、「Autonomous Databaseインスタンスへの接続について」を参照してください。
ノート:
認証局(CA)によって発行された公開証明書を取得して使用することもできます。前提条件として、EXTPROCが実行されているVMの /u01/app/oracle/extproc_walletディレクトリから、ウォレットをオブジェクト・ストレージにエクスポートする必要があります。
次のステップに従って、ウォレットをAutonomous Databaseにアップロードします:
外部プロシージャをSQLファンクションとして起動するステップ
外部プロシージャをSQLファンクションとして起動するステップを示します。
OCI MarketplaceのEXTPROCスタック・アプリケーションを起動し、外部プロシージャを実行するように構成した後、それぞれの外部プロシージャを参照およびコールするSQLラッパー・ファンクションのライブラリを作成します。
前提条件として、ホワイトリスト・ライブラリをEXTPROC VMの/u01/app/oracle/extproc_libsディレクトリにコピーする必要があります。








