

# Oracle Rest Data Services (ORDS) の設定
<a name="Appendix.Oracle.Options.APEX.ORDSConf"></a>

次のトピックでは、ORDS 21 および 22 の設定オプションを一覧表示します。

**Topics**
+ [ORDS 21 以前のインストールと設定](#Appendix.Oracle.Options.APEX.ORDS)
+ [ORDS 22 以降のインストールと設定](#Appendix.Oracle.Options.APEX.ORDS22)

## ORDS 21 以前のインストールと設定
<a name="Appendix.Oracle.Options.APEX.ORDS"></a>

これで、Oracle APEX で使用する Oracle Rest Data Services (ORDS) をインストールして設定する準備が整いました。Oracle APEX バージョン 5.0 以降では、ORDS バージョン 19.1～21 を使用します。ORDS 22 以降をインストールする方法については、「[ORDS 22 以降のインストールと設定](#Appendix.Oracle.Options.APEX.ORDS22)」を参照してください。

リスナーは別個のホスト (Amazon EC2 インスタンス、社内のオンプレミスサーバー、またはデスクトップコンピュータなど) にインストールします。このセクションの例では、ホストの名前が `myapexhost.example.com` であり、ホストが Linux を実行していると仮定します。

**Oracle APEX で使用する ORDS 21 以前をインストールして設定するには**

1. [Oracle REST data services](https://www.oracle.com/database/technologies/appdev/rest-data-services-downloads-212.html) に移動し、Readme を確認します。必要なバージョンの Java がインストールされていることを確認します。

1. ORDS インストール用の新しいディレクトリを作成します。

   ```
   mkdir /home/apexuser/ORDS
   cd /home/apexuser/ORDS
   ```

1. [Oracle REST Data Services](https://www.oracle.com/database/technologies/appdev/rest-data-services-downloads-212.html) から、ファイル `ords.version.number.zip` をダウンロードします。

1. ファイルを `/home/apexuser/ORDS` ディレクトリに解凍します。

1. マルチテナントデータベースに ORDS をインストールする場合は、ファイル `/home/apexuser/ORDS/params/ords_params.properties` に次の行を追加します。

   ```
   pdb.disable.lockdown=false
   ```

1. マスターユーザーに ORDS のインストールに必要な権限を付与します。

   Oracle APEX のオプションをインストールしたら、ORDS スキーマをインストールするために必要な権限をマスターユーザーに付与します。これを行うには、データベースに接続し、次のコマンドを実行します。`MASTER_USER` をマスターユーザーの (大文字で記述した) 名前に置き換えます。
**重要**  
大文字と小文字を区別する識別子を使用してユーザーを作成した場合を除き、ユーザー名を入力する際には大文字を使用します。例えば、`CREATE USER myuser` または `CREATE USER MYUSER` を実行すると、データディクショナリに `MYUSER` が保存されます。ただし、`CREATE USER "MyUser"` で二重引用符を使用すると、データディクショナリには `MyUser` が保存されます。詳細については、「[SYS オブジェクトへの SELECT または EXECUTE 権限の付与](Appendix.Oracle.CommonDBATasks.TransferPrivileges.md)」を参照してください。

   ```
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_OBJECTS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_ROLE_PRIVS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_TAB_COLUMNS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_CONS_COLUMNS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_CONSTRAINTS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_OBJECTS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_PROCEDURES', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_TAB_COLUMNS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_TABLES', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_VIEWS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('WPIUTL', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_SESSION', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_UTILITY', 'MASTER_USER', 'EXECUTE', true);
   ```
**注記**  
これらのコマンドは、ORDS バージョン 19.1 以降に適用されます。

1. ダウンロードした ords.war ファイルを使用して ORDS スキーマをインストールします。

   ```
   java -jar ords.war install advanced
   ```

   プログラムが以下の情報のプロンプトを表示します。デフォルト値は角括弧で囲まれています。詳細については、Oracle ドキュメントの [Introduction to Oracle REST Data Services](https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/20.2/aelig/installing-REST-data-services.html#GUID-6F7B4E61-B730-4E73-80B8-F53299123730) を参照してください。
   + 設定データを保存する場所を入力します。

     「*/home/apexuser/ORDS*」と入力します。これは ORDS 設定ファイルの場所です。
   + 使用するデータベース接続タイプを指定します。[1] ベーシック、[2] TNS、[3] カスタム URL に対応する番号を入力します [1]:

     目的の接続タイプを選択します。
   + データベースサーバーの名前を入力します [localhost]: *DB\$1instance\$1endpoint*

     デフォルト値を選択するか、適切な値を入力します。
   + データベースリスナーポートを入力します [1521]: *DB\$1instance\$1port*

     デフォルト値を選択するか、適切な値を入力します。
   + データベースサービス名を指定するには 1 を、データベース SID を指定するには 2 を入力してください [1]:

     `2` を選択して、データベース SID を指定します。
   + データベース SID [xe]

     デフォルト値を選択するか、適切な値を入力します。
   + Oracle REST Data Services スキーマを検証/インストールする場合は 1 を、このステップをスキップする場合は 2 を入力します [1]:

     [] を選択します`1` このステップでは、ORDS\$1PUBLIC\$1USER という名前の Oracle REST Data Services プロキシユーザーを作成します。
   + ORDS\$1PUBLIC\$1USER のデータベースパスワードを入力します。

     パスワードを入力し、確認のためにもう一度入力します。
   + Oracle REST Data Services のスキーマを検証するには、管理者権限でログインする必要があります。

     管理者ユーザー名: *master\$1user*

     *master\$1user*: *master\$1user\$1password* のデータパスワードを入力する

     パスワードを確認する: *master\$1user\$1password*
**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。
   + ORDS\$1METADATA [SYSAUX] のデフォルトのテーブルスペースを入力します。

     ORDS\$1METADATA [TEMP] のテンポラリテーブルスペースを入力します。

     ORDS\$1PUBLIC\$1USER [USERS] のデフォルトのテーブルスペースを入力します。

     ORDS\$1PUBLIC\$1USER [TEMP] のテンポラリテーブルスペースを入力します。
   + PL/SQL Gateway を使用する場合は 1 を入力し、このステップをスキップするには 2 を入力します。Oracle Application Express を使用している場合、または mod\$1plsql から移行する場合は、1 [1] を入力する必要があります。

     デフォルト値を選択します。
   + PL/SQL ゲートウェイデータベースのユーザー名として [APEX\$1PUBLIC\$1USER] を入力します。

     デフォルト値を選択します。
   + APEX\$1PUBLIC\$1USER のデータベースパスワードを入力します。

     パスワードを入力し、確認のためにもう一度入力します。
   + 1 を入力して、Application Express RESTful Services データベースユーザー (APEX\$1LISTENER、APEX\$1REST\$1PUBLIC\$1USER) のパスワードを指定するか、2 を入力して、このステップをスキップします [1]:

     APEX 4.1.1.V1 に対して `2` を選択するか、他のすべての APEX バージョンに対して `1` を選択します。
   + [APEX 4.1.1.v1 では不要] APEX\$1LISTENER のデータベースパスワード

     パスワードを入力し (必要な場合)、確認のためにもう一度入力します。
   + [APEX 4.1.1.v1 では不要] APEX\$1REST\$1PUBLIC\$1USER のデータベースパスワード

     パスワードを入力し (必要な場合)、確認のためにもう一度入力します。
   + 有効にする機能に対応する番号を入力します。

     SQL Developer Web、REST Enabled SQL、および Database API 機能をすべて有効にするには、`1` を入力します。
   + スタンドアロンモードでスタートする場合は 1 を、終了する場合は 2 を入力します [1]:

     `1` と入力します。
   + APEX 静的リソースの場所を入力します。

     APEX インストールファイルを `/home/apexuser` に解凍した場合は、「`/home/apexuser/apex/images`」と入力します。それ以外の場合は、`unzip_path/apex/images` を入力します。*unzip\$1path* は、ファイルを解凍したディレクトリです。
   + HTTP を使用する場合は 1 を、HTTPS を使用する場合は 2 を入力します [1]:

     `1` を入力する場合は、HTTP ポートを指定します。`2` を入力する場合は、HTTPS ポートと SSL ホスト名を指定します。HTTPS オプションでは、証明書を提供する方法を指定するように求められます。
     + 自己署名証明書を使用するには、`1` を入力します。
     + 独自の証明書を提供するには、`2` を入力します。`2` を入力する場合は、SSL 証明書のパス、およびその証明書のシークレットキーのパスを指定します。

1. APEX `admin` ユーザーのパスワードを設定します。これを行うには、SQL\$1Plus を使用して DB インスタンスにマスターユーザーとして接続し、次のコマンドを実行します。

   ```
   1. EXEC rdsadmin.rdsadmin_util.grant_apex_admin_role;
   2. grant APEX_ADMINISTRATOR_ROLE to master;
   3. @/home/apexuser/apex/apxchpwd.sql
   ```

   `master` を自身のマスターユーザー名に置き換えます。`apxchpwd.sql` スクリプトによってプロンプトが表示されたら、新しい `admin` パスワードを入力します。

1. ORDS リスナーを起動します。以下の コードを実行します。

   ```
   java -jar ords.war
   ```

   ORDS を初めてスタートすると、APEX の静的リソースの場所を指定するように求められます。このイメージフォルダは、APEX のインストールディレクトリ内の `/apex/images` ディレクトリにあります。

1. ブラウザで Oracle APEX の管理ウィンドウに戻り、**[管理]** を選択します。次に、[**Application Express Internal Administration**] を選択します。認証情報を求められたら、以下の情報を入力します。
   + **User name** - `admin` 
   + **Password** - `apxchpwd.sql` スクリプトを使用して設定したパスワード。

   [**Login**] を選択し、その `admin` ユーザーの新しいパスワードを設定します。

これで、リスナーを使用する準備ができました。

## ORDS 22 以降のインストールと設定
<a name="Appendix.Oracle.Options.APEX.ORDS22"></a>

これで、Oracle APEX で使用する Oracle Rest Data Services (ORDS) をインストールして設定する準備が整いました。このセクションの例では、別個のホストの名前が `myapexhost.example.com` であり、ホストが Linux を実行していると仮定します。ORDS 22 の手順は、以前のリリースの手順とは異なります。

**Oracle APEX で使用するための ORDS 22 以降をインストールして設定するには**

1. [Oracle REST data services](http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html) に移動し、ダウンロードする ORDS バージョンの Readme を確認します。必要なバージョンの Java がインストールされていることを確認します。

1. ORDS インストール用の新しいディレクトリを作成します。

   ```
   mkdir /home/apexuser/ORDS
   cd /home/apexuser/ORDS
   ```

1. [Oracle REST Data Services](http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html) から、ファイル `ords.version.number.zip` または `ords-latest.zip` をダウンロードします。

1. ファイルを `/home/apexuser/ORDS` ディレクトリに解凍します。

1. マスターユーザーに ORDS のインストールに必要な権限を付与します。

   `APEX` オプションをインストールしたら、ORDS スキーマをインストールするために必要な権限をマスターユーザーに付与します。これを行うには、データベースにログインして、以下のコマンドを実行します。`MASTER_USER` をマスターユーザーの (大文字で記述した) 名前に置き換えます。
**重要**  
大文字と小文字を区別する識別子を使用してユーザーを作成した場合を除き、ユーザー名を入力する際には大文字を使用します。例えば、`CREATE USER myuser` または `CREATE USER MYUSER` を実行すると、データディクショナリに `MYUSER` が保存されます。ただし、`CREATE USER "MyUser"` で二重引用符を使用すると、データディクショナリには `MyUser` が保存されます。詳細については、「[SYS オブジェクトへの SELECT または EXECUTE 権限の付与](Appendix.Oracle.CommonDBATasks.TransferPrivileges.md)」を参照してください。

   ```
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_OBJECTS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_ROLE_PRIVS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_TAB_COLUMNS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_CONS_COLUMNS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_CONSTRAINTS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_OBJECTS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_PROCEDURES', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_TAB_COLUMNS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_TABLES', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('USER_VIEWS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('WPIUTL', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_SESSION', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_UTILITY', 'MASTER_USER', 'EXECUTE', true);
   
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOB', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_ASSERT', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_OUTPUT', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_SCHEDULER', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('HTP', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('OWA', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('WPG_DOCLOAD', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_CRYPTO', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_METADATA', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_SQL', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('UTL_SMTP', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_NETWORK_ACL_ADMIN', 'MASTER_USER', 'EXECUTE', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('SESSION_PRIVS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_USERS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_NETWORK_ACL_PRIVILEGES', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_NETWORK_ACLS', 'MASTER_USER', 'SELECT', true);
   exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY', 'MASTER_USER', 'SELECT', true);
   ```
**注記**  
上記のコマンドは、ORDS 22 以降に適用されます。

1. ダウンロードした `ords` スクリプトを使用して、ORDS スキーマをインストールします。設定ファイルとログファイルを格納するディレクトリを指定します。Oracle Corporation では、これらのディレクトリを ORDS 製品ソフトウェアが含まれているディレクトリ内に配置しないことを推奨しています。

   ```
   mkdir -p /home/apexuser/ords_config /home/apexuser/ords_logs
   
   /home/apexuser/ORDS/bin/ords \
     --config /home/apexuser/ords_config \
     install --interactive --log-folder /home/apexuser/ords_logs
   ```

   コンテナデータベース (CDB) アーキテクチャを実行する DB インスタンスでは、ORDS 23.3 以降を使用し、ORDS のインストール時に `--pdb-skip-disable-lockdown` 引数を渡します。

   ```
   /home/apexuser/ORDS/bin/ords \
     --config /home/apexuser/ords_config \
     install --interactive --log-folder /home/apexuser/ords_logs --pdb-skip-disable-lockdown
   ```

   プログラムが以下の情報のプロンプトを表示します。デフォルト値は角括弧で囲まれています。詳細については、Oracle ドキュメントの [Introduction to Oracle REST Data Services](https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/20.2/aelig/installing-REST-data-services.html#GUID-6F7B4E61-B730-4E73-80B8-F53299123730) を参照してください。
   + `Choose the type of installation:`

     **2** を選択して ORDS スキーマをデータベースにインストールし、ローカルの ORDS 設定ファイルにデータベース接続プールを作成します。
   + `Specify the database connection type to use. Enter number for [1] Basic [2] TNS [3] Custom URL:`

     目的の接続タイプを選択します。この例では、ユーザーが **1** を選択することを前提としています。
   + `Enter the name of the database server [localhost]:` ***DB\$1instance\$1endpoint***

     デフォルト値を選択するか、適切な値を入力します。
   + `Enter the database listener port [1521]:` ***DB\$1instance\$1port***

     デフォルト **1521** を選択するか、適切な値を入力します。
   + `Enter the database service name [orcl]:`

     RDS for Oracle DB インスタンスで使用するデータベース名を入力します。
   + `Provide database user name with administrator privileges`

      RDS for Oracle DB インスタンスのマスターユーザー名を入力します。
   + `Enter the database password for [username]:`

     RDS for Oracle DB インスタンスのマスターパスワードを入力します。
   + `Enter the default tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [SYSAUX]:`
   + `Enter the temporary tablespace for ORDS_METADATA [TEMP]. Enter the default tablespace for ORDS_PUBLIC_USER [USERS]. Enter the temporary tablespace for ORDS_PUBLIC_USER [TEMP].`
   + `Enter a number to select additional feature(s) to enable [1]:`
   + `Enter a number to configure and start ORDS in standalone mode [1]: `

      **2** を選択して ORDS をスタンドアロンモードですぐに起動しないようにします。
   + `Enter a number to select the protocol [1] HTTP`
   + `Enter the HTTP port [8080]:`
   + `Enter the APEX static resources location:`

     Oracle APEX インストールファイル (`/home/apexuser/apex/images`) へのパスを入力します。

1. Oracle APEX の `admin` ユーザーのパスワードを設定します。これを行うには、SQL\$1Plus を使用して DB インスタンスにマスターユーザーとして接続し、次のコマンドを実行します。

   ```
   1. EXEC rdsadmin.rdsadmin_util.grant_apex_admin_role;
   2. grant APEX_ADMINISTRATOR_ROLE to master;
   3. @/home/apexuser/apex/apxchpwd.sql
   ```

   `master` を自身のマスターユーザー名に置き換えます。`apxchpwd.sql` スクリプトによってプロンプトが表示されたら、新しい `admin` パスワードを入力します。

1. `ords` スクリプトで `serve` コマンドを使用して ORDS をスタンドアロンモードで実行します。実稼働環境へのデプロイでは、Apache Tomcat や Oracle WebLogic Server など、サポートされている Java EE アプリケーションサーバーの使用を検討します。詳細については、Oracle Database ドキュメントの「[Oracle REST Data Services のデプロイおよびモニター](https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/23.1/ordig/deploying-and-monitoring-oracle-rest-data-services.html#GUID-6791F5DF-AC67-4885-BFFA-B80964C17EC9)」を参照してください。

   ```
   /home/apexuser/ORDS/bin/ords \
     --config /home/apexuser/ords_config serve \
     --port 8193 \
     --apex-images /home/apexuser/apex/images
   ```

   ORDS が実行中でも Oracle APEX インストールにアクセスできない場合、次のエラーが (特に非 CDB インスタンスで) 表示されることがあります。

   ```
   The procedure named apex_admin could not be accessed, it may not be declared, or the user executing this request may not have been granted execute privilege on the procedure, or a function specified by security.requestValidationFunction configuration property has prevented access.
   ```

   このエラーを修正するには、`ords` スクリプトで `config` コマンドを実行して ORDS が使用するリクエスト検証機能を変更します。デフォルトでは、ORDS は CDB インスタンスでのみサポートされている `ords_util.authorize_plsql_gateway` プロシージャを使用します。非 CDB インスタンスでは、このプロシージャを `wwv_flow_epg_include_modules.authorize` パッケージに変更できます。ユースケースに応じてリクエスト検証関数を設定するためのベストプラクティスについては、Oracle Database のドキュメントと Oracle Support を参照してください。

1. ブラウザで Oracle APEX の管理ウィンドウに戻り、**[管理]** を選択します。次に、[**Application Express Internal Administration**] を選択します。認証情報を求められたら、以下の情報を入力します。
   + **User name** - `admin` 
   + **Password** - `apxchpwd.sql` スクリプトを使用して設定したパスワード。

   [**Login**] を選択し、その `admin` ユーザーの新しいパスワードを設定します。

これで、リスナーを使用する準備ができました。