Amazon Relational Database Service (Amazon RDS) for Oracle DB インスタンスで操作を実行すると、ORA-04088 エラーが発生します。
解決策
Amazon RDS for Oracle はマネージドサービスです。したがって、一部のアクションを実行できません。たとえば、SYS、SYSTEM、その他 Oracle が提供するその他の管理者アカウントにはアクセスできません。それらに関連するオブジェクトに対して DDL または GRANT 操作を実行することもできません。
Amazon RDS for Oracle では、RDSADMIN スキーマに DDL トリガーと GRANT トリガーが組み込まれています。これらのトリガーは、RDS for Oracle DB インスタンスで制限付き DDL、GRANT ステートメント、または保護された操作が発生したときに呼び出されます。SYS、SYSTEM、RDSADMIN、RDS_DATAGUARD、RDSSEC、DBSFWUSER は、Amazon RDS for Oracle の保護されたスキーマです。
ORA-04088 は、特定のトリガーが実行されたときに Oracle データベースで発生するランタイムエラーです。次の操作を実行しようとすると、ORA-04088 エラーが発生することがあります。
- カスタムトリガーを実行します。
- Oracle 用 Amazon RDS でサポートされていない操作を実行します。たとえば、identifier という名前のデータファイルを使用してテーブルスペースを作成することはできません。Amazon RDS は Oracle マネージドファイルのみをサポートしています。また、カスタムパスを使用してディレクトリを作成することはできません。詳細については、「Oracle DB インスタンスの一般的なデータベースタスクを実行する」を参照してください。
- DDL を Amazon RDS for Oracle の保護されたスキーマオブジェクトで実行します。(たとえば、保護されたスキーマ内のオブジェクトのテーブルドロップやパブリックシノニムの変更など。)
- データベースオブジェクトを作成または変更するダンプから、Amazon RDS for Oracle の保護されたスキーマへのインポート操作を実行します。
- FULL=Y を使用してデータポンプのインポートを実行します。
- Data Pump のダンプを使用してインポート操作を実行します。
- Amazon RDS for Oracle で GRANT コマンドを実行します。このコマンドは、特定の権限とロールに制限されています。たとえば、ALTER DATABASE、ALTER SYSTEM、GRANT ANY PRIVILEGE、DROP ANY DIRECTORY、GRANT ANY ROLE、CREATE ANY DIRECTORY に権限を付与することはできません。また、RDS_MASTER_ROLE を Amazon RDS for Oracle のユーザーまたはロールに付与することはできません。
- Database Activity Streams (DAS) が有効な場合は、監査ポリシーを変更するか、監査テーブルスペース AUDIT_TBS に DROP/ALTER を実行します。
ORA-04088 エラーを調査して解決する
次のトラブルシューティング手順を使用して、このエラーを調査して解決します。
カスタムトリガーによるエラーを解決する
作成したカスタムトリガーが原因でエラーが発生した場合は、関連する行番号を確認してから ORA-06512 エラーメッセージを確認します。この情報は、トリガーが動作しなかったかどうかを示します。原因を特定するためにカスタムトリガーのコードを確認し、それに応じて修正します。
Data Pump のインポート中に発生するエラーを解決する
Data Pump ダンプのインポート操作中に ORA-04088 エラーが発生した場合は、次のベストプラクティスを確認してください。
- フルモード (FULL=Y) ではインポートしないでください。スキーマまたはテーブルモードを使用して、特定のスキーマとオブジェクトをインポートします。AWS は Amazon RDS for Oracle の保護されたスキーマへのオブジェクトのインポートをサポートしていません。代わりに、remap を使用してオブジェクトを別のスキーマにインポートしてください。
- Oracle Data Pump のエクスポートパラメータ TRANSPORT_TABLESPACES、TRANSPORTABLE、または TRANSPORTABLE_CHECK を使用して作成したダンプファイルはインポートしないでください。RDS for Oracle DB インスタンスは、これらのダンプファイルのインポートをサポートしていません。代わりに、Oracle トランスポータブル表領域機能を使用して、セルフマネージド Oracle データベースから RDS for Oracle DB インスタンスにテーブルスペースのセットをコピーしてください。
- SYS、SYSTEM、RDSADMIN、RDSSEC、RDS_DATAGUARD に Oracle Scheduler オブジェクトを含むダンプファイルをインポートしないでください。Oracle Data Pumpを使用してオブジェクトをインポートする方法のガイダンスについては、「Oracle Data Pumpのベストプラクティス」を参照してください。
詳細については、「Oracle DBA 権限の制限」をご覧ください。