機械翻訳について

Autonomous Databaseインスタンスでの汎用スクリプトの起動

Autonomous Databaseで、BASH、CまたはPython型の汎用スクリプトを起動できます。

Autonomous Databaseでの汎用スクリプトの実行について

Autonomous Databaseインスタンスから、Bash、CまたはPythonで記述されたスクリプトなどの汎用スクリプトを起動できます。

Autonomous Databaseインスタンスで汎用スクリプトを直接実行することはできません。 かわりに、スクリプトは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているOracle Autonomous Database Extprocコンテナ・イメージにリモートでホストされます。 Oracle Schedulerジョブを使用して、Autonomous Databaseから汎用スクリプトを起動します。 作成するOracle Schedulerジョブは、実行可能ジョブである必要があります。 実行可能ジョブは、シェル・スクリプトまたはその他の実行可能ファイルを実行できます。

ノート:

この機能は、Oracleデータベース・リリース19cでのみサポートされています。

Autonomous Databaseからの汎用スクリプトは、データベースがプライベート・エンドポイント上にある場合にのみサポートされます。 汎用スクリプトを実行するには、EXTPROCエージェントがインストールされた状態でOracle Autonomous Databaseコンテナ・イメージを取得、インストールおよび構成する必要があります。 Autonomous Database EXTPROCコンテナ・イメージを使用すると、BASH、CまたはPythonで記述された外部プロシージャおよびスクリプトをAutonomous Databaseからコールできます。 EXTPROCエージェント・インスタンスはプライベート・サブネットでホストされ、Autonomous Databaseはリバース接続エンドポイント(RCE)を介してEXTPROCエージェントにアクセスします。

汎用スクリプトは、次を使用してデプロイされます:

  • Oracleは、EXTPROCエージェントがインストールされたAutonomous Databaseコンテナ・イメージを提供しました。 Oracleは、GitHubパッケージにコンテナ・イメージを提供します。

    EXTPROCコンテナ・イメージを取得および構成する手順は、GitHub READMEを参照してください:

    EXTPROCエージェント・インスタンスは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているコンテナ・イメージでリモートでホストされます。 Autonomous DatabaseEXTPROCエージェント・インスタンス間のセキュアな通信は、プライベート・エンドポイントで実行されているAutonomous DatabaseインスタンスからEXTPROCエージェント・インスタンスへのトラフィックが許可されるように、ネットワーク・セキュリティ・グループ(NSG)ルールを設定することで保護されます。 EXTPROCエージェント・イメージは、ポート16000で外部プロシージャをホストおよび実行するように事前構成されています。

  • エンドポイント環境を登録し、登録されたエンドポイントに対する権限を管理するPL/SQLプロシージャ。 詳細については、「DBMS_CLOUD_FUNCTION_ADMINパッケージ」を参照してください。

  • 汎用スクリプトを起動するスケジューラ・ジョブおよびプログラムを作成および管理するPL/SQLプロシージャ。

    詳細については、DBMS_SCHEDULERを参照してください。

Autonomous Databaseインスタンスから汎用スクリプトを実行するには、次のステップに従います:

WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成

自己署名ウォレットは、EXTPROCエージェント・アプリケーションの作成の一部として作成されます。 このウォレットを使用すると、Autonomous DatabaseインスタンスからEXTPROCエージェント・インスタンスにアクセスできます。

EXTPROCエージェント・インスタンスで汎用スクリプトを実行するには、Autonomous DatabaseおよびEXTPROCエージェントがMutual Transport Layer Security (mTLS)を使用して接続します。 mTLSを使用してEXTPROCエージェントに接続する場合、信頼できるクライアント認証局(CA)証明書で標準のTLS 1.2を使用してTCPS (セキュアなTCP)データベース接続を使用します。 詳細については、「Autonomous Databaseインスタンスへの接続について」を参照してください。

ノート:

認証局(CA)によって発行された公開証明書を取得して使用することもできます。

前提条件として、EXTPROCが実行されているVMの/u01/app/oracle/wallets/extproc_wallet/ディレクトリから、ウォレットをオブジェクト・ストレージにエクスポートする必要があります。 これにより、Autonomous Databaseはウォレットを使用してEXTPROCに安全にアクセスできます。

EXTPROCウォレットをAutonomous Databaseインスタンスにアップロードします:

  1. Autonomous Databaseのオブジェクト・ストレージから、EXTPROCエージェント・インスタンスの証明書を含むウォレットcwallet.ssoをインポートします。 ウォレット・ファイルの次の点に注意してください:
    • ウォレット・ファイルは、データベース・ユーザーIDおよびパスワードとともに、EXTPROCエージェント・インスタンスへのアクセスを提供します。 ウォレット・ファイルを安全なロケーションに格納し、認可されたユーザーのみと共有します。

    • ウォレット・ファイルの名前を変更しないでください。 オブジェクト・ストレージのウォレット・ファイルの名前は、cwallet.ssoである必要があります。

  2. ウォレット・ファイルcwallet.ssoを格納するオブジェクト・ストレージにアクセスするための資格証明を作成します。 様々なオブジェクト・ストレージ・サービスのusernameおよびpasswordパラメータの詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。
    リソース・プリンシパル資格証明を有効にする場合、Oracle Cloud Infrastructureオブジェクト・ストアにアクセスするための資格証明を作成する必要はありません。 詳細については、「リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセスについて」を参照してください。
  3. ウォレット・ファイルcwallet.ssoのディレクトリをAutonomous Databaseに作成します。
    CREATE DIRECTORY wallet_dir AS 'directory_location';

    ディレクトリの作成の詳細は、「Autonomous Databaseでのディレクトリの作成」を参照してください。

  4. DBMS_CLOUD.GET_OBJECTを使用して、オブジェクト・ストレージからウォレットをダウンロードします。 たとえば:
    BEGIN
      DBMS_CLOUD.GET_OBJECT (
        credential_name     => 'DEF_CRED_NAME',
        object_uri          => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso',
        directory_name      => 'WALLET_DIR'
    );
    END;
    /

    この例では、namespace-stringはOracle Cloud Infrastructure Object Storageネームスペースで、bucketnameはバケット名です。 詳細については、「オブジェクト・ストレージ・ネームスペース」を参照してください。

    ウォレットは、前のステップWALLET_DIRで作成したディレクトリにコピーされます。 EXTPROCエージェント・インスタンスに接続できるウォレットが、Autonomous Databaseインスタンスで使用できるようになりました。

汎用スクリプトを起動するステップ

Autonomous Databaseで汎用スクリプトを起動するステップを示します。

汎用スクリプトを実行するようにEXTPROCエージェント・インスタンスを構成した後、リモート・エンドポイントを登録し、汎用スクリプトをコールするスケジューラ・ジョブを作成します。

次に、Autonomous Databaseを使用して汎用スクリプトを起動するための前提条件を示します:

  • 汎用スクリプトをEXTPROCエージェント・インスタンスにコピーする必要があります。 詳細については、GitHub READMEを参照してください。

  • スケジューラ・ジョブを作成して管理し、ADMIN以外のユーザーで汎用スクリプトを起動するには、次の権限が必要です:

    • MANAGE SCHEDULER

    • CREATE JOB

    • 登録済リモート・エンドポイントの権限

トピック

Autonomous Databaseでのリモート・エンドポイントの登録および管理

ADMINユーザーとして、次のステップを実行して、Autonomous Databaseにリモート・エンドポイントを登録および管理します。

リモート・エンドポイントの登録

DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENVを使用して、リモート・エンドポイントを登録します。

例:

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENV (
        remote_endpoint_name => 'rem_executable',
        remote_endpoint_url  => 'remote_extproc_hostname:16000',
        wallet_dir           => 'WALLET_DIR',
        remote_cert_dn       => 'CN=MACHINENAME'
);
END;
/

この例では、rem_executableライブラリを作成し、Autonomous Databaseremote_urlパラメータで指定されたEXTPROCエージェント・インスタンスを登録します。 EXTPROCエージェント・インスタンスは、ポート16000で汎用スクリプトをホストするように事前構成されています。

詳細については、「REGISTER_REMOTE_EXECUTION_ENVプロシージャ」を参照してください。

登録済エンドポイントの権限の管理

このステップはオプションであり、ADMIN以外のユーザーがAutonomous Databaseから汎用スクリプトを起動する必要がある場合にのみ必要です。

DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENVを使用して、登録済エンドポイントに対する権限をADMIN以外のユーザーに付与します。

例:

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE',
    user_name            => 'username');
END;
/

この例では、REM_EXECUTABLEに対する権限を指定されたユーザーに付与します。 詳細については、「GRANT_REMOTE_EXECUTION_ENVプロシージャ」を参照してください。

登録済エンドポイントに対する権限を付与した後、DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENVを使用して、登録済エンドポイントに対する権限をユーザーから取り消すことができます。

例:

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE',
    user_name            => 'username');
END;
/

この例では、指定したユーザーからREM_EXECUTABLEに対する権限を取り消します。 詳細については、「REVOKE_REMOTE_EXECUTION_ENVプロシージャ」を参照してください。

DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANTを問い合せて、すべてのリモート・エンドポイントに付与されている権限をリストできます。 詳細については、「DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANTビュー」を参照してください。

登録済エンドポイントの削除

DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENVを使用して、登録済リモート・エンドポイントを削除します。

例:

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE');
END;
/

これにより、Autonomous Databaseからrem_executableリモート・エンドポイントが削除されます。 詳細については、「DEREGISTER_REMOTE_EXECUTION_ENVプロシージャ」を参照してください。

汎用スクリプトを起動するスケジューラ・ジョブの作成と管理

Autonomous Databaseから汎用スクリプトを起動するスケジューラ・ジョブを作成および管理するステップを示します。

ADMIN以外のユーザーとして次のステップを実行するには、必要な権限が必要です。 詳細については、「汎用スクリプトを起動するステップ」を参照してください。
  1. DBMS_SCHEDULER.CREATE_JOBを使用して、ジョブ・タイプがexecutableのスケジューラ・ジョブを作成します。

    例:

    BEGIN
     DBMS_SCHEDULER.CREATE_JOB (
        job_name             => 'rem_exec_job',
        job_type             => 'executable',
        job_action           => 'script_location_in_remote_docker_image/name',
        number_of_arguments  => 1,
        enabled              => false,
        auto_drop            => true);
     END;
    /

    この例では、実行可能タイプのrem_exec_jobスケジューラ・ジョブを作成します。

    job_nameパラメータは、ジョブの名前を指定します。

    job_typeパラメータは、ジョブ・アクション・タイプを指定します。 Autonomous Databaseで汎用スクリプトを起動するには、実行可能ファイルとしてjob_typeを指定する必要があります。

    job_actionパラメータは、ジョブのインライン・アクションを指定します。 これは、呼び出す必要があるリモート・エンドポイント上のスクリプトのロケーションです。

    number_of_argumentsパラメータは、ジョブ引数の数を指定します。

    enabledパラメータは、ジョブの作成直後にジョブを有効にするかどうかを示します。

    auto_dropパラメータは、完了後にジョブを削除するかどうかを示します。

  2. DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUEを使用して、ジョブ引数の値を設定します。

    例:

    BEGIN
     DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
        job_name          => 'rem_exec_job',
        argument_position => 1,
        argument_value    => 'param1');
     END;
    /
  3. DBMS_SCHEDULER.CREATE_JOBを使用して、rem_exec_jobジョブのdestination属性を変更します。

    例:

    BEGIN
     DBMS_SCHEDULER.SET_ATTRIBUTE (
          name       => 'rem_exec_job',
          attribute  => 'destination',
          value      => 'REMOTE_EXTPROC:remote_endpoint_name');
     END;
    /

    この例では、rem_exec_jobジョブのdestination属性を変更して、リモート・ライブラリ・パスを指定します。

    job_nameパラメータは、ジョブの名前を指定します。

    attributeパラメータは、変更する属性を指定します。

    valueパラメータは、リモート・エンドポイント宛先を指定するためにdestination属性を変更します。

    このパラメータは、REMOTE_EXTPROC:remote_endpoint_name形式の文字列値を受け入れます。remote_endpoint_nameは、登録されたリモート・エンドポイントの名前です。

    指定したエンドポイントに対する権限がない場合、エラーが発生します。

    詳細については、「DBMS_SCHEDULERサブプログラム」を参照してください。

  4. スケジューラ・ジョブでDBMS_SCHEDULER.ENABLEを実行します。

    例:

    BEGIN
     DBMS_SCHEDULER.ENABLE (
        name => 'rem_exec_job');
     END; 
    /

    この例では、rem_exec_jobジョブを有効にします。 詳細については、DBMS_SCHEDULERを参照してください。

    ジョブを有効にすると、スケジューラはジョブの実行を開始します。

    「USER_CLOUD_FUNCTION_RUN_DETAILSビュー」および「DBA_CLOUD_FUNCTION_RUN_DETAILSビュー」を問い合せて、スケジューラ・ジョブのステータスを表示します。