Oracle DR: Optimize test speed by preserving service between tests

Performance improvements:
- cleanup_database.ps1: Skip service deletion (saves ~25s per test)
  - Remove oradim -delete, sc.exe delete, registry cleanup
  - Add SPFILE deletion to ensure PFILE-based startup
  - Service now persists between tests for reuse

- rman_restore_from_zero.ps1: Smart service check (saves ~15s per test)
  - Check if service exists before creating
  - Skip oradim -new if service already present
  - Only create service on first run or if missing

Total time savings: ~40 seconds per weekly DR test
Service lifecycle: Created once, reused indefinitely until manual cleanup

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
Marius
2025-10-11 10:59:43 +03:00
parent 3a51880c9e
commit 5bed910b1c
2 changed files with 31 additions and 43 deletions

View File

@@ -59,40 +59,18 @@ if ($service) {
} }
Start-Sleep -Seconds 2 Start-Sleep -Seconds 2
Write-Host "[2/6] Stopping and deleting Oracle service + registry + instance..." Write-Host "[2/6] Oracle service cleanup skipped (service preserved for next test)"
Write-Host " Service will be reused for faster subsequent restores (~15s saved)"
# Method 1: Use oradim to delete Oracle instance Write-Host "[3/6] Deleting database files + SPFILE..."
$env:ORACLE_HOME = "C:\Users\Administrator\Downloads\WINDOWS.X64_193000_db_home"
$env:PATH = "$env:ORACLE_HOME\bin;$env:PATH"
& oradim -delete -sid ROA 2>&1 | Out-Null
Write-Host " Oracle instance deleted with oradim"
# Method 2: Delete service directly (backup method)
$service = Get-Service -Name "OracleServiceROA" -ErrorAction SilentlyContinue
if ($service) {
Stop-Service -Name "OracleServiceROA" -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
& sc.exe delete OracleServiceROA 2>&1 | Out-Null
Write-Host " Oracle service deleted with sc"
}
# Method 3: Delete Oracle registry keys
$regPath = "HKLM:\SOFTWARE\ORACLE\KEY_OraDB19Home1"
Remove-ItemProperty -Path $regPath -Name "ORA_ROA_PFILE" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $regPath -Name "ORA_ROA_AUTOSTART" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $regPath -Name "ORA_ROA_SHUTDOWN" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $regPath -Name "ORA_ROA_SHUTDOWNTYPE" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $regPath -Name "ORA_ROA_SHUTDOWN_TIMEOUT" -ErrorAction SilentlyContinue
Write-Host " Registry keys cleaned"
Start-Sleep -Seconds 2
Write-Host "[3/6] Deleting database files..."
Write-Host " Deleting datafiles..." Write-Host " Deleting datafiles..."
Remove-Item "C:\Users\oracle\oradata\ROA\*.dbf" -Force -ErrorAction SilentlyContinue Remove-Item "C:\Users\oracle\oradata\ROA\*.dbf" -Force -ErrorAction SilentlyContinue
Write-Host " Deleting control files..." Write-Host " Deleting control files..."
Remove-Item "C:\Users\oracle\oradata\ROA\*.ctl" -Force -ErrorAction SilentlyContinue Remove-Item "C:\Users\oracle\oradata\ROA\*.ctl" -Force -ErrorAction SilentlyContinue
Write-Host " Deleting redo logs..." Write-Host " Deleting redo logs..."
Remove-Item "C:\Users\oracle\oradata\ROA\*.log" -Force -ErrorAction SilentlyContinue Remove-Item "C:\Users\oracle\oradata\ROA\*.log" -Force -ErrorAction SilentlyContinue
Write-Host " Deleting SPFILE (ensures PFILE-based startup)..."
Remove-Item "$env:ORACLE_HOME\database\SPFILE*.ORA" -Force -ErrorAction SilentlyContinue
Write-Host "[4/6] Deleting local FRA (backups are on F:\)..." Write-Host "[4/6] Deleting local FRA (backups are on F:\)..."
if (Test-Path "C:\Users\oracle\recovery_area\ROA") { if (Test-Path "C:\Users\oracle\recovery_area\ROA") {
@@ -117,15 +95,16 @@ Write-Host ""
Write-Host "Current state:" Write-Host "Current state:"
Write-Host " [YES] Oracle software installed" Write-Host " [YES] Oracle software installed"
Write-Host " [YES] PFILE exists (C:\Users\oracle\admin\ROA\pfile\initROA.ora)" Write-Host " [YES] PFILE exists (C:\Users\oracle\admin\ROA\pfile\initROA.ora)"
Write-Host " [NO] Oracle service (will be created during restore)" Write-Host " [YES] Oracle service (preserved, will be reused)"
Write-Host " [NO] SPFILE (deleted to ensure PFILE startup)"
Write-Host " [NO] Database files (will be restored from backups)" Write-Host " [NO] Database files (will be restored from backups)"
Write-Host " [NO] Control files (will be restored from backups)" Write-Host " [NO] Control files (will be restored from backups)"
Write-Host " [NO] Datafiles (will be restored from backups)" Write-Host " [NO] Datafiles (will be restored from backups)"
Write-Host "" Write-Host ""
Write-Host "VM is now in COMPLETELY CLEAN STATE!" Write-Host "VM is now in CLEAN STATE (service preserved)!"
Write-Host "" Write-Host ""
Write-Host "Next step: Run D:\oracle\scripts\rman_restore_from_zero.ps1" Write-Host "Next step: Run D:\oracle\scripts\rman_restore_from_zero.ps1"
Write-Host " (It will create the Oracle service and restore the database)" Write-Host " (It will reuse the existing Oracle service and restore the database)"
Write-Host "" Write-Host ""
exit 0 exit 0

View File

@@ -81,21 +81,30 @@ Write-Host "STEP 2: RESTORE - Restore from F:\ backups"
Write-Host "============================================" Write-Host "============================================"
Write-Host "" Write-Host ""
# Step 2.1: Create Oracle service # Step 2.1: Check Oracle service (create only if missing)
Write-Host "[2.1] Creating Oracle service from PFILE..." Write-Host "[2.1] Checking Oracle service..."
if (-not (Test-Path "C:\Users\oracle\admin\ROA\pfile\initROA.ora")) { $service = Get-Service -Name "OracleServiceROA" -ErrorAction SilentlyContinue
if ($service) {
Write-Host "[OK] Oracle service already exists, skipping creation (15s saved!)" -ForegroundColor Green
Write-Host " Service will be reused for this restore"
} else {
Write-Host " Oracle service not found, creating from PFILE..."
if (-not (Test-Path "C:\Users\oracle\admin\ROA\pfile\initROA.ora")) {
Write-Host "ERROR: PFILE not found at C:\Users\oracle\admin\ROA\pfile\initROA.ora" -ForegroundColor Red Write-Host "ERROR: PFILE not found at C:\Users\oracle\admin\ROA\pfile\initROA.ora" -ForegroundColor Red
Write-Host "Cannot create Oracle service without PFILE!" Write-Host "Cannot create Oracle service without PFILE!"
exit 1 exit 1
} }
& oradim -new -sid ROA -startmode auto -pfile "C:\Users\oracle\admin\ROA\pfile\initROA.ora" 2>&1 | Out-Null & oradim -new -sid ROA -startmode auto -pfile "C:\Users\oracle\admin\ROA\pfile\initROA.ora" 2>&1 | Out-Null
if ($LASTEXITCODE -ne 0) { if ($LASTEXITCODE -ne 0) {
Write-Host "ERROR: Failed to create Oracle service" -ForegroundColor Red Write-Host "ERROR: Failed to create Oracle service" -ForegroundColor Red
exit 1 exit 1
}
Write-Host "[OK] Oracle service created successfully (AUTOMATIC startup)"
Start-Sleep -Seconds 2
} }
Write-Host "[OK] Oracle service created successfully (AUTOMATIC startup)"
Start-Sleep -Seconds 2
# Step 2.2: Startup NOMOUNT # Step 2.2: Startup NOMOUNT
Write-Host "[2.2] Starting database in NOMOUNT mode..." Write-Host "[2.2] Starting database in NOMOUNT mode..."