

# Oracle Java 虚拟机
<a name="oracle-options-java"></a>

Amazon RDS 通过使用 `JVM` 选项来支持 Oracle Java 虚拟机 (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` 角色的权限，请在您的数据库实例上运行以下查询：

```
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.t3.small 数据库实例类不支持 Oracle Java。有关更多信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。
+ 数据库实例必须已启用**自动次要版本升级**。此选项使您的数据库实例在次要数据库引擎版本升级可用时自动接收该升级。Amazon RDS 使用该选项将数据库实例更新为最新的 Oracle 补丁集更新（PSU）或版本更新（RU）。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

## Oracle JVM 的最佳实践
<a name="oracle-options-java.best-practices"></a>

以下是使用 Oracle Java 的最佳实践：
+ 为了实现最高安全性，可将 `JVM` 选项与安全套接字层 (SSL) 结合使用。有关更多信息，请参阅“[Oracle 安全套接字层](Appendix.Oracle.Options.SSL.md)”。
+ 配置您的数据库实例以限制网络访问。有关更多信息，请参阅“[在 VPC 中访问数据库实例的场景](USER_VPC.Scenarios.md)”和“[在 VPC 中使用数据库实例](USER_VPC.WorkingWithRDSInstanceinaVPC.md)”。
+ 如果您满足以下条件，请更新 HTTPS 终端节点的配置以支持 TLSv1.2：
  + 您可以使用 Oracle Java 虚拟机 (JVM) 通过 TLSv1 或 TLSv1.1 协议连接 HTTPS 终端节点。
  + 您的终端节点不支持 TLSv1.2 协议。
  + 您尚未将 2021 年 4 月版本更新应用于 Oracle 数据库。

  通过更新终端节点配置，您可以确保 JVM 与 HTTPS 终端节点的连接将继续有效。有关 Oracle JRE 和 JDK 中 TLS 更改的更多信息，请参阅 [Oracle JRE 和 JDK 加密路线图](https://java.com/en/jre-jdk-cryptoroadmap.html)。

## 添加 Oracle JVM 选项
<a name="oracle-options-java.add"></a>

下面是将 `JVM` 选项添加到数据库实例的一般过程：

1. 创建新的选项组，或者复制或修改现有选项组。

1. 将 选项添加到该选项组。

1. 将选项组与数据库实例相关联。

添加 `JVM` 选项后，将出现短暂中断。在添加 选项后，您无需重新启动数据库实例。在选项组处于活动状态后，Oracle Java 将立即可用。

**注意**  
在该中断期间，将短暂禁用密码验证功能。您还可能会在中断期间看到与密码验证功能相关的事件。在 Oracle 数据库实例变得可用之前，将再次启用密码验证功能。

**将 JVM 选项添加到数据库实例**

1. 确定您要使用的选项组。您可以创建新的选项组，或使用现有选项组。如果您想使用现有选项组，请跳到下一步。或者，通过以下设置创建自定义数据库选项组：
   + 对于**引擎**，选择数据库实例使用的数据库引擎（**oracle-ee**、**oracle-se**、**oracle-se1** 或 **oracle-se2**）。
   + 对于**主引擎版本**，选择数据库实例的版本。

   有关更多信息，请参阅“[创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)”。

1. 将 **JVM** 选项添加到该选项组。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 将选项组应用到新的或现有的数据库实例：
   + 对于新数据库实例，请在启动实例时应用选项组。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
   + 对于现有数据库实例，请修改实例并附加新的选项组以应用选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

1. 为用户授予所需的权限。

   默认情况下，Amazon RDS 主用户具有使用 `JVM` 选项的权限。如果其他用户需要具有这些权限，请在 SQL 客户端中以主用户身份连接到数据库实例，并为用户授予这些权限。

   以下示例为 `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>

您可以从数据库实例中删除 `JVM` 选项。删除该选项后，将出现短暂中断。删除 `JVM` 选项后，您无需重新启动数据库实例。

**警告**  
 如果数据库实例使用的是在选项中启用的数据类型，则删除 `JVM` 选项会导致数据丢失。请先备份数据，然后再继续。有关更多信息，请参阅“[备份、还原和导出数据](CHAP_CommonTasks.BackupRestore.md)”。

要从数据库实例中删除 `JVM` 选项，请执行下列操作之一：
+ 从 `JVM` 选项所属的选项组中删除该选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息，请参阅“[从选项组中删除选项](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)”。
+ 修改数据库实例并指定不包含 `JVM` 选项的另一个选项组。此更改会影响单个数据库实例。您可以指定默认 (空) 选项组，或指定其他自定义选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。