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:
@@ -59,40 +59,18 @@ if ($service) {
|
||||
}
|
||||
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
|
||||
$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 "[3/6] Deleting database files + SPFILE..."
|
||||
Write-Host " Deleting datafiles..."
|
||||
Remove-Item "C:\Users\oracle\oradata\ROA\*.dbf" -Force -ErrorAction SilentlyContinue
|
||||
Write-Host " Deleting control files..."
|
||||
Remove-Item "C:\Users\oracle\oradata\ROA\*.ctl" -Force -ErrorAction SilentlyContinue
|
||||
Write-Host " Deleting redo logs..."
|
||||
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:\)..."
|
||||
if (Test-Path "C:\Users\oracle\recovery_area\ROA") {
|
||||
@@ -117,15 +95,16 @@ Write-Host ""
|
||||
Write-Host "Current state:"
|
||||
Write-Host " [YES] Oracle software installed"
|
||||
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] Control files (will be restored from backups)"
|
||||
Write-Host " [NO] Datafiles (will be restored from backups)"
|
||||
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 "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 ""
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -81,21 +81,30 @@ Write-Host "STEP 2: RESTORE - Restore from F:\ backups"
|
||||
Write-Host "============================================"
|
||||
Write-Host ""
|
||||
|
||||
# Step 2.1: Create Oracle service
|
||||
Write-Host "[2.1] Creating Oracle service 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 "Cannot create Oracle service without PFILE!"
|
||||
exit 1
|
||||
}
|
||||
# Step 2.1: Check Oracle service (create only if missing)
|
||||
Write-Host "[2.1] Checking Oracle service..."
|
||||
$service = Get-Service -Name "OracleServiceROA" -ErrorAction SilentlyContinue
|
||||
|
||||
& oradim -new -sid ROA -startmode auto -pfile "C:\Users\oracle\admin\ROA\pfile\initROA.ora" 2>&1 | Out-Null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "ERROR: Failed to create Oracle service" -ForegroundColor Red
|
||||
exit 1
|
||||
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 "Cannot create Oracle service without PFILE!"
|
||||
exit 1
|
||||
}
|
||||
|
||||
& oradim -new -sid ROA -startmode auto -pfile "C:\Users\oracle\admin\ROA\pfile\initROA.ora" 2>&1 | Out-Null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "ERROR: Failed to create Oracle service" -ForegroundColor Red
|
||||
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
|
||||
Write-Host "[2.2] Starting database in NOMOUNT mode..."
|
||||
|
||||
Reference in New Issue
Block a user