RMAN Backup Script on Windows server with Oracle database

This is a Full backup RMAN Script which is created for having two days of retention.


Note: Create the folders for the files as per the location required.

Here we have created logs, rman_backups, and rman_scripts folder in one Drive and after enabling the archive log , check the archive log path.

sql> archive log list;

======================================================================

 --rman_ABCD_fullDB.cmd

@echo off
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd=%%k%%i%%j
echo Date: %yyyymmdd%
for /F "tokens=1-2 delims=: " %%l in ('time /t') do set hhmm=%%l%%m
echo Time: %hhmm%
set ORACLE_BASE=D:\Oracle
set ORACLE_HOME=%ORACLE_BASE%\19.3.0
set PATH=%ORACLE_HOME%\bin;%PATH%
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
set ORACLE_SID=ABCD
rman target / nocatalog log 'E:\dmp\backup\ABCD_rman_full.log' @E:\dmp\backup\rman_ABCD_fullDB.rman
FORFILES /P E:\dmp\backup\rman_backups /S /M ARCHIVE_ABCD_* /D -2 /C "cmd /c del @file"
FORFILES /P E:\dmp\backup\rman_backups /S /M BACKUP_ABCD_* /D -2 /C "cmd /c del @file"
FORFILES /P E:\dmp\backup\rman_backups /S /M CF_* /D -2 /C "cmd /c del @file"
copy E:\dmp\backup\ABCD_rman_full.log E:\dmp\backup\logs\ABCD_rman_full_%yyyymmdd%_%hhmm%.log

=========================================================================

--rman_ABCD_fullDB.rman

configure retention policy to recovery window of 2 days;
configure maxsetsize to 307200M;
configure snapshot controlfile name to 'E:\dmp\backup\rman_backups\control_snap.f';
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to 'E:\dmp\backup\rman_backups\cf_%F';
configure channel device type disk maxpiecesize 4096M format 'E:\dmp\backup\rman_backups\backup_%d_%u_%s_%p' maxopenfiles 2;
show all;
allocate channel for maintenance device type disk;
crosscheck archivelog all;
crosscheck backup;
delete noprompt expired archivelog all;
delete noprompt expired backup;
delete noprompt backupset completed before 'SYSDATE-2';
run {
BACKUP database plus archivelog not backed up 2 times;
delete noprompt archivelog until time 'SYSDATE-2';
}
sql "alter database backup controlfile to ''D:\Oracle\rman\ABCD\ABCD.btcl'' reuse";
exit;


=========================================================================

--rman_ABCD_archive.cmd

@echo off
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd=%%k%%i%%j
echo Date: %yyyymmdd%
for /F "tokens=1-2 delims=: " %%l in ('time /t') do set hhmm=%%l%%m
echo Time: %hhmm%
set ORACLE_BASE=D:\Oracle
set ORACLE_HOME=%ORACLE_BASE%\19.3.0
SET ORACLE_SID=ABCD
SET PATH=%ORACLE_HOME%\bin;%PATH%
rman target / nocatalog log 'E:\dmp\backup\ABCD_rman_archive.log' @E:\dmp\backup\rman_ABCD_ArchiveLogs.rman
FORFILES /P E:\dmp\backup\rman_backups /S /M ARCHIVE_ABCD_* /D -2 /C "cmd /c del @file"
FORFILES /P E:\dmp\backup\rman_backups /S /M BACKUP_ABCD_* /D -2 /C "cmd /c del @file"
copy E:\dmp\backup\ABCD_rman_archive.log E:\dmp\backup\logs\ABCD_rman_archive_%yyyymmdd%_%hhmm%.log

=========================================================================

--rman_ABCD_ArchiveLogs.rman

configure channel device type disk maxpiecesize 4096M format 'E:\dmp\backup\rman_backups\archive_%d_%u_%s_%p' maxopenfiles 2;
allocate channel for maintenance device type disk;
run {
crosscheck archivelog all;
crosscheck backup;
delete noprompt expired archivelog all;
delete noprompt obsolete device type disk;
backup as compressed backupset archivelog all delete input;
delete noprompt archivelog all backed up 1 times to DEVICE TYPE disk;
delete noprompt archivelog until time 'SYSDATE-2';
}
exit;

=========================================================================

--rman_log_clean.cmd

rem E:
rem cd E:\dmp\backup\logs
rem del ABCD_rman*.log
FORFILES /P E:\dmp\backup\logs /S /M *rman*.log /D -2 /C "cmd /c del @file"
exit;

=========================================================================

Scheduled the cmd files in the task scheduler to run as per the required timeframe.


To Check the RMAN Backup Running status with size and time:


SELECT
INPUT_TYPE "BACKUP_TYPE",
-- NVL (INPUT_BYTES/(1024*1024),0)"INPUT_BYTES (MB)",
-- NVL (OUTPUT_BYTES/(1024*1024),0) "OUTPUT_BYTES(MB)",
STATUS,
TO_CHAR (START_TIME, 'MM/DD/YYYY:hh24:mi:ss') as START_TIME,
TO_CHAR (END_TIME, 'MM/DD/YYYY:hh24:mi:ss') as END_TIME,
TRUNC ( (ELAPSED_SECONDS/60), 2) "ELAPSED_TIME (Min)",
 -- ROUND (COMPRESSION_RATIO, 3) "COMPRESSION_RATIO",
-- ROUND (INPUT_BYTES_PER_SEC/(1024*1024),2) "INPUT_BYTES_PER_SEC (MB)",
-- ROUND (OUTPUT_BYTES_PER_SEC/(1024*1024),2) "OUTPUT_BYTES_PER_SEC (MB)",
-- INPUT_BYTES_DISPLAY "INPUT_BYTES_DISPLAY",
OUTPUT_BYTES_DISPLAY "BACKUP_SIZE",
OUTPUT_DEVICE_TYPE "OUTPUT_DEVICE"
-- INPUT_BYTES_PER_SEC_DISPLAY "INPUT_BYTES_PER_SEC_DIS",
-- OUTPUT_BYTES_PER_SEC_DISPLAY "OUTPUT_BYTES_PER_SEC_DIS"
FROM V$RMAN_BACKUP_JOB_DETAILS
where start_time > SYSDATE -10
--and INPUT_TYPE != 'ARCHIVELOG'
ORDER BY END_TIME DESC;
------------------------------------------
select SESSION_KEY, INPUT_TYPE, STATUS,
to_char(START_TIME,'mm/dd/yy hh24:mi') start_time,
to_char(END_TIME,'mm/dd/yy hh24:mi') end_time,
elapsed_seconds/3600 hrs from V$RMAN_BACKUP_JOB_DETAILS
order by session_key;
------
Akash

I am working as a Data Engineer

Post a Comment

Previous Post Next Post