

# Oracle Java Virtual Machine
<a name="oracle-options-java"></a>

Amazon RDS は、`JVM` オプションを使用することで Oracle Java Virtual Machine (JVM) をサポートします。Oracle Java では、SQL スキーマと関数が提供され、Oracle データベース内で Oracle Java の機能を活用できます。詳細については、Oracle ドキュメントの「[Oracle Database における Java の概要](https://docs.oracle.com/database/121/JJDEV/chone.htm)」を参照してください。Oracle JVM は、Oracle Database 21c (21.0.0) および Oracle Database 19c (19.0.0) のすべてのバージョンで使用できます。

## Oracle JVM に関する考慮事項
<a name="oracle-options-java.considerations"></a>

Amazon RDS の Java 実装のアクセス許可セットは制限されています。マスターユーザーには `RDS_JAVA_ADMIN` ロールが付与されます。このロールでは、`JAVA_ADMIN` ロールによって付与される特権のサブセットを付与します。`RDS_JAVA_ADMIN` ロールに付与される特権を一覧表示するには、DB インスタンスで次のクエリを実行します。

```
SELECT * FROM dba_java_policy 
   WHERE grantee IN ('RDS_JAVA_ADMIN', 'PUBLIC') 
   AND enabled = 'ENABLED' 
   ORDER BY type_name, name, grantee;
```

## Oracle JVM の前提条件
<a name="oracle-options-java.prerequisites"></a>

Oracle Java を使用するための前提条件は次のとおりです。
+ DB インスタンスが十分な大きさのクラスである必要があります。Oracle Java は、db.t3.small DB インスタンスクラスではサポートされていません。詳細については、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。
+ DB インスタンスで [**マイナーバージョン自動アップグレード**] が有効になっている必要があります。このオプションにより、リリースされた DB エンジンのマイナーバージョンアップグレードが、自動的に DB インスタンスに適用されるようになります。Amazon RDS では、このオプションを使用して、DB インスタンスに対し最新の Oracle パッチセット更新 (PSU)、またはリリース更新 (RU) を行います。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

## Oracle JVM のベストプラクティス
<a name="oracle-options-java.best-practices"></a>

Oracle Java を使用するためのベストプラクティスは次のとおりです。
+ セキュリティを最大にするためには、`JVM` オプションを Secure Sockets Layer (SSL) で使用します。詳細については、「[Oracle Secure Sockets Layer](Appendix.Oracle.Options.SSL.md)」を参照してください。
+ ネットワークアクセスを制限するように、DB インスタンスを設定します。詳細については、「[VPC の DB インスタンスにアクセスするシナリオ](USER_VPC.Scenarios.md)」および「[VPC 内の DB インスタンスの使用](USER_VPC.WorkingWithRDSInstanceinaVPC.md)」を参照してください。
+ 次の条件を満たす場合は、TLSv1.2 をサポートするように HTTPS エンドポイントの設定を更新します。
  + Oracle Java Virtual Machine (JVM) を使用して、TLSv1 または TLSv1.1 プロトコルを介して HTTPS エンドポイントを接続します。
  + エンドポイントは TLSv1.2 プロトコルをサポートしていません。
  + 2021 年 4 月リリースの更新を Oracle DB に適用していません。

  エンドポイント設定を更新することで、HTTPS エンドポイントへの JVM の接続が確実に引き続き機能するようにします。Oracle JRE および JDK の TLS の変更の詳細については、[Oracle JRE and JDK Cryptographic Roadmap](https://java.com/en/jre-jdk-cryptoroadmap.html) を参照してください。

## Oracle JVM オプションの追加
<a name="oracle-options-java.add"></a>

DB インスタンスに `JVM` オプションを追加する一般的な手順は以下のとおりです。

1. 新しいオプショングループを作成するか、既存のオプショングループをコピーまたは変更します。

1. オプショングループに [] オプションを追加します。

1. オプショングループを DB インスタンスに関連付けます。

`JVM` オプションが追加されるあいだ、短い停止が発生します。オプションを追加した後に DB インスタンスを再起動する必要はありません。オプショングループがアクティブになると、すぐに Oracle Java が使用可能となります。

**注記**  
この停止中、パスワード検証機能は一時的に無効になります。また、停止中にパスワード検証機能に関連するイベントを確認することもできます。Oracle DB インスタンスが使用可能になる前に、パスワード検証機能が再び有効になります。

**JVM オプションを DB インスタンスに追加するには**

1. 使用するオプショングループを決定します。新しいオプショングループを作成することも、既存のオプショングループを使用することもできます。既存のオプショングループを使用する場合は、次のステップは飛ばしてください。または、次の設定でカスタム DB オプショングループを作成します。
   + [**Engine (エンジン)**] に、DB インスタンスによって使用される DB エンジン ([**oracle-ee**]、[**oracle-se**]、[**oracle-se1**]、または [**oracle-se2**]) を選択します。
   + [**メジャーエンジンのバージョン**] で、DB インスタンスのバージョンを選択します。

   詳細については、「[オプショングループを作成する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)」を参照してください。

1. オプショングループに [**JVM**] オプションを追加します。オプションの追加方法の詳細については、「[オプショングループにオプションを追加する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)」を参照してください。

1. 新規または既存の DB インスタンスに、DB オプショングループを適用します。
   + 新しい DB インスタンスの場合は、インスタンスを起動するときにオプショングループを適用します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
   + 既存の DB インスタンスの場合は、インスタンスを修正し、新しいオプショングループを添付することで、オプショングループを適用します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

1. ユーザーに必要なアクセス権限を付与します。

   Amazon RDS マスターユーザーには、`JVM` オプションを使用するアクセス許可がデフォルトで付与されています。他のユーザーがこれらのアクセス許可を必要とする場合は、SQL クライアントのマスターユーザーとして DB インスタンスに接続し、そのユーザーにアクセス許可を付与します。

   次の例では、`JVM` オプションを使用するアクセス許可を `test_proc` ユーザーに付与しています。

   ```
   create user test_proc identified by password;
   CALL dbms_java.grant_permission('TEST_PROC', 'oracle.aurora.security.JServerPermission', 'LoadClassInPackage.*', '');
   ```
**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

   ユーザーにアクセス許可が付与されると、次のクエリで出力が返されます。

   ```
   select * from dba_java_policy where grantee='TEST_PROC';
   ```
**注記**  
Oracle ユーザー名では大文字と小文字が区別され、通常すべて大文字が使用されます。

## Oracle JVM オプションの削除
<a name="oracle-options-java.remove"></a>

DB インスタンスから `JVM` オプションを削除できます。オプションが削除されるあいだ、短い停止が発生します。`JVM` オプションを削除した後に DB インスタンスを再起動する必要はありません。

**警告**  
 `JVM` オプションを削除すると、DB インスタンスがオプションの一部として有効であったデータ型を使用している場合、データ損失が発生する可能性があります。続行する前にデータをバックアップしてください。詳細については、「[データのバックアップ、復元、エクスポート](CHAP_CommonTasks.BackupRestore.md)」を参照してください。

`JVM` オプションを DB インスタンスから削除するには、次のいずれかを実行します。
+ `JVM` オプションを所属するオプショングループから削除します。この変更はそのオプショングループを使用するすべての DB インスタンスに影響します。詳細については、「[オプショングループからオプションを削除する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)」を参照してください。
+ DB インスタンスを修正して、`JVM` オプションが含まれない別オプショングループを指定します。この変更は、単一の DB インスタンスに影響します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。