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
This commit is contained in:
200
oracle/standby-server-scripts/rman_restore_from_zero.cmd
Normal file
200
oracle/standby-server-scripts/rman_restore_from_zero.cmd
Normal file
@@ -0,0 +1,200 @@
|
||||
@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%
|
||||
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%
|
||||
|
||||
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 ============================================
|
||||
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.
|
||||
Reference in New Issue
Block a user