EPM Automate, the commands that matter
The utility has well over a hundred commands. Data work uses about twenty. This is that twenty, grouped by job, each with the one thing that trips people.
◆ Start here, if you have never run it— what it is, where it lives, and your first five minutes.
EPM Automate is a small program that runs on your own computer or a server, not inside EPM. You type commands at a command line, the program talks to your EPM environment over the internet, and files move between the two. That is the whole idea.
| Step | What to do |
|---|---|
| 1 · Get it | Log in to your EPM environment in a browser. Click your name at the top right, then Downloads, then pick your system. On Windows, run the installer as administrator; Java comes bundled and the utility lands under Program Files. On Mac and Linux, install Java 17 first and point the JAVA_HOME variable at it, the installer does not bring its own. |
| 2 · Open a command line | Windows: press Start, type cmd, press Enter. Mac: open Terminal. Linux: any shell. This is where every command on this page is typed. |
| 3 · Store your password safely, once | Type: epmautomate encrypt YOUR_PASSWORD myKey password.epw and press Enter. This writes an encrypted password file. Scripts use the file; your real password never sits in plain text anywhere. |
| 4 · Your first session | Three commands, one per line, pressing Enter after each: epmautomate login your.name@company.com password.epw https://your-environment-url, then epmautomate listFiles, then epmautomate logout. If listFiles prints a file list, everything works. |
| 5 · Know where files land | Downloads arrive in the folder your command line is sitting in when you run the command. On Windows, logs and the password file live in the ProgramData Oracle folder. |
:: the whole first session, typed at the command line
epmautomate encrypt YOUR_PASSWORD myKey password.epw
epmautomate login your.name@company.com password.epw https://your-environment-url
epmautomate listFiles
epmautomate logout
Running commands by hand is how you learn. Running them on a schedule is the point: the same commands go into a script file, a scheduler fires it nightly, and the loop on the extraction pattern page runs without you. Windows uses Task Scheduler, Linux uses cron, and a small always-on Linux instance is the usual home.
◆ Drill: the script kit, fill in six lines and run— copy, paste, edit the top block, schedule it. Nothing below the line needs touching.
Everything you change lives in the top block: your pod URL, the service account, the password file, your two job names, and the landing folder. The rest is the loop, logging with dates, logging out even on failure, and stopping on the first error so a bad night never half-runs.
#!/bin/bash # ===== fill in these six lines, nothing else ===== EPM_URL="https://YOURPOD.epm.ocs.oraclecloud.com" EPM_USER="service.account@yourcompany.com" PASSFILE="/opt/epm/password.epw" DATA_JOB="NightlyPlanExport" META_JOB="NightlyDimExport" LANDING="/data/epm/landing" # ================================================= set -euo pipefail LOG="/var/log/epm_export_$(date +%F).log" exec >>"$LOG" 2>&1 echo "==== run start $(date) ====" cd /opt/epm epmautomate login "$EPM_USER" "$PASSFILE" "$EPM_URL" trap 'epmautomate logout' EXIT epmautomate exportdata "$DATA_JOB" plan_data.zip epmautomate exportmetadata "$META_JOB" dims.zip epmautomate downloadfile plan_data.zip epmautomate downloadfile dims.zip mkdir -p "$LANDING" unzip -o plan_data.zip -d "$LANDING" unzip -o dims.zip -d "$LANDING" # pick the one line for your cloud, delete the other two: # aws s3 cp "$LANDING" s3://your-bucket/epm/ --recursive # gsutil -m cp -r "$LANDING"/* gs://your-bucket/epm/ # azcopy copy "$LANDING/*" "https://youraccount.blob.core.windows.net/epm/" echo "==== run complete $(date) ===="
One-time setup on the server, before the first run:
# one time only, on the server, before the first run mkdir -p /opt/epm && cd /opt/epm epmautomate encrypt YOUR_PASSWORD myKey /opt/epm/password.epw chmod 600 /opt/epm/password.epw # save the script above as /opt/epm/nightly_export.sh, then: chmod +x /opt/epm/nightly_export.sh
Then cron, five steps, in order. The habit that matters is step one, never schedule a script you have not watched succeed by hand:
# step 1, prove it works by hand, watch it finish clean bash /opt/epm/nightly_export.sh cat /var/log/epm_export_$(date +%F).log # step 2, open your schedule crontab -e # step 3, add this one line, 2am nightly, then save and exit 0 2 * * * /bin/bash /opt/epm/nightly_export.sh # step 4, confirm the line took crontab -l # step 5, tomorrow morning, check the log and the landing folder cat /var/log/epm_export_$(date +%F).log ls -l /data/epm/landing
Three notes that save a support ticket. Cron uses the server's timezone, so 2am means the server's 2am, check it with the date command. Keep the schedule off your close calendar, the export locks the application while it runs. And the two job names must exist in the application first, jobs hold the logic, the script only calls them, which is the whole design.
◆ Session and files— the plumbing every script starts and ends with.
| Command | What it does, and the trap |
|---|---|
| login · logout | Open and close the session. Use a password file, never a plain password in the script, and always log out, orphaned sessions count against you. Two April 2026 changes break old scripts: the install moved to Program Files, and a password file referenced without an absolute path must now sit in the ProgramData Oracle folder. Failed calls no longer retry on 403 and 404 errors. |
| listFiles | Shows the default location, the Data Management folders, snapshots, and logs. The trap: it will not show the current snapshot while daily maintenance is generating it, so a backup script that runs during the window sees nothing and quietly does nothing. |
| uploadFile · downloadFile | Move files in and out. Imports need the upload first, a step every first script forgets. Download paths include the folder, outbox slash filename. |
| deleteFile | Clear the old file before uploading its replacement. Skipping this is how stale files get imported with fresh names in the log. |
◆ Data out, the pipeline set— four exports, four different products, one right choice per purpose.
| Command | What it does, and the trap |
|---|---|
| exportData | Runs a named Export Data job, columnar CSV in a zip. The warehouse route. The job holds dense dimensions on columns and excludes dynamic members; the command only names it. |
| exportMetadata | Runs a named metadata export, the dimension files. The dictionary half of every extract, and the half everyone skips. |
| exportEssbaseData | The whole cube in native Essbase format. Backup and reload only. Feed it to anything that is not Essbase and you learn the native format trap firsthand. |
| exportDataManagement | The integration setup and staging tables in one zip, with identifiers intact. For moving integration configuration between environments, not for reporting data. |
◆ Data in, and running things— loads, rules, and the process identifier problem.
| Command | What it does, and the trap |
|---|---|
| importData · importMetadata | Run the named import jobs. Metadata imports will not rename members or delete dimensions, that stays manual by design. Pass an error file name so failures land somewhere readable. |
| refreshCube | Pushes metadata changes into the cube. Imports without a refresh look like they worked and change nothing users see. |
| runBusinessRule · runCalc | Run a rule with its runtime prompts as name equals value pairs. The rule set from a script needs every prompt supplied, there is no dialog to catch what you forgot. |
| runDataRule | The old Data Management load rule runner. Its trap is famous: it does not return the process identifier, so the output filename is unpredictable. Fix the filename in the target options, or move on. |
| runIntegration · runPipeline | The current Data Integration equivalents, and the better answer to the runDataRule problem. Pipelines chain loads, rules, and clears in one named unit the script calls once. |
◆ Environment discipline— the four commands that separate tidy tenants from lucky ones.
| Command | What it does, and the trap |
|---|---|
| exportSnapshot · importSnapshot | The full LCM package, artifacts and data. The backup, the environment move, and the audit trail. Snapshots are for Essbase and EPM, never for parsing downstream. |
| maskData | Scrambles data in a test environment after a production clone. The step most admins skip, and the one the security review asks about first. |
| runDailyMaintenance | Triggers the maintenance window on demand. Useful once, dangerous on a schedule, it takes the environment away from users while it runs. |
The full alphabetical reference lives in Oracle's EPM Automate documentation, one page per command. This page is the map; that is the territory. On Linux the utility needs Java 17 with JAVA_HOME set, per the June 2026 update notes. The nightly script these commands build is on the extraction pattern page, and the loop they feed is on Connect Power BI. Command names verified against the current reference, July 2026.
- named job
- An export or import defined once in the application. The script calls it by name and nothing else.
- password file
- The encrypted credential EPM Automate logs in with. Plain passwords in scripts fail audits.
- runtime prompt
- A rule's parameter, supplied as name equals value from the command line.
- process identifier
- The run number that ties an output to a run. REST returns it, runDataRule does not.
- pipeline
- A named chain of integration steps in Data Integration, called as one unit.
- snapshot
- The full LCM package. The backup, never the data feed.