diff --git a/oracle/standby-server-scripts/rman_restore_from_zero.ps1 b/oracle/standby-server-scripts/rman_restore_from_zero.ps1 index f89808f..19b379e 100644 --- a/oracle/standby-server-scripts/rman_restore_from_zero.ps1 +++ b/oracle/standby-server-scripts/rman_restore_from_zero.ps1 @@ -88,7 +88,51 @@ $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" - Write-Host " Note: Service status is $($service.Status) (OK - will be started by NOMOUNT)" + + # Ensure service is running (required for SQL*Plus connection) + if ($service.Status -ne "Running") { + Write-Host " Service is stopped, starting it (may take 30-60 seconds)..." + + # Start service in background job to avoid blocking + $startJob = Start-Job -ScriptBlock { + Start-Service -Name "OracleServiceROA" -ErrorAction SilentlyContinue + } + + # Poll for service status with timeout + $maxWait = 60 + $elapsed = 0 + $pollInterval = 3 + $serviceStarted = $false + + while ($elapsed -lt $maxWait) { + Start-Sleep -Seconds $pollInterval + $elapsed += $pollInterval + + # Refresh service status + $currentService = Get-Service -Name "OracleServiceROA" -ErrorAction SilentlyContinue + if ($currentService -and $currentService.Status -eq "Running") { + $serviceStarted = $true + Write-Host " [OK] Service started successfully after $elapsed seconds" + break + } + + if ($elapsed % 15 -eq 0) { + Write-Host " Still waiting for service to start... ($elapsed/$maxWait seconds)" + } + } + + # Cleanup background job + Stop-Job -Job $startJob -ErrorAction SilentlyContinue + Remove-Job -Job $startJob -ErrorAction SilentlyContinue + + if (-not $serviceStarted) { + Write-Host " WARNING: Service did not start within $maxWait seconds" -ForegroundColor Yellow + Write-Host " This may cause SQL*Plus connection issues (ORA-12560)" + Write-Host " Attempting to continue anyway..." + } + } else { + Write-Host " Service is already running" + } } else { Write-Host " Oracle service not found, creating from PFILE..."