Files
ROMFASTSQL/oracle/standby-server-scripts/rman_restore_final.cmd
Marius cbad9ee779 Oracle DR: Phase 6.5 - Complete cleanup and restore scripts (TESTING)
Major improvements to DR restore workflow:

**New Scripts:**
- cleanup_database.cmd: Complete cleanup using oradim + registry deletion
- rman_restore_from_zero.cmd: Copy backups to recovery_area + restore

**Key Solutions Implemented:**
1. RMAN AUTOBACKUP limitation: Must have backups in recovery_area
   - Solution: Copy ALL backups from F:\ (NFS) to C:\...\recovery_area
   - Performance: 6.7 GB copied in ~2 minutes

2. Oracle service persistence issue: Service remains after sc delete
   - Solution: Use oradim -delete -sid ROA (proper Oracle cleanup)
   - Bonus: Delete registry keys to ensure clean state

**Current Status:**
- Cleanup:  TESTED (oradim works perfectly)
- Backup copy:  TESTED (6.7 GB in 2 min)
- RMAN restore: 🟡 IN PROGRESS (expected completion 03:35-03:40)

**Updated:**
- DR_UPGRADE_TO_CUMULATIVE_PLAN.md: Progress tracking + solutions documented
- rman_restore_final.cmd: Use F:\ mount point

🤖 Generated with Claude Code
2025-10-10 03:29:25 +03:00

110 lines
4.4 KiB
Batchfile

@echo off
REM RMAN Restore Database - FINAL VERSION
REM Backups are in FRA - RMAN will find them automatically
REM Run this script as Administrator on DR VM (10.0.20.37)
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 - DR VM (FINAL)
echo ============================================
echo.
echo Database: ROA
echo DBID: 1363569330
echo Backups: F:\ROA\autobackup (NFS mount from Proxmox)
echo.
REM Verify F:\ mount is accessible
if not exist F:\ROA\autobackup (
echo ERROR: F:\ROA\autobackup not accessible!
echo Make sure NFS mount is active: mount -o rw,nolock,mtype=hard,timeout=60 10.0.20.202:/mnt/pve/oracle-backups F:
exit /b 1
)
REM Create temp directory
if not exist D:\oracle\temp mkdir D:\oracle\temp
REM Step 1: Shutdown database if running
echo [1/5] Shutting down database if running...
echo SHUTDOWN ABORT; > D:\oracle\temp\shutdown.sql
echo EXIT; >> D:\oracle\temp\shutdown.sql
sqlplus -s / as sysdba @D:\oracle\temp\shutdown.sql > nul 2>&1
timeout /t 2 /nobreak > nul
REM Step 2: Startup NOMOUNT
echo [2/5] 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
timeout /t 3 /nobreak > nul
REM Step 3: Create simplified RMAN script
echo [3/5] Creating RMAN restore script...
set RMAN_SCRIPT=D:\oracle\temp\restore_final.rman
echo SET DBID 1363569330; > %RMAN_SCRIPT%
echo. >> %RMAN_SCRIPT%
echo RUN { >> %RMAN_SCRIPT%
echo ALLOCATE CHANNEL ch1 DEVICE TYPE DISK; >> %RMAN_SCRIPT%
echo SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'F:/ROA/autobackup/%%F'; >> %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%
echo ALTER TABLESPACE TEMP ADD TEMPFILE 'C:\Users\oracle\oradata\ROA\temp01.dbf' SIZE 567M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 32767M; >> %RMAN_SCRIPT%
echo. >> %RMAN_SCRIPT%
echo EXIT; >> %RMAN_SCRIPT%
REM Step 4: Run RMAN restore
echo [4/5] Running RMAN restore (this will take 10-20 minutes)...
rman target / cmdfile=%RMAN_SCRIPT% log=D:\oracle\logs\rman_restore_final.log
REM Step 5: Verify database status
echo.
echo [5/5] Verifying database status...
echo SET PAGESIZE 100 LINESIZE 200 > D:\oracle\temp\verify.sql
echo SELECT 'DB_NAME: ' ^|^| NAME ^|^| ', OPEN_MODE: ' ^|^| OPEN_MODE FROM V$DATABASE; >> D:\oracle\temp\verify.sql
echo SELECT 'INSTANCE: ' ^|^| INSTANCE_NAME ^|^| ', STATUS: ' ^|^| STATUS FROM V$INSTANCE; >> D:\oracle\temp\verify.sql
echo SELECT 'TABLESPACES: ' ^|^| COUNT(*) FROM DBA_TABLESPACES; >> D:\oracle\temp\verify.sql
echo SELECT 'DATAFILES: ' ^|^| COUNT(*) FROM DBA_DATA_FILES; >> D:\oracle\temp\verify.sql
echo SELECT 'TABLES: ' ^|^| COUNT(*) 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 ============================================
echo Database Restore Complete!
echo ============================================
echo.
echo Log: D:\oracle\logs\rman_restore_final.log
echo.
echo Next steps:
echo 1. Test database connectivity
echo 2. Verify application tables
echo 3. Configure RMAN retention
echo 4. Shutdown DR VM to conserve resources
echo.