この項では、リクエストをルーティングして複数のデータベースに接続するようにOracle REST Data Servicesを構成する方法を説明し、その他の構成情報については、その他のドキュメント・ソースを参照します。
注意:
Oracle REST Data Servicesは、構成の変更を行った後に再起動する必要があります。アプリケーションを再起動する方法はアプリケーション・サーバーのマニュアルを参照してください。
トピック:
Oracle REST Data Servicesでは、複数のデータベースに接続する機能がサポートされています。この項では、リクエストを適切なデータベースにルーティングするための異なる戦略を説明します。
トピック:
Oracle REST Data Servicesは、リクエストを適切なデータベースにルーティングするための多数の異なる戦略をサポートしています。これらの戦略はすべて、リクエストURLを調べ、URLのどこかの一致に基づいてデータベースを選択することを利用しています。それは、リクエストURLの関連する部分をまとめるのに役立ちます。次のURLについて考えます。
https://www.example.com/ords/sales/f?p=1:1
このURLは、次のセクションで構成されています。
プロトコル: https
ホスト名: www.example.com
コンテキスト・ルート: /ords
コンテキスト・ルートは、アプリケーション・サーバー上のOracle REST Data Servicesがデプロイされている場所です。
リクエスト・パス: /sales/f?p=1.1
これは、リクエストURLのコンテキスト・ルートからの相対となる部分です。
異なるアプリケーションに対しては、リクエスト・パス内の特定の接頭辞またはリクエストURL全体の特定の接頭辞に基づいてリクエストをルーティングすることが重要です。
複数データベースを構成するには、次の2つの手順を行います。
データベース接続情報の構成
どのリクエストをどのデータベースにルーティングするかの構成
最初にOracle REST Data Servicesを構成するとき、apexという名前のデフォルトのデータベース接続を構成します。setupコマンドを使用して追加のデータベース接続を作成できます。
ヒント:
setupコマンドの完全なヘルプを表示するには、次のように入力します。
java -jar ords.war help setup
データベース接続を作成するには、次のように入力します。
java -jar ords.war setup --database <database name>
説明:
<database name>データベース接続に付ける名前です。
データベースを構成するために必要な情報を入力するように求められます。追加のデータベースを設定したあと、リクエストが適切なデータベースまでルーティングされる方法のルールを定義します。
map-urlコマンドを使用してリクエストのルーティング・ルールを作成します。
ヒント:
map-urlコマンドの完全なヘルプを表示するには、次のように入力します。
java -jar ords.war help map-url
URLのリクエスト・パスの一部の接頭辞の一致に基づいてリクエストをルーティングする場合は、map-urlコマンドを次のように使用します。
java -jar ords.war map-url --type base-path --workspace-id <workspace name> <path prefix> <database name>
説明:
<workspace name>この接続用のRESTfulサービスが定義されているOracle Application Expressワークスペースの名前です。RESTfulサービスを使用していない場合は省略できます。
<path prefix>は、必ずリクエスト・パスの先頭にある接頭辞です。
<database name>は、前の手順で設定したデータベース接続の名前です。
関連トピック
Oracle REST Data Servicesがexample.comという名前のシステムに/ordsというコンテキスト・パスでデプロイされているとすると、次のルールを作成します。
java -jar ords.war map-url --type base-path --workspace-id sales_rest /sales sales_db
このルールは、https://example.com/ords/sales/...に一致するすべてのリクエストがsales_dbというデータベース接続にルーティングされることを意味します。sales_dbデータベースに定義されているsales_restワークスペースで、RESTfulサービスの定義が検索されます。
前述のルールは、次のすべてのリクエストと一致します。
https://example.com/ords/sales/f?p=1:1
https://example.com/ords/sales/leads/
https://www.example.com/ords/sales/forecasting.report?month=jan (If www.example.com resolves to the same system as example.com.)
前述のルールは、次のリクエストのいずれにも一致しません。
http://example.com/ords/sales/f?p=1:1 (The protocol is wrong.) https://example.com:8080/ords/sales/f?p=1:1 (The port is wrong: 443 is default for https, but don't specify if using default.) https://example.com/ords/f?p=1:1 (Missing the /sales prefix.) https://example.com/pls/sales/leads/ (The context path is wrong.)
リクエストURLの接頭辞の一致に基づいてリクエストをルーティングする場合は、map-urlコマンドを次のように使用します。
java -jar ords.war map-url --type base-url --workspace-id <workspace name> <url prefix> <database name>
説明:
<workspace name>この接続用のRESTfulサービスが定義されているOracle Application Expressワークスペースの名前です。RESTfulサービスを使用していない場合は省略できます。
<url prefix>は、リクエストURLの先頭に必要な接頭辞です。
<database name>は、データベース接続の名前です。
Oracle REST Data Servicesがexample.comという名前のシステムに/ordsというコンテキスト・パスでデプロイされているとすると、次のルールを作成します。
java -jar ords.war map-url --type base-url --workspace-id sales_rest https://example.com/ords/sales sales_db
このルールは、https://example.com/ords/sales/...に一致するすべてのリクエストがsales_dbというデータベース接続にルーティングされることを意味します。sales_dbデータベースに定義されているsales_restワークスペースで、RESTfulサービスの定義が検索されます。
前述のルールは、次のすべてのリクエストと一致します。
https://example.com/ords/sales/f?p=1:1 https://example.com/ords/sales/leads/ https://example.com/ords/sales/forecasting.report?month=jan
前述のルールは、次のリクエストのいずれにも一致しません。
http://example.com/ords/sales/f?p=1:1 (The protocol is wrong.) https://example.com:8080/ords/sales/f?p=1:1 (The port is wrong: 443 is default for https, but don't specify if using default.) https://example.com/ords/f?p=1:1 (Missing the /sales segment of the base URL.) https://example.com/pls/sales/leads/ (The context path is wrong.) https://www.example.com/ords/sales/forecasting.report?month=jan (The host name is wrong.)
この項では、Oracle Database 12cマルチテナント・アーキテクチャで導入されるプラガブル・データベースのコピーおよび移動に関連するインストールの選択項目と様々な使用例について、Oracle REST Data Servicesに関連付けて説明します。
Oracle Database 12cリリース1 (12.1)では、マルチテナント・アーキテクチャが導入されています。このデータベース・アーキテクチャには、ルート・コンテナCDB$ROOT、シード・データベースPDB$SEEDおよび複数のプラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)が含まれます。PDBは、ユーザーおよびアプリケーションからは、非CDBであるかのように見えます。各PDBは、Oracle Databaseリリース11gの個別のデータベース・インスタンスに相当します。
ルート・コンテナCDB$ROOTは、メタデータ・リンクまたはオブジェクト・リンクを使用してすべてのPDBにアクセス可能な共通オブジェクトを保持します。シード・データベースPDB$SEEDは、新しいプラガブル・データベースをシードするために新しいPDBを作成する際に使用されます。Oracle Database 12cマルチテナント・アーキテクチャの主なメリットは、CPUやメモリーなどのデータベース・リソースをすべてのPDBで共有できることです。また、このアーキテクチャでは、アップグレード、パッチ、バックアップなどのタスクにおいて、複数のデータベースを1つのデータベースとして扱うことができます。
Oracle REST Data Servicesを、マルチテナント・データベースの1つ以上のプラガブル・データベースPDBまたはコンテナ・データベース(CDB)にインストールできます。インストールの選択項目を次に示します。
すべてのPDBでOracle REST Data Servicesの同じバージョンを有効にする場合には、CDBにインストールします。この項の残りの説明はCDBへのインストールを示します。
一部のPDBのみがOracle REST Data Servicesを使用できるようにするには、または別々のPDBが別々のバージョンのOracle REST Data Servicesを使用するようにするには、目的のPDBにインストールします。(非CDBでも同じプロシージャを使用します。)
Oracle REST Data ServicesがCDBにインストールされている場合、ルート・コンテナ、シード・コンテナおよび任意の既存PDBにインストールされています。ルート・コンテナ(CDB$ROOT)には、Oracle REST Data Servicesパッケージ、ファンクション、プロシージャ、ビューなどの一般的なデータベース・オブジェクトを格納するORDS_METADATAスキーマが含まれます。Oracle REST Data Servicesのパブリック・ユーザー(ORDS_PUBLIC_USER)も含まれます。
シード・コンテナ(PDB$SEED)には、ORDS_METADATAスキーマおよびOracle REST Data Servicesパブリック・ユーザーが含まれます。新しいPDBを作成するには、PDB$SEEDをコピーし、CDB$ROOT内のORDS_METADATAスキーマの一般的なデータベース・オブジェクトにメタデータ・リンクを作成します。そのため、Oracle REST Data Services表の複数のコピーがあり、Oracle REST Data Servicesパッケージ、機能、プロシージャ、ビューの単一のコピーのみがあります。このように、各PDBにはORDS_METADATAスキーマとそれ自体のOracle REST Data Services表のコピーがあるため、Oracle REST Data ServicesアプリケーションのメタデータをそのPDB内に保持できます。各PDBには固有のOracle REST Data Servicesパブリック・ユーザーもあります。
『Oracle Database管理者ガイド』のシードを使用したPDBの作成に関する項も参照してください。
すべてのPDBを1つのマルチテナント環境に入れて、Oracle REST Data Servicesの同じリリースとパッチ・セットを使用するにはCDBにインストールします。(この選択をすると、別々のPDBでOracle REST Data Servicesの別々のリリースを使用することを許可しません。)
CDBにインストールする前に次を確認します。
PDBが読取り/書込みモードでオープン(マウント済またはクローズ済ではない)であることを確認します(PDB$SEED以外。これは読取り専用モードのままです)。『Oracle Database管理者ガイド』のPDBのオープン・モードの変更に関する項を参照してください。
デフォルトの表領域および一時表領域がORDS_METADATAによって使用され、ORDS_PUBLIC_USERユーザーが存在し、表領域名がわかっていることを確認します。インストール・プロシージャはそれらのユーザーを作成しますが、表領域は作成しません。
ORDS_METADATAおよびORDS_PUBLIC_USERもシード・コンテナにインストールされ、デフォルトの表および一時表がPDB$SEEDに存在する必要があります。これらの表領域がそこに存在しない場合には、PDB$SEEDに表領域を作成します。『Oracle Database管理者ガイド』のCDBでのオラクル社が提供するSQLスクリプトの実行に関する項を参照してください。
Oracle REST Data ServicesをCDBにインストールするには、次の手順を実行します。
Oracle REST Data Servicesのインストール・キットを解凍したフォルダに移動します。
次のコマンドを入力します。
java -jar ords.war install advanced
注意:
プラガブル・マッピング機能を使用するには、「Oracle REST Data Servicesによって、すべてのPDBをアドレス可能にする(プラガブル・マッピング)」を参照してください。
プロンプトが表示されたら、CDBのデータベース接続情報を入力します。
Enter the name of the database server [localhost]: Enter the database listen port [1521]: Enter 1 to specify the database service name, or 2 to specify the database SID [1]: Enter the database service name: (for example, cdb.example.com)
Oracle REST Data Servicesのインストールを検証します。
Enter 1 if you want to verify/install Oracle REST Data Services schema or 2 to skip this step [1]:
受け入れるか、1 (デフォルト)を入力して、CDBとそのPDBすべてにOracle REST Data Servicesをインストールします。
ORDS_PUBLIC_USERのパスワードを入力して確認します。
Enter the database password for ORDS_PUBLIC_USER: Confirm password:
入力を求めるメッセージが表示されたら、必要に応じて追加情報を入力します。(「コマンドライン・プロンプトを使用した拡張インストール」を参照してください。)
関連トピック
Oracle REST Data Servicesの新しいリリースを使用する場合、簡易または詳細インストールを実行すると、CDBおよびそのプラガブル・データベース(PDB)でのOracle REST Data Servicesのスキーマのアップグレードが自動的に発生します。
次に例を示します。
java -jar ords.war
Oracle REST Data Servicesがすでにインストールまたはアップグレードされている場合は、メッセージにOracle REST Data Servicesスキーマ・バージョンが表示され、情報の入力を要求されません。
エラーが発生した場合には、ログファイルを確認します。
プラガブル・マッピングは、CDB内のすべてのPDBをOracle REST Data Servicesによってアドレス可能にする機能を示します。この機能を使用するには、この項の指示に従ってください。
Oracle REST Data Services構成ファイルにdb.serviceNameSuffixパラメータが含まれている場合、これはOracle REST Data ServicesプールがCDBを指し、そのCDBに接続されているPDBをOracle REST Data Servicesによってアドレス可能にすることを示しています。
db.serviceNameSuffixパラメータの値は、データベースのDB_DOMAINデータベース初期化パラメータの値と一致している必要があり、ピリオド(.)で始まる必要があります。db.serviceNameSuffixパラメータの値を設定するには、次の手順を実行します。
SQL*Plusで、SYSDBA権限を持つユーザーとしてルートに接続します。
DB_DOMAINデータベース初期化パラメータの値を確認します。
SQL> show parameter DB_DOMAIN
SQL*Plusを終了します。
SQL> exit
DB_DOMAIN値が空ではない場合、コマンドラインでdb.serviceNameSuffixパラメータのキーと値およびそのDB_DOMAINを作成するコマンドを入力します。これは、このエントリをOracle REST Data Servicesの構成ファイルに追加するために使用されます。
echo db.serviceNameSuffix=.value-of-DB_DOMAIN > snsuffix.properties
たとえば、DB_DOMAINがexample.comに設定されている場合、次を入力します。
echo db.serviceNameSuffix=.example.com > snsuffix.properties
db.serviceNameSuffixパラメータ値が定義されていない場合、次の形式でコマンドを入力して構成ファイルにエントリを追加します。
java -jar ords.war set-properties --conf pool-name snsuffix.properties
ここで、pool-nameは次のいずれかになります。
PL/SQLゲートウェイ構成のpoolName
Oracle REST Data Services RESTful Services構成のpoolName_pu
Application Express RESTfulサービス構成のpoolName_rt
例1: CDBのPDBをグローバルでアドレス可能にします。次のコマンドを入力してdefaultsを指定します。
java -jar ords.war set-properties --conf defaults snsuffix.properties
注意:
ほとんどのユース・ケースでは、例1で示した方法(すべてのプールのプロパティをdefaults.xmlファイルを使用して設定)が最も適しています。
例2: CDBのPDBをPL/SQLゲートウェイにアドレス可能にし、プール名をapexにします。次のコマンドを入力します。
java -jar ords.war set-properties --conf apex snsuffix.properties
たとえば、apexによって指定されているデータベースにexample.comのDB_DOMAIN値があり、2つのPDB(pdb1.example.comおよびpdb2.example.com)がある場合、最初のPDBはパスが/ords/pdb1/で始まるURLにマップされ、2番目のPDBはパスが/ords/pdb2/で始まるURLにマップされます。
例3: CDBのPDBをOracle REST Data Services RESTfulサービスにアドレス可能にし、プール名をapex_puにします。次のコマンドを入力します。
java -jar ords.war set-properties --conf apex_pu snsuffix.properties
例4: CDBのPDBをApplication Express RESTfulサービスにアドレス可能にし、プール名をapex_rtにします。次のコマンドを入力します。
java -jar ords.war set-properties --conf apex_rt snsuffix.properties
Oracle REST Data Servicesは、Oracle Real Application Clusters (Oracle RAC)のFast Connection Failover (FCF)機能をサポートします。
Oracle REST Data Servicesは、WebLogic、Tomcat、GlassFishなど、サポートするすべてのApplication Server環境でUniversal Connection Pool (UCP)とともに実行されます。また、UCPはFast Connection Failoverをサポートします。FCFを有効化するには、Oracle Notification Service (ONS)が有効化されている必要があります。ONSを有効化するには、次のコード・スニペットに示すように、Oracle REST Data Services defaults.xml構成ファイルにあるプロパティのリストにエントリを追加します。
<entry key="jdbc.enableONS">true</entry> <entry key= "jdbc.ONSConfig">nodes=racnode1:4200,racnode2:4200\nwalletfile=/oracle11/onswalletfile</entry>
<entry key="db.connectionType">customurl</entry> <entry key="db.customURL">jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)(ADDRESS_LIST= (LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=prod_scan.example.com)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=ISPRD)))|</entry>
defaults.xml構成ファイルを更新した後、Oracle REST Data Servicesを再起動するまで変更は有効になりません。
計画外の停止: RACはインスタンス障害を検出するとFAN Downイベントを生成し、それをFCFが捕捉します。 FCFは失敗したインスタンスへのすべての接続を終了し、それ以降のすべてのリクエストを、残っているRACインスタンスに送ります。
計画的な停止: たとえば、データベース管理者(DBA)が、一部のメンテナンス・アクティビティを実行するためにRACインスタンスを正常にシャットダウンすることがあります。インスタンス・シャットダウンはFAN Planned Downイベントを生成し、それをFCFが捕捉します。 続いてFCFはすべての新しいリクエストを他のRACインスタンスに送り、現在アクティブなトランザクションを排出するか完了させます。
注意:
長い間実行されているトランザクションは、強制終了が必要な場合があります。セキュリティ、キャッシュ、前処理と後処理、環境およびExcel設定の構成は、「SQL Developerを使用したOracle REST Data Servicesの管理(オプション)」を参照してください。
この項では、REST対応SQLサービスを構成する方法について説明します。
注意:
REST対応SQLサービスを有効にすると、Oracle RESTデータ・サービス対応のデータベース・スキーマに対する認証が有効になります。これにより、データベース・パスワードを使用して、データベース・スキーマがHTTPS経由でアクセス可能になります。Oracleでは、強力かつ安全なデータベース・パスワードを指定することをお薦めしますOracle REST Data Servicesの構成ファイルが保存されているフォルダを検索します。
defaults.xmlファイルを開き、<entry key="restEnabledSql.active">true</entry>を追加します。
ファイルを保存します。
Oracle REST Data Servicesを再起動します。
Oracle REST Data Servicesの構成ファイルが保存されているフォルダを検索します。
defaults.xmlファイルを開き、misc.pagination.maxRowsパラメータの値を次のように更新します。<entry key="misc.pagination.maxRows">1500</entry>
注意:
misc.pagination.maxRowsのデフォルト値は500です。ファイルを保存します。
Oracle REST Data Servicesを再起動します。
この項では、Oracle REST Data Servicesにより生成されたエラー・ページではなく、カスタム・エラー・ページを構成する方法について説明します。
カスタム・エラー・ページを構成するには、次の手順を実行します。
Oracle REST Data Servicesの構成ファイルが保存されているフォルダを検索します。
defaults.xmlファイルを開き、error.externalPathパラメータの値を更新します。
<entry key="error.externalPath">/path/to/error/pages/folder/</entry>
説明:
/path/to/error/pages/folderは、エラー・ページを定義するファイルが格納されているフォルダのパスです。ファイルは、{status}.html形式で格納されます。
ここで、{status}は、カスタム・エラー・ページを作成するHTTPステータス・コードです。
ファイルを保存します。
Oracle REST Data Servicesを再起動します。
例2-1 HTTP 404ステータス・コードのカスタム・エラー・ページの構成
「HTTP 404 – Not Found」ステータスのカスタム・エラー・ページを構成するには、次の手順を実行します。
404.htmlという名前のファイルを作成します。
/usr/local/share/ords/error-pages/フォルダに保存します。
/usr/local/share/ords/errro-pages/フォルダを指すように、error.externalPathパラメータを構成します。
ファイルを保存します。
Oracle REST Data Servicesを再起動します。
Oracle REST Data Servicesで使用するRESTfulサービスを開発する方法の詳細は、「Oracle REST Data Servicesアプリケーションの開発」を参照してください。