Recovering Oracle Databases with Veeam: A Step-by-Step Guide for vSphere Environments

Oracle recovery in Veeam is one of those things that looks straightforward until you are actually doing it at 2am. The Veeam Plug-in for Oracle RMAN workflow is not the same as a standard VM restore, and if you go in expecting it to behave like one, you are going to have a bad time. This guide walks through all three recovery paths -- restore to original location, restore to a custom location, and export to file -- for both single-instance and RAC environments, using both the Veeam Explorer for Oracle GUI and the real PowerShell cmdlets. Everything here is based on VBR 12 and later.

Before We Start: How This Actually Works

It is worth spending a minute on the mechanics before jumping into the steps, because the Veeam Plug-in for Oracle RMAN workflow is distinct from the application-aware image backup path you might already be familiar with.

When you use the Veeam Plug-in for Oracle RMAN, Oracle's own Recovery Manager drives the backup directly to the Veeam repository. Veeam Explorer for Oracle then uses that same RMAN channel to restore. It is not mounting a VM snapshot and scraping files out -- it is a proper RMAN-mediated restore. That distinction matters because it means your RMAN catalog (or controlfile) is the source of truth for what can be recovered, and the Veeam plug-in on the Oracle host is doing the real work, not just the VBR console.

What Veeam Explorer actually does during a restore is this: it establishes a session from the VBR server to the Oracle host via the installed plug-in, then issues RMAN commands to restore the database files and archived redo logs to either the original location or a target you specify. For Linux hosts, it does all of this over SSH. For Windows hosts, it deploys a short-lived runtime service (Veeam Oracle Restore Service) on the target that handles the file operations and then removes itself when the restore is done.

Keep Explorer open

Veeam Explorer for Oracle must stay open for the entire duration of any restore, publish, or export operation. If you get logged out or close the window, the operation stops. The only exception is Instant Recovery, which hands off to the Veeam Explorers Recovery Service and can run without the GUI. Plan accordingly on long restores.

Prerequisites

Run through this list before you start. Missing any of these is usually why recoveries fail before they even get to the RMAN phase.

Requirement Details
VBR version Version 12 or later. Managed mode for the RMAN plug-in (where VBR deploys and manages the plug-in automatically via Protection Groups) requires VBR 12.
Veeam Plug-in for Oracle RMAN Must be installed on the Oracle host -- every node if you are on RAC. The plug-in version must match the VBR server version exactly. A version mismatch will fail at RMAN channel allocation with a generic error that does not make the cause obvious.
RMAN backup exists The backup must have been taken via the Veeam Plug-in for Oracle RMAN -- not a crash-consistent VM snapshot. If the job was a regular VM image backup with application-aware processing, you are on a different (and more limited) recovery path.
Oracle listener running The listener must be active on the target host before you start the restore. Check with lsnrctl status. Veeam Explorer needs to connect to the Oracle instance as part of session initialization.
OS authentication or credentials For Linux, Veeam connects over SSH using the Oracle OS user. For Windows, you provide credentials with access to the Oracle home. If OS authentication is disabled on the target, you will need the -SysUserPassword parameter in PowerShell (added in VBR 12.3).
Staging server (exports and Linux point-in-time) Exporting databases from a Linux-based Oracle host requires a staging Oracle server configured in VBR. Go to General Options > Oracle and set it up there. Without this, export operations will not start on Linux.
TDE not in use Veeam Explorer for Oracle does not support Transparent Data Encryption. If TDE is enabled on the database, you cannot use Explorer for item-level recovery -- you have to restore the full VM or use RMAN directly against a Veeam-exported backup set.
Network ports TCP 22 (SSH, Linux) or WMI/RPC (Windows) between the VBR server and the Oracle host. TCP 1521 (or your listener port) for the RMAN channel connection.

Path 1

Restore to Original Location

This is your primary break-fix scenario. The database is on the same host it was backed up from, and you need it back -- whether that is after corruption, an accidental drop, or a failed patch rollback. The database will be taken offline during the restore and brought back open when RMAN finishes recovery.

▶ GUI -- Veeam Explorer for Oracle
  1. In the VBR console, go to Home > Backups, find the backup job that covered the Oracle host, and right-click the restore point you want to work from. Select Restore application items > Oracle databases. This launches Veeam Explorer for Oracle.
  2. Explorer will connect to the VBR server and enumerate the Oracle databases it finds in that restore point. Give it a moment -- on large backups this can take a minute or two to populate the tree.
  3. In the left pane, expand the host node to see the available databases. Right-click the target database and select Restore database > To the original location.
  4. The restore wizard opens. On the Restore point page, choose how far back you want to go: latest state, a specific point in time, or a specific SCN. For point-in-time, enter the date and time using the picker -- Veeam will use the archived redo logs to roll forward to that exact moment.
  5. Provide the credentials for the Oracle host when prompted. On Linux this is the OS user that owns the Oracle home. On Windows, provide a user with access to the Oracle home directory.
  6. Review the summary and click Restore. Watch the task log at the bottom of the Explorer window for RMAN output. You will see the familiar RMAN channel allocation, restore, and recover messages as it works through the operation.
  7. When Explorer reports success, verify the database state before telling anyone it is back. See the verification section at the end of this article.
Veeam Explorer for Oracle restore to original location dialog showing restore point selection

Veeam Explorer for Oracle -- restore point selection with point-in-time and SCN options for original location restore.

RAC -- Path 1

Before starting, shut down all Oracle instances in the cluster except on the node you plan to use as the restore target. Veeam will target that node directly -- it does not coordinate across all nodes during the restore. After the RMAN restore completes and the database is open on the primary node, bring the remaining instances back online with srvctl start instance -d <db_name> -i <instance_name> for each node and confirm cluster membership with srvctl status database -d <db_name>.

>_ PowerShell

The Veeam Explorer for Oracle PowerShell module uses the VEOR prefix. For RMAN plug-in backups specifically, the session cmdlets are Start-VEORRMANRestoreSession and Restore-VEORRMANDatabase. These are different from the Start-VEORRestoreSession / Restore-VEORDatabase cmdlets, which are for VM image-based backups with application-aware processing. Make sure you are using the right set for your backup type.

PowerShell -- Restore to Original Location (RMAN Plug-in Backup)
# Load the Veeam Explorer for Oracle module from the VBR server
# Run this in a PowerShell session on the VBR server itself
Import-Module Veeam.Backup.PowerShell

# Get the RMAN plug-in backup by the Oracle host name
$backup = Get-VEORRMANBackup -Name "oracle-host.example.com"

# Start a restore session against that backup
$session = Start-VEORRMANRestoreSession -Backup $backup

# Enumerate the databases available in the session
$db = Get-VEORRMANDatabase -Session $session -Name "ORCL"

# Restore to original location -- latest available state
# Add -RestoreToPointInTime or -RestoreToSCN to target a specific point
Restore-VEORRMANDatabase `
    -Session $session `
    -Database $db `
    -RestoreToOriginalLocation

# Close the session when done
Stop-VEORRMANRestoreSession -Session $session
Point-in-time and SCN options

To restore to a specific moment, add -RestoreToPointInTime (Get-Date "2024-06-15 14:30:00") to the Restore-VEORRMANDatabase call. For SCN-based recovery, use -RestoreToSCN 1234567. If OS authentication is disabled on the target, you also need -SysUserPassword (ConvertTo-SecureString "password" -AsPlainText -Force) -- this parameter was added in VBR 12.3.


Path 2

Restore to Custom Location

Use this path when you want to land the database somewhere other than where it came from -- a different host, a different Oracle home directory, or under a new database name. This is the path for dev/test refreshes, pre-production validation, or restoring to a standby host while the primary is still being diagnosed.

▶ GUI -- Veeam Explorer for Oracle
  1. Launch Veeam Explorer for Oracle as in Path 1, steps 1 and 2.
  2. Right-click the target database in the left pane and select Restore database > To a different location.
  3. On the Target server page, specify the destination Oracle host. It must have the Veeam Plug-in for Oracle RMAN installed and be reachable from the VBR server. For Linux targets, SSH must be available.
  4. In the Oracle home field, specify the Oracle home path on the destination host. Click Browse to navigate the remote filesystem, or type the path directly.
  5. Set the Global database name in the format DB_NAME.DB_DOMAIN (for example, orcl_restore.example.com). Veeam will truncate the DB_NAME portion to 8 characters if it exceeds that length. Set the Oracle SID as well -- it defaults to match the DB_NAME but you can override it. Maximum SID length is 12 alphanumeric characters.
  6. Set the restore point scope (latest, point-in-time, or SCN) and provide host credentials.
  7. Review the summary and click Restore. Monitor the task log.
Veeam Explorer for Oracle custom location restore showing target server, Oracle home, and database name fields

Custom location restore -- setting the destination host, Oracle home path, global database name, and SID.

Database name length

Veeam enforces Oracle's 8-character limit on DB_NAME. If you set the global database name to orcl_restored.example.com, the DB_NAME will be silently shortened to orcl_res while the unique database name stays as the full string you entered. Worth knowing before you go looking for a database that appears to be missing.

RAC -- Path 2

If the destination is itself a RAC cluster, the Veeam Plug-in must be installed on all nodes of the destination cluster before you start. Specify the primary node hostname (not the SCAN address) as the target server in Explorer for the initial restore. After the restore completes and the database is open on that node, register it with the cluster manually using srvctl add database and srvctl add instance for each additional node, then start the remaining instances. The restore will bring up a standalone database -- getting it into the cluster is a post-restore step.

>_ PowerShell
PowerShell -- Restore to Custom Location (RMAN Plug-in Backup)
Import-Module Veeam.Backup.PowerShell

$backup  = Get-VEORRMANBackup -Name "oracle-host.example.com"
$session = Start-VEORRMANRestoreSession -Backup $backup
$db      = Get-VEORRMANDatabase -Session $session -Name "ORCL"

# Restore to a different host under a new name
# -ServerName       : FQDN or hostname of the destination Oracle host
# -OracleHomePath   : full path to Oracle home on the destination
# -DatabaseName     : new DB_NAME (max 8 chars)
# -DatabaseDomain   : domain portion of the global database name
Restore-VEORRMANDatabase `
    -Session $session `
    -Database $db `
    -ServerName "oracle-dest.example.com" `
    -OracleHomePath "/u01/app/oracle/product/19.0.0/dbhome_1" `
    -DatabaseName "ORCL_RST" `
    -DatabaseDomain "example.com" `
    -RestoreToPointInTime (Get-Date "2024-06-15 14:30:00")

Stop-VEORRMANRestoreSession -Session $session

Path 3

Export Database to File

Sometimes you do not want to restore to a live Oracle instance at all -- you just want the files. Maybe you are handing a copy off to a DBA team working in an isolated environment, or you want to archive a specific point-in-time state outside of your normal backup chain, or you need to import using RMAN on a host where Veeam is not installed. The export path handles all of that.

One important prerequisite for this path: if your Oracle host is Linux-based, you need a staging Oracle server configured in VBR under General Options > Oracle. Without it, export operations on Linux will not start. Windows-based Oracle hosts do not have this requirement.

▶ GUI -- Veeam Explorer for Oracle
  1. Launch Veeam Explorer for Oracle as in Path 1, steps 1 and 2.
  2. Right-click the target database (you can also expand it to target a specific tablespace) and select Export database.
  3. Specify the destination folder. This can be a local path on the machine running the VBR console, or a UNC path to a network share. Make sure there is enough space -- you need at least the combined size of all datafiles plus the archive logs needed to reach your selected restore point.
  4. Set the restore point scope: latest, point-in-time, or SCN.
  5. Click Export and monitor the task log. When complete, the destination folder will contain RMAN backup set files that can be imported into any compatible Oracle instance.
Importing the exported backup set

To import the exported files into another Oracle instance, catalog the backup pieces in RMAN first: RMAN> CATALOG START WITH '/path/to/export/' NOPROMPT;. After cataloging, run a standard RESTORE DATABASE and RECOVER DATABASE sequence. The export is self-contained -- it includes the backup pieces and all archive logs needed to reach the recovery point you selected.

RAC -- Path 3

Exporting from a RAC backup works the same as single-instance from the GUI -- Veeam consolidates the backup pieces regardless of which nodes they were originally written across. The output is a single unified set of files with no RAC dependency. You can import it into a standalone Oracle instance without any cluster-specific steps on the receiving end.

>_ PowerShell
PowerShell -- Export Database to File (RMAN Plug-in Backup)
Import-Module Veeam.Backup.PowerShell

$backup  = Get-VEORRMANBackup -Name "oracle-host.example.com"
$session = Start-VEORRMANRestoreSession -Backup $backup
$db      = Get-VEORRMANDatabase -Session $session -Name "ORCL"

# Export the database as RMAN backup sets to a local folder
# The folder will be created if it does not already exist
Export-VEORDatabase `
    -Session $session `
    -Database $db `
    -Path "D:\OracleExports\ORCL_20240615" `
    -RestoreToPointInTime (Get-Date "2024-06-15 14:30:00")

# Omit -RestoreToPointInTime to export to the latest available state

Stop-VEORRMANRestoreSession -Session $session

Post-Recovery Verification

Do not skip this. A restore that finishes without errors does not automatically mean a database that is clean and healthy. Run through these checks before you hand it back.

Confirm the Database is Open

SQL*Plus
sqlplus / as sysdba

SELECT instance_name, status FROM v$instance;
SELECT name, open_mode FROM v$database;

-- You want: STATUS = OPEN, OPEN_MODE = READ WRITE
-- If OPEN_MODE shows READ ONLY, the database did not complete recovery cleanly

Confirm Archive Log Mode

SQL*Plus
SELECT log_mode FROM v$database;
-- Should return ARCHIVELOG
-- If it returns NOARCHIVELOG after a restore, your pfile/spfile may not have been
-- restored correctly -- check the alert log before putting the database into service

Check the Alert Log

Bash
# Find the alert log location
find $ORACLE_BASE/diag -name "alert_*.log" -type f 2>/dev/null

# Scan for ORA- errors in the last 200 lines
tail -200 /u01/app/oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log | grep -i "ORA-"

# A clean restore ends with something like:
# Completed: ALTER DATABASE OPEN
# No ORA- errors after that line is what you want to see

Validate with RMAN

RMAN
rman target /

-- Validate the physical and logical integrity of the restored database
VALIDATE DATABASE;

-- Crosscheck the repository so it reflects what is actually on disk now
CROSSCHECK BACKUP;
LIST EXPIRED BACKUP;
Auto-start disabled after restore

Veeam Explorer disables Oracle auto-start after a restore operation. On Windows, re-enable it by setting the ORA_<SID>_AUTOSTART registry key under HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_HOMENAME back to TRUE. On Linux, update your /etc/oratab entry for the database back to Y if auto-start via dbstart is part of your startup process.

RAC post-recovery verification

After bringing all instances back online, run srvctl status database -d <db_name> to confirm every instance shows as ONLINE. If any instance is stuck in INTERMEDIATE, start it manually with srvctl start instance -d <db_name> -i <instance_name>. Also run crsctl stat res -t to confirm the broader cluster resource state is clean before declaring the recovery done.

What You've Completed

  • Understood how the Veeam Plug-in for Oracle RMAN workflow differs from a standard VM image restore -- RMAN drives the restore, not Veeam acting on raw disk files.
  • Confirmed prerequisites: plug-in installed and version-matched, listener running, staging server configured for Linux exports, TDE compatibility checked.
  • Completed Path 1 -- restored a database to its original location using both the Veeam Explorer GUI and the correct Restore-VEORRMANDatabase PowerShell cmdlet, with point-in-time and SCN options.
  • Completed Path 2 -- restored to a different host or under a new database name, with the 8-character DB_NAME limit and RAC post-restore cluster registration steps covered.
  • Completed Path 3 -- exported a database as RMAN backup sets to a folder for handoff or offline use, including the Linux staging server requirement and how to catalog the export in a receiving RMAN instance.
  • Ran post-recovery verification: open mode, archive log mode, alert log scan, and RMAN validate -- plus the auto-start re-enable step that Veeam does not do for you.

Read more