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
110 lines
4.4 KiB
Batchfile
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.
|