Oracle Backup on Windows

This article is not yet completed and verified, so caution is advised on its contents.

CMD (or BAT) file for full backup

rem
rem rmanFULL.cmd
rem
rem %1% is the ORACLE_SID
rem
set NLS_DATE_FORMAT=YYYY-MM-DD-HH24:MI:SS
set NLS_LANG=AMERICAN_AMERICA
set ORACLE_SID=%1%
set BACKUP_DIR=E:\BACKUP

rem
rem Do the backup and save the result status from RMAN
rem
rman cmdfile=rmanFULL.rcv log=rmanFULL_%ORACLE_SID%.log
set RMANRC=%ERRORLEVEL%
sqlplus monitor/******** @rman_report %RMANRC% FULL <Customer>

rem
rem Delete any files older than the retention period
rem
if %RMANRC% NEQ 0 goto exitlabel
forfiles /p %BACKUP_DIR%\%ORACLE_SID% /m *.DMP /d -1 /c "cmd /c del @path"
:exitlabel

CMD (or BAT) file for archive backup

rem
rem rmanARCH.cmd
rem
rem %1% is the ORACLE_SID
rem
set NLS_DATE_FORMAT=YYYY-MM-DD-HH24:MI:SS
set NLS_LANG=AMERICAN_AMERICA
set ORACLE_SID=%1%
set BACKUP_DIR=E:\BACKUP

rem
rem Do the backup and save the result status from RMAN
rem
rman cmdfile=rmanARCH.rcv log=rmanARCH_%ORACLE_SID%.log
set RMANRC=%ERRORLEVEL%
sqlplus monitor/******** @rman_report %RMANRC% ARCH <Customer>

RMAN command file for full backup

#
# rmanFULL.rcv
#
connect target /
run {
	configure retention policy to redundancy 1;
	configure controlfile autobackup off;
#
# Backup all the datafile that are not read only
#
	allocate channel d1 type disk maxpiecesize 2G;
	backup
		as compressed backupset
		incremental level 0
		format 'E:\BACKUP\%d\%T-FULL-%s-%p.dmp'
		database
		skip inaccessible
		skip readonly;
	release channel d1;
#
# Backup all the existing archive log files
#
	sql 'alter system archive log current';
	allocate channel d1 type disk maxpiecesize 2G;
	backup
		as compressed backupset
		format 'E:\BACKUP\%d\%T-ARCH-%s-%p.dmp'
		skip inaccessible
		archivelog all delete all input;
		
	release channel d1;
#
# Backup the control file and spfile to create a valid restore point
#
	allocate channel d1 type disk maxpiecesize 2G;
	backup
		as compressed backupset
		incremental level 0
		format 'E:\BACKUP\%d\%T-CTRL-%s-%p.dmp'
		current controlfile
		spfile
		skip inaccessible
		skip readonly;
	release channel d1;
}
#
# Report and delete any obsolete backupsets
#
report obsolete;
delete force noprompt obsolete;
#
# Crosscheck the backup files for existence
#
allocate channel for maintenance type disk;
crosscheck backup;
release channel;
#
# Delete entries for non-existing backupset to remove the clutter
#
allocate channel for delete type disk;
delete force noprompt expired backup;
release channel;

RMAN command file for archive backup

#
# rmanARCH.rcv
#
connect target /
run {
	configure retention policy to redundancy 1;
	configure controlfile autobackup off;
#
# Backup all the existing archive log files
#
	sql 'alter system archive log current';
	allocate channel d1 type disk maxpiecesize 2G;
	backup
		as compressed backupset
		format 'E:\BACKUP\%d\%T-ARCH-%s-%p.dmp'
		skip inaccessible
		archivelog all delete all input;

	release channel d1;
#
# Backup the control file and spfile to create a valid restore point
#
	allocate channel d1 type disk maxpiecesize 2G;
	backup
		as compressed backupset
		incremental level 0
		format 'E:\BACKUP\%d\%T-CTRL-%s-%p.dmp'
		current controlfile
		spfile
		skip inaccessible
		skip readonly;
	release channel d1;
}
#
# Report and delete any obsolete backupsets
#
report obsolete;
delete force noprompt obsolete;
#
# Crosscheck the backup files for existence
#
allocate channel for maintenance type disk;
crosscheck backup;
release channel;
#
# Delete entries for non-existing backupset to remove the clutter
#
allocate channel for delete type disk;
delete force noprompt expired backup;
release channel;