@echo off REM RMAN Restore Database FROM ZERO - Clean State REM Backups are on F:\ (NFS mount from Proxmox host) REM This script: REM 1. Cleans up any existing database (calls cleanup_database.cmd) REM 2. Restores from F:\ backups REM 3. Verifies database REM Run this script as Administrator on DR VM (10.0.20.37) REM Location: D:\oracle\scripts\rman_restore_from_zero.cmd set ORACLE_HOME=C:\Users\Administrator\Downloads\WINDOWS.X64_193000_db_home set ORACLE_SID=ROA set PATH=%ORACLE_HOME%\bin;%PATH% echo ============================================ echo RMAN Database Restore FROM ZERO echo ============================================ echo. echo Database: ROA echo DBID: 1363569330 echo Backups: F:\ROA\autobackup (NFS mount from Proxmox) echo. echo This script will: echo 1. CLEANUP: Delete any existing database files echo 2. RESTORE: Restore from F:\ backups echo 3. VERIFY: Check database is working echo. REM Verify F:\ mount is accessible if not exist F:\ROA\autobackup ( echo ERROR: F:\ROA\autobackup not accessible! echo. echo Please verify: echo 1. F:\ drive is mounted: dir F:\ echo 2. NFS mount command: mount -o rw,nolock,mtype=hard,timeout=60 10.0.20.202:/mnt/pve/oracle-backups F: echo 3. Proxmox host is reachable: ping 10.0.20.202 echo. exit /b 1 ) echo [OK] F:\ROA\autobackup is accessible echo. REM Create directories if not exist D:\oracle\temp mkdir D:\oracle\temp if not exist D:\oracle\logs mkdir D:\oracle\logs echo ============================================ echo STEP 1: CLEANUP - Delete existing database echo ============================================ echo. echo Calling cleanup_database.cmd... echo. REM Call cleanup script (same directory) call D:\oracle\scripts\cleanup_database.cmd if %errorlevel% neq 0 ( echo. echo ERROR: Cleanup failed! exit /b 1 ) echo. echo [OK] Cleanup complete - VM is in clean state echo. echo Starting restore in 2 seconds... timeout /t 2 /nobreak > nul echo ============================================ echo STEP 2: RESTORE - Restore from F:\ backups echo ============================================ echo. REM Step 2.1: Create Oracle service (needed for sqlplus to connect) echo [2.1] Creating Oracle service from PFILE... if not exist C:\Users\oracle\admin\ROA\pfile\initROA.ora ( echo ERROR: PFILE not found at C:\Users\oracle\admin\ROA\pfile\initROA.ora echo Cannot create Oracle service without PFILE! exit /b 1 ) oradim -new -sid ROA -startmode manual -pfile C:\Users\oracle\admin\ROA\pfile\initROA.ora if %errorlevel% neq 0 ( echo ERROR: Failed to create Oracle service exit /b 1 ) echo [OK] Oracle service created successfully timeout /t 2 /nobreak > nul REM Step 2.2: Startup NOMOUNT echo [2.2] Starting database in NOMOUNT mode... echo STARTUP NOMOUNT PFILE='C:\Users\oracle\admin\ROA\pfile\initROA.ora'; > D:\oracle\temp\nomount.sql echo EXIT; >> D:\oracle\temp\nomount.sql sqlplus / as sysdba @D:\oracle\temp\nomount.sql if %errorlevel% neq 0 ( echo ERROR: Failed to startup NOMOUNT exit /b 1 ) echo [OK] Database started in NOMOUNT mode timeout /t 3 /nobreak > nul REM Step 2.3: Create RMAN restore script echo [2.3] Creating RMAN restore script... set RMAN_SCRIPT=D:\oracle\temp\restore_from_zero.rman set LOG_FILE=D:\oracle\logs\restore_from_zero.log REM Copy ALL backups from F:\ to recovery area (RMAN works best with backups in recovery area) if not exist C:\Users\oracle\recovery_area\ROA\autobackup mkdir C:\Users\oracle\recovery_area\ROA\autobackup echo [INFO] Copying all backups from F:\ROA\autobackup to recovery area... echo This may take 1-2 minutes for ~6.7 GB of backups... xcopy /Y /Q "F:\ROA\autobackup\*.BKP" "C:\Users\oracle\recovery_area\ROA\autobackup\" > nul if %errorlevel% neq 0 ( echo ERROR: Failed to copy backups from F:\ exit /b 1 ) echo [OK] All backups copied to recovery area echo SET DBID 1363569330; > %RMAN_SCRIPT% echo. >> %RMAN_SCRIPT% echo RUN { >> %RMAN_SCRIPT% echo ALLOCATE CHANNEL ch1 DEVICE TYPE DISK; >> %RMAN_SCRIPT% echo RESTORE CONTROLFILE FROM AUTOBACKUP; >> %RMAN_SCRIPT% echo RELEASE CHANNEL ch1; >> %RMAN_SCRIPT% echo } >> %RMAN_SCRIPT% echo. >> %RMAN_SCRIPT% echo ALTER DATABASE MOUNT; >> %RMAN_SCRIPT% echo. >> %RMAN_SCRIPT% echo CATALOG START WITH 'F:/ROA/autobackup' NOPROMPT; >> %RMAN_SCRIPT% echo. >> %RMAN_SCRIPT% echo RUN { >> %RMAN_SCRIPT% echo ALLOCATE CHANNEL ch1 DEVICE TYPE DISK; >> %RMAN_SCRIPT% echo ALLOCATE CHANNEL ch2 DEVICE TYPE DISK; >> %RMAN_SCRIPT% echo RESTORE DATABASE; >> %RMAN_SCRIPT% echo RELEASE CHANNEL ch1; >> %RMAN_SCRIPT% echo RELEASE CHANNEL ch2; >> %RMAN_SCRIPT% echo } >> %RMAN_SCRIPT% echo. >> %RMAN_SCRIPT% echo RUN { >> %RMAN_SCRIPT% echo ALLOCATE CHANNEL ch1 DEVICE TYPE DISK; >> %RMAN_SCRIPT% echo RECOVER DATABASE NOREDO; >> %RMAN_SCRIPT% echo RELEASE CHANNEL ch1; >> %RMAN_SCRIPT% echo } >> %RMAN_SCRIPT% echo. >> %RMAN_SCRIPT% echo ALTER DATABASE OPEN RESETLOGS; >> %RMAN_SCRIPT% echo. >> %RMAN_SCRIPT% REM Note: TEMP tablespace is automatically restored - no need to add manually echo EXIT; >> %RMAN_SCRIPT% echo [OK] RMAN script created: %RMAN_SCRIPT% REM Step 2.4: Run RMAN restore echo [2.4] Running RMAN restore (this will take 10-20 minutes)... echo Log file: %LOG_FILE% echo. rman target / cmdfile=%RMAN_SCRIPT% log=%LOG_FILE% if %errorlevel% neq 0 ( echo. echo ERROR: RMAN restore failed! echo Check log: %LOG_FILE% exit /b 1 ) echo. echo [OK] RMAN restore completed successfully! echo. echo ============================================ echo STEP 3: VERIFY - Check database status echo ============================================ echo. echo [3.1] Verifying database... echo SET PAGESIZE 100 LINESIZE 200 > D:\oracle\temp\verify.sql echo COLUMN info FORMAT A80 >> D:\oracle\temp\verify.sql echo SELECT 'DB_NAME: ' ^|^| NAME ^|^| ', OPEN_MODE: ' ^|^| OPEN_MODE AS info FROM V$DATABASE; >> D:\oracle\temp\verify.sql echo SELECT 'INSTANCE: ' ^|^| INSTANCE_NAME ^|^| ', STATUS: ' ^|^| STATUS AS info FROM V$INSTANCE; >> D:\oracle\temp\verify.sql echo SELECT 'TABLESPACES: ' ^|^| COUNT(*) AS info FROM DBA_TABLESPACES; >> D:\oracle\temp\verify.sql echo SELECT 'DATAFILES: ' ^|^| COUNT(*) AS info FROM DBA_DATA_FILES; >> D:\oracle\temp\verify.sql echo SELECT 'TABLES: ' ^|^| COUNT(*) AS info FROM DBA_TABLES WHERE OWNER NOT IN ('SYS','SYSTEM'); >> D:\oracle\temp\verify.sql echo EXIT; >> D:\oracle\temp\verify.sql sqlplus -s / as sysdba @D:\oracle\temp\verify.sql echo. echo [3.2] Creating SPFILE for database persistence... echo CREATE SPFILE FROM PFILE='C:\Users\oracle\admin\ROA\pfile\initROA.ora'; > D:\oracle\temp\create_spfile.sql echo EXIT; >> D:\oracle\temp\create_spfile.sql sqlplus / as sysdba @D:\oracle\temp\create_spfile.sql if %errorlevel% neq 0 ( echo WARNING: Failed to create SPFILE - database may not persist after connections close ) else ( echo [OK] SPFILE created successfully REM Recreate service with auto-start and SPFILE echo [3.3] Recreating Oracle service with auto-start mode... oradim -delete -sid ROA 2>nul timeout /t 2 /nobreak > nul oradim -new -sid ROA -startmode auto -spfile if %errorlevel% neq 0 ( echo WARNING: Failed to recreate service with auto-start ) else ( echo [OK] Service recreated with auto-start mode ) REM Register with listener echo ALTER SYSTEM REGISTER; > D:\oracle\temp\register.sql echo EXIT; >> D:\oracle\temp\register.sql sqlplus / as sysdba @D:\oracle\temp\register.sql ) echo. echo ============================================ echo Database Restore FROM ZERO Complete! echo ============================================ echo. echo Restore log: %LOG_FILE% echo. echo Database is OPEN and ready for testing! echo. echo Next steps: echo 1. Test application connectivity echo 2. Verify data integrity echo 3. Run cleanup_database.cmd to remove database after test echo 4. Shutdown DR VM to conserve resources echo.