Back to Blog
Oracle 6 min readMay 29, 2025

Oracle RAC Cold Backup Using RMAN — Step by Step

A complete walkthrough of taking a cold (offline) backup on an Oracle RAC cluster using RMAN. Covers shutdown, mount state, compressed backupset, controlfile copy, SPFILE backup, and pfile creation.

Overview

A cold backup (offline backup) means backing up Oracle database files while the database is in MOUNT state — not open to users. This guarantees data consistency since no transactions are running during the backup.

In a RAC (Real Application Clusters) environment, you shut down all instances but keep one instance in mount mode to perform the RMAN backup.

Environment

  • Oracle RAC — 6-node cluster
  • NFS mount for backup storage (verify sufficient space with df -h beforehand)
  • RMAN backup utility
  • OS: RHEL / HP-UX

Step 1 — Check Available Space

Before starting, verify the NFS backup mount has sufficient free space.

bash
df -h
# Confirm NFS backup location is mounted and has enough space
# Example: 15T total, 8.8T free is healthy for this operation

Step 2 — Create Backup Directory

bash
# Create working directory on local node
mkdir -p /tmp/fmo_coldbkp
chmod 777 /tmp/fmo_coldbkp
cd /tmp/fmo_coldbkp
💡

Create this directory on the node where you will run RMAN from.

Step 3 — Shutdown the Database

Switch to the target database and perform a clean shutdown.

bash
# Connect as SYSDBA
sqlplus / as sysdba
sql
SHUTDOWN IMMEDIATE;

-- Bring to mount state (files closed, not open)
STARTUP MOUNT;

EXIT;

Step 4 — Stop All Instances, Start One in Mount

In RAC, stop the entire database cluster, then start just one instance in mount mode for RMAN.

bash
# Stop all RAC instances
srvctl stop database -d PRODDB -f

# Start only node3 instance in MOUNT mode
srvctl start instance -d PRODDB -i PRODDB3 -o mount

Verify instance status — only one should be running:

bash
# Expected output:
Instance PRODDB1 is not running on node1
Instance PRODDB2 is not running on node2
Instance PRODDB3 is running on node3     ← backup node
Instance PRODDB4 is not running on node4
Instance PRODDB5 is not running on node5
Instance PRODDB6 is not running on node6
💡

Only one instance in mount state is sufficient for RMAN to access all datafiles in a RAC cluster via shared storage (ASM).

Step 5 — Connect to RMAN

bash
rman target /

Step 6 — Backup the Full Database (Compressed)

Take a compressed backupset of all datafiles. Compressed backupsets significantly reduce storage usage.

sql
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE
  FORMAT '/oracle/backup/FMO_COLD_BKP/%u'
  TAG 'FRESHDB';

RMAN will process all tablespaces — SYSTEM, SYSAUX, TOOLS, and all UNDO tablespaces (one per RAC instance):

bash
Starting backup at 25-JUL-2022
allocated channel: ORA_DISK_1
channel ORA_DISK_1: starting compressed full datafile backup set
input datafile file number=00001 name=+PRODDB_DATA/DATAFILE/system.dbf
input datafile file number=00002 name=+PRODDB_DATA/DATAFILE/sysaux.dbf
input datafile file number=00003 name=+PRODDB_DATA/DATAFILE/sys_undots.dbf
input datafile file number=00004 name=+PRODDB_DATA/DATAFILE/tools.dbf
input datafile file number=00005 name=+PRODDB_DATA/DATAFILE/undo01.dbf
input datafile file number=00006 name=+PRODDB_DATA/DATAFILE/undo02.dbf
...
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:46
Finished backup at 25-JUL-2022

Step 7 — Backup the Control File

sql
RMAN> BACKUP AS COPY CURRENT CONTROLFILE
  FORMAT '/oracle/backup/FMO_COLD_BKP/controlfile_PRODDB_copy.ctl';

Step 8 — Backup the SPFILE

sql
RMAN> BACKUP AS COPY SPFILE
  FORMAT '/oracle/backup/FMO_COLD_BKP/snapcf_spfile_PRODDB.bck';

Step 9 — Additional Control File Backup

sql
RMAN> BACKUP CURRENT CONTROLFILE
  FORMAT '/oracle/backup/FMO_COLD_BKP/control_PRODDB.bck';
💡

Taking both a copy and a standard backup of the controlfile gives you two recovery paths — always good practice for critical databases.

Step 10 — Create PFILE from SPFILE

Exit RMAN and create a text-based parameter file as an additional safety measure.

bash
sqlplus / as sysdba
sql
CREATE PFILE='/oracle/backup/FMO_COLD_BKP/pfile_PRODDB_25Jul2022.ora'
  FROM SPFILE;

-- Output: File created.

Step 11 — Open the Database

sql
ALTER DATABASE OPEN;
bash
# Start all RAC instances
srvctl start database -d PRODDB

Step 12 — Verify Backup Files

bash
ls -ltr /oracle/backup/FMO_COLD_BKP/

Expected output — confirm all files are present and non-zero:

bash
-rw-r----- oracle dba   72278016  backupset_piece
-rw-r----- oracle dba   18857984  controlfile_PRODDB_copy.ctl
-rw-r----- oracle dba     114688  snapcf_spfile_PRODDB.bck
-rw-r----- oracle dba   18939904  control_PRODDB.bck
-rw-r--r-- oracle dba       2509  pfile_PRODDB_25Jul2022.ora

Key Takeaways

  • Always use SHUTDOWN IMMEDIATE — never SHUTDOWN ABORT before a cold backup
  • In RAC, only one instance in MOUNT state is needed — RMAN accesses shared ASM storage
  • Use TAG on backups (e.g., FRESHDB) for easy identification during restore/recovery
  • COMPRESSED BACKUPSET can reduce backup size by 40–70% depending on data
  • Always back up controlfile + SPFILE separately — critical for complete database recovery
  • Creating a PFILE from SPFILE gives a human-readable parameter backup
All postsOracle · RAC · RMAN · Backup

naresh@gowda:~$ built with Next.js + Tailwind + Framer Motion

view source →