我在 Amazon Relational Database Service (Amazon RDS) for Oracle 数据库实例上执行操作时出现 ORA-04088 错误。
解决方法
Amazon RDS for Oracle 是一项托管服务。这意味着有些操作是您无法执行的。例如,您无法访问 Oracle 提供的 SYS、SYSTEM 和其他管理账户。您也不能对它们的相关对象执行 DDL 或 GRANT 操作。
Amazon RDS for Oracle 在 RDSADMIN 架构下内置了 DDL 和 GRANT 触发器。当 RDS for Oracle 数据库实例上出现任何受限 DDL、GRANT 语句或受保护操作时,将调用这些触发器。SYS、SYSTEM、RDSADMIN、RDS_DATAGUARD、RDSSEC 和 DBSFWUSER 是 Amazon RDS for Oracle 受保护架构。
ORA-04088 为运行时错误,在特定触发器运行时发生在 Oracle 数据库中。如果您尝试执行以下操作,可能会看到 ORA-04088 错误:
- 运行自定义触发器。
- 运行 Amazon RDS for Oracle 不支持的操作。例如,您不能使用名为标识符的数据文件创建表空间。Amazon RDS 仅支持 Oracle 管理的文件。此外,您不能使用自定义路径创建目录。有关详细信息,请参阅为 Oracle 数据库实例执行常见数据库任务。
- 在 Amazon RDS for Oracle 受保护的架构对象上运行 DDL。这包括删除表和修改受保护架构中对象的公共同义词。
- 从转储中执行导入操作,将数据库对象创建或修改到 Amazon RDS for Oracle 受保护架构中。
- 使用 FULL=Y 运行数据泵导入。
- 使用数据泵转储来执行导入操作。
- 在 Amazon RDS for Oracle 上运行 GRANT 命令。此命令仅限于某些权限和角色。例如,您无法授予诸如 ALTER DATABASE、ALTER SYSTEM、GRANT ANY PRIVILEGE、DROP ANY DIRECTORY、GRANT ANY ROLE 或 CREATE ANY DIRECTORY 等权限。此外,您无法向您的 Amazon RDS for Oracle 用户或角色授予 RDS_MASTER_ROLE。
- 当数据库活动流 (DAS) 打开时,修改审核策略或 DROP/ALTER 审核表空间 AUDIT_TBS。
调查并解决 ORA-04088 错误
使用以下故障排除步骤来调查和解决此错误。
解决由自定义触发器引起的错误
如果错误是由您创建的自定义触发器引起的,请检查相关的行号,然后是 ORA-06512 错误消息。此信息表明触发器是否无法运行。要确定原因,请查看自定义触发器的代码,然后进行相应的修复。
解决数据泵导入期间发生的错误
如果在数据泵转储导入操作期间出现 ORA-04088 错误,请查看以下最佳实践:
- 不要以完整模式导入 (FULL=Y)。使用架构或表模式导入特定的架构和对象。AWS 不支持将对象导入到 Amazon RDS for Oracle 受保护架构中。请使用重新映射将对象导入到另一个架构。
- 不要导入使用 Oracle Data Pump 导出参数 TRANSPORT_TABLESPACES、TRANSPORTABLE 或 TRANSPORT_FULL_CHECK 创建的转储文件。RDS for Oracle 数据库实例不支持导入这些转储文件。请使用 Oracle transportable tablespaces feature 将一组表空间从自主管理型 Oracle 数据库复制到 RDS for Oracle 数据库实例。
- 不要在 SYS、SYSTEM、RDSADMIN、RDSSEC 和 RDS_DATAGUARD 中导入包含 Oracle 调度器对象的转储文件。有关如何使用 Oracle Data Pump 导入对象的指南,请参阅 Oracle Data Pump 最佳实践。
有关详细信息,请查看 Oracle DBA 权限的限制。