diff --git a/oracle/standby-server-scripts/cleanup_database.cmd b/oracle/standby-server-scripts/cleanup_database.cmd deleted file mode 100644 index 9fb7312..0000000 --- a/oracle/standby-server-scripts/cleanup_database.cmd +++ /dev/null @@ -1,102 +0,0 @@ -@echo off -REM Oracle Database Complete Cleanup Script -REM Purpose: Remove all database files and services to restore DR VM to clean state -REM Run as: Administrator -REM Location: D:\oracle\scripts\cleanup_database.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 Oracle Database Cleanup Script -echo ============================================ -echo. -echo This script will: -echo 1. Stop and delete Oracle service -echo 2. Delete all database files (datafiles, control files, redo logs) -echo 3. Delete local FRA (backups are on F:\, safe to delete) -echo 4. Delete trace files -echo 5. Leave VM in completely clean state (no service, no DB files) -echo. -echo WARNING: This will DELETE the entire database! -echo Starting cleanup in 3 seconds... (Press Ctrl+C to cancel) -timeout /t 3 /nobreak > nul - -REM Create temp directory -if not exist D:\oracle\temp mkdir D:\oracle\temp -if not exist D:\oracle\logs mkdir D:\oracle\logs - -echo. -echo [1/6] Shutting down database (if running)... -echo SHUTDOWN ABORT; > D:\oracle\temp\cleanup_shutdown.sql -echo EXIT; >> D:\oracle\temp\cleanup_shutdown.sql -sqlplus -s / as sysdba @D:\oracle\temp\cleanup_shutdown.sql > nul 2>&1 -timeout /t 3 /nobreak > nul - -echo [2/6] Stopping and deleting Oracle service + registry + instance... -REM Method 1: Use oradim to delete Oracle instance (recommended) -set ORACLE_HOME=C:\Users\Administrator\Downloads\WINDOWS.X64_193000_db_home -set PATH=%ORACLE_HOME%\bin;%PATH% -oradim -delete -sid ROA >nul 2>&1 -echo Oracle instance deleted with oradim - -REM Method 2: Delete service directly (backup method) -sc query OracleServiceROA > nul 2>&1 -if %errorlevel% equ 0 ( - sc stop OracleServiceROA > nul 2>&1 - timeout /t 2 /nobreak > nul - sc delete OracleServiceROA > nul 2>&1 - echo Oracle service deleted with sc -) - -REM Method 3: Delete Oracle registry keys (ensures clean state) -reg delete "HKLM\SOFTWARE\ORACLE\KEY_OraDB19Home1" /v ORA_ROA_PFILE /f >nul 2>&1 -reg delete "HKLM\SOFTWARE\ORACLE\KEY_OraDB19Home1" /v ORA_ROA_AUTOSTART /f >nul 2>&1 -reg delete "HKLM\SOFTWARE\ORACLE\KEY_OraDB19Home1" /v ORA_ROA_SHUTDOWN /f >nul 2>&1 -reg delete "HKLM\SOFTWARE\ORACLE\KEY_OraDB19Home1" /v ORA_ROA_SHUTDOWNTYPE /f >nul 2>&1 -reg delete "HKLM\SOFTWARE\ORACLE\KEY_OraDB19Home1" /v ORA_ROA_SHUTDOWN_TIMEOUT /f >nul 2>&1 -echo Registry keys cleaned -timeout /t 2 /nobreak > nul - -echo [3/6] Deleting database files... -echo Deleting datafiles... -del /Q C:\Users\oracle\oradata\ROA\*.dbf 2>nul -echo Deleting control files... -del /Q C:\Users\oracle\oradata\ROA\*.ctl 2>nul -echo Deleting redo logs... -del /Q C:\Users\oracle\oradata\ROA\*.log 2>nul - -echo [4/6] Deleting local FRA (backups are on F:\)... -if exist C:\Users\oracle\recovery_area\ROA ( - rmdir /S /Q C:\Users\oracle\recovery_area\ROA 2>nul - mkdir C:\Users\oracle\recovery_area\ROA - echo FRA cleared -) else ( - mkdir C:\Users\oracle\recovery_area\ROA 2>nul - echo FRA directory created -) - -echo [5/6] Deleting trace files (to save space)... -del /Q C:\Users\oracle\diag\rdbms\roa\ROA\trace\*.trc 2>nul -del /Q C:\Users\oracle\diag\rdbms\roa\ROA\trace\*.trm 2>nul -echo Trace files deleted - -echo. -echo ============================================ -echo Database Cleanup Complete! -echo ============================================ -echo. -echo Current state: -echo [YES] Oracle software installed -echo [YES] PFILE exists (C:\Users\oracle\admin\ROA\pfile\initROA.ora) -echo [NO] Oracle service (will be created during restore) -echo [NO] Database files (will be restored from backups) -echo [NO] Control files (will be restored from backups) -echo [NO] Datafiles (will be restored from backups) -echo. -echo VM is now in COMPLETELY CLEAN STATE! -echo. -echo Next step: Run D:\oracle\scripts\rman_restore_from_zero.cmd -echo (It will create the Oracle service and restore the database) -echo. diff --git a/oracle/standby-server-scripts/initROA.ora b/oracle/standby-server-scripts/initROA.ora new file mode 100644 index 0000000..2615e45 --- /dev/null +++ b/oracle/standby-server-scripts/initROA.ora @@ -0,0 +1,34 @@ +# Initialization Parameters for ROA Database - DR VM +# Generated: 2025-10-09 04:07:45 + +# Database Identification +db_name=ROA +db_unique_name=ROA + +# Memory Configuration +memory_target=1024M +memory_max_target=1024M + +# File Locations +control_files=('C:\Users\oracle\oradata\ROA\control01.ctl', 'C:\Users\oracle\recovery_area\ROA\control02.ctl') +db_recovery_file_dest='C:\Users\oracle\recovery_area' +db_recovery_file_dest_size=20G +audit_file_dest='C:\Users\oracle\admin\ROA\adump' + +# Redo and Archive Log +log_archive_format=%t_%s_%r.dbf + +# Compatibility +compatible=19.0.0 + +# Character Set +nls_language=AMERICAN +nls_territory=AMERICA + +# Processes and Sessions +processes=300 +sessions=472 + +# Miscellaneous +diagnostic_dest='C:\Users\oracle' +_allow_resetlogs_corruption=TRUE diff --git a/oracle/standby-server-scripts/rman_restore_final.cmd b/oracle/standby-server-scripts/rman_restore_final.cmd deleted file mode 100644 index ae8c310..0000000 --- a/oracle/standby-server-scripts/rman_restore_final.cmd +++ /dev/null @@ -1,109 +0,0 @@ -@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. diff --git a/oracle/standby-server-scripts/rman_restore_from_zero.cmd b/oracle/standby-server-scripts/rman_restore_from_zero.cmd deleted file mode 100644 index 2c4a473..0000000 --- a/oracle/standby-server-scripts/rman_restore_from_zero.cmd +++ /dev/null @@ -1,226 +0,0 @@ -@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. diff --git a/oracle/standby-server-scripts/weekly-dr-test-proxmox.sh b/oracle/standby-server-scripts/weekly-dr-test-proxmox.sh index 3819429..bc11250 100644 --- a/oracle/standby-server-scripts/weekly-dr-test-proxmox.sh +++ b/oracle/standby-server-scripts/weekly-dr-test-proxmox.sh @@ -400,7 +400,7 @@ run_dr_test() { log "STEP 6: Running cleanup" ssh -p "$DR_VM_PORT" "$DR_VM_USER@$DR_VM_IP" \ - "D:\\oracle\\scripts\\cleanup_database.cmd" 2>/dev/null + "powershell -ExecutionPolicy Bypass -File D:\\oracle\\scripts\\cleanup_database.ps1 /SILENT" 2>/dev/null cleanup_freed=8 track_step "Cleanup" true "Database cleaned, ~${cleanup_freed}GB freed" "$step_start"