scripts/win/docker/restore.ps1
Clear-Host # ╭────────────────────────────────────────────────────────╮ # │ SQL Server Docker Database Provision & Restore │ # ╰────────────────────────────────────────────────────────╯ Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor DarkCyan Write-Host " SQL Server Docker Database Provision & Restore" -ForegroundColor Cyan Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor DarkCyan Write-Host "" . "$env:BORG_ROOT\config\globalfn.ps1" # Switching to sql work folder while preserving the current location to switch back $currentLocation = (Get-Location).Path if (Test-Path $sqlBackupFolder) { Set-Location $sqlBackupFolder } # Step 1: Create container Write-Host "" Write-Host " Step 1: Creating SQL Server $ContainerName container..." -ForegroundColor Cyan & "$dockerFolder\clean.ps1" & "$dockerFolder\sql-container.ps1" # Step 2: Upload backup Write-Host " Step 2: Uploading backup file to container..." -ForegroundColor Cyan $result = & "$dockerFolder\upload.ps1" if (-not $result) { Write-Host " Upload or selection failed." -ForegroundColor Red exit 1 } # Step 3: Wait for SQL to be ready Write-Host "" Write-Host " Step 3: Waiting for SQL Server to initialize..." -ForegroundColor Cyan $ready = $false $timeout = 600 $startTime = Get-Date $attempt = 1 while (-not $ready) { try { $logOutput = docker logs $ContainerName if ($logOutput -match "SQL Server is now ready for client connections") { Write-Host " SQL Server in '$ContainerName' is ready." -ForegroundColor Green $ready = $true } else { Write-Host " Attempt $attempt - SQL not ready yet..." -ForegroundColor DarkYellow Start-Sleep -Seconds 1 $attempt++ } } catch { Write-Host " Error while checking logs: $_" -ForegroundColor Red Start-Sleep -Seconds 5 } $elapsed = (Get-Date) - $startTime if ($elapsed.TotalSeconds -ge $timeout) { Write-Host " SQL Server failed to initialize within 10 minutes." -ForegroundColor Red exit 1 } } Start-Sleep -Seconds 2 switch ($result.Type) { "bacpac" { Write-Host " Step 4: Restoring database from bacpac: '$result.Path'..." -ForegroundColor Cyan & "$dockerFolder\sql-restore-bacpac.ps1" -BacpacPath $result.Path } "bak" { $fileNameOnly = [System.IO.Path]::GetFileName($result.Path) Write-Host " Step 4: Restoring database from bak: '$fileNameOnly'..." -ForegroundColor Cyan & "$dockerFolder\sql-restore.ps1" $containerName $fileNameOnly } default { Write-Host " Unknown restore type: $($result.Type)" -ForegroundColor Red exit 1 } } # 🔚 Restore working location Set-Location $currentLocation # Completion banner Write-Host "`n All steps completed successfully!" -ForegroundColor Green Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor DarkCyan Write-Host " SQL Container & Restore Operation Finished" -ForegroundColor Cyan Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor DarkCyan |