Oracle DR: Complete migration to PowerShell scripts and cleanup

Changes:
- Remove obsolete .cmd scripts (cleanup_database.cmd, rman_restore_from_zero.cmd, rman_restore_final.cmd)
- Update weekly-dr-test-proxmox.sh to call PowerShell scripts with /SILENT parameter
- Add initROA.ora configuration file for reference

All DR test scripts now use PowerShell for SSH compatibility
Resolves input redirection issues with Windows SSH

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
Marius
2025-10-11 01:47:39 +03:00
parent 2f8c927bbe
commit 026b0436ba
5 changed files with 35 additions and 438 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -400,7 +400,7 @@ run_dr_test() {
log "STEP 6: Running cleanup" log "STEP 6: Running cleanup"
ssh -p "$DR_VM_PORT" "$DR_VM_USER@$DR_VM_IP" \ 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 cleanup_freed=8
track_step "Cleanup" true "Database cleaned, ~${cleanup_freed}GB freed" "$step_start" track_step "Cleanup" true "Database cleaned, ~${cleanup_freed}GB freed" "$step_start"