Support for Customer User Actions
Exadata Fleet Update now supports customer-defined "user actions" during database (DB) and Grid Infrastructure (GI) patching on Oracle Exadata Database Service on Dedicated Infrastructure (ExaDB-D) and Exadata Cloud@Customer (ExaDB-C@C).
This new capability lets you integrate pre- and post-apply scripts into the patch workflow, so you can meet environment-specific requirements such as creating restore points, running utlrp.sql, or capturing configuration backups without modifying your existing operational frameworks.
What’s in It for You
- Preserve your processes: Continue using your existing automation and compliance steps while Exadata Fleet Update manages patching.
- Custom integration points: Insert scripts at deterministic points before and after patch apply.
- Targeted scope: Apply scripts to DB or GI patching, and optionally restrict by major version (12, 19, 23).
- Consistent execution: Ensure scripts run reliably across every node involved in the patch cycle.
How It Works
- Opt-in model: Place a
useractions.zipfile in/u02/efu/on the target domU(s). - Automatic detection: Exadata Fleet Update extracts the zip to
/var/opt/oracle/managed/fppua(owned byoracle:oinstall, mode 750) and prevents unsafe concurrent overwrites. - Execution points: Scripts run sequentially per node/instance at pre-apply and post-apply stages.
- Error handling: Non-zero exit codes fail the job; use exit 0 if you don’t want to block patching.
Key Concepts
- Useractions: Your custom scripts or plugins.
- Action points:
- DB patching: Pre (before instance restart) and Post (after restart).
- GI patching: Pre (before CRS prepatch) and Post (after CRS postpatch).
- Target types:
dborgi. - Version scoping: Apply scripts to specific major versions (12, 19, 23).
User Action Input Arguments
To facilitate custom user action script development, Exadata Fleet Update passes the following input arguments to user action scripts. These arguments can be used by the scripts to perform the required actions.
Table 4-1 User Action Input Arguments
| Argument passed to the script | Example value |
|---|---|
RHP_OPTYPE |
MOVE_DATABASE / MOVE_GIHOME |
RHP_PHASE |
PRE / POST |
RHP_SOURCEPATH |
<Source DB home> / <Source Grid Infrastructure home> |
RHP_DESTINATIONPATH |
<Patched DB home> / <Destination Grid Infrastructure home> |
RHP_DBNAME |
Database name, for example, orcl.
|
RHP_VERSION |
Database or GI home version, for example, 19.0.0.0.0. |
RHP_NODES |
Nodes in the batch, for example, phxdbfza26 phxdbfza17.
|
RHP_EXEC_NODE |
Node on which currently being executed, for example, phxdbfza17.
|
RHP_CLIENT |
Target cluster name, for example, raccluster.
|
RHP_TARGETNODE |
Target node of the cluster, fro example, phxdbfza17.
|
Enabling User Actions
- Prepare zip: Create
/u02/efu/useractions.zip, owned byoracle:oinstall(750). - Structure scripts:
- Place under
db/orgi/directories. - Follow naming convention:
db/fppua1_pre_apply.sh db/fppua1_post_apply.sh db/19/fppua1_pre_apply.sh gi/fppua2_post_apply.sh - Use numeric prefix (
nn) for ordering.
- Place under
Execution Behavior
- Ordering:
fppua1_*→fppua2_*→fppua3_*… - Timeout: 30 minutes per script.
- User contexts:
- DB scripts run as DB owner (
oracle). - GI scripts run as CRS user.
- DB scripts run as DB owner (
- Arguments passed: Environment variables such as
RHP_PHASE (PRE/POST),RHP_DBNAME,RHP_VERSION,RHP_EXEC_NODE, and others are provided to your scripts.
Best Practices
- Make scripts idempotent and safe for retries.
- Validate environment variables before execution.
- Log clearly with timestamps, node, and DB identifiers.
- Use exit 0 for non-blocking conditions.
- Keep operations lightweight (under 30 minutes).
- Avoid interactive prompts or external dependencies.
- Test in non-production environments before rollout.
Troubleshooting
- PRGH-1024: Script returned non-zero; fix script or ensure exit 0.
- PRCZ-4001/2103: Command failed to execute as oracle; check ownership/permissions.
- PRGT-496: Useractions ignored due to incorrect permissions.
- No execution: Verify feature flag, zip ownership, size (<10 MB), and structure.
- Timeouts: Split or optimize long-running scripts.
Security and Compliance
- Scripts run with the same privileges as DB (
oracle) or GI (CRSuser) owners. - Strict permissions (
oracle:oinstall 750) are enforced; misconfigured zips are ignored. - No new identities or privileged escalations are introduced.
- Review script output for sensitive information before allowing it into job logs.
Summary
Exadata Fleet Update user actions provide a controlled and secure extension mechanism for DB and GI patching on ExaDB-D and ExaDB-C@C. With a lightweight, zip-based approach and strict permission controls, you can seamlessly integrate environment-specific operations into automated, rolling patch cycles without sacrificing compliance, security, or operational standards.
Parent topic: How-to Guides