functions/azure/Sql/Copy-AzSqlDatabase.ps1
function Copy-BcAdminAzSqlDatabase { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$ResourceGroupName, [Parameter(Mandatory = $true)] [string]$ServerName, [Parameter(Mandatory = $true)] [string]$SourceDatabaseName, [Parameter(Mandatory = $true)] [string]$TargetDatabaseName, [Parameter(Mandatory = $false)] [string]$ElasticPoolName, [Parameter(Mandatory = $false)] [int]$TimeoutSeconds = 3600, [Alias('ForceOverwrite')] [switch]$Force ) # Prüfen, ob Zieldatenbank existiert $existingDb = Get-BcAdminAzSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $TargetDatabaseName -ErrorAction SilentlyContinue if ($existingDb) { Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Die Zieldatenbank '$TargetDatabaseName' existiert bereits." if (-not ($Force)) { $response = Read-Host "Datenbank löschen und fortfahren? (y/n)" if ($response -ne "y") { Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Abbruch durch Benutzer." return $false } } # Löschen der Datenbank $success = Remove-BcAdminAzSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $TargetDatabaseName -Force | Out-Null if (-not $success) { Write-Warning "Remove-BcAdminAzSqlDatabase failed!" return $false } # Auf Löschung warten do { Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Warte auf Löschung..." Start-Sleep -Seconds 5 $existingDb = Get-BcAdminAzSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $TargetDatabaseName -ErrorAction SilentlyContinue } while ($existingDb) Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Datenbank erfolgreich gelöscht." } # Kopiervorgang starten Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Starte Kopiervorgang..." $copyParams = @{ ResourceGroupName = $ResourceGroupName ServerName = $ServerName DatabaseName = $SourceDatabaseName CopyDatabaseName = $TargetDatabaseName } if (-not ([string]::IsNullOrWhiteSpace($ElasticPoolName))) { $copyParams += @{ ElasticPoolName = $ElasticPoolName } } $response = New-BcAdminAzSqlDatabaseCopy @copyParams if ($null -eq $response) { Write-Warning "New-BcAdminAzSqlDatabaseCopy response IS NULL!" return $false } Write-Verbose "New-BcAdminAzSqlDatabaseCopy response: $response" # Auf Abschluss warten $waitresponse = Wait-BcAdminAzOperation -OperationUri $response.Headers.Location[0] -PollIntervalSeconds ([int]$response.Headers.'Retry-After'[0]) -TimeoutSeconds $TimeoutSeconds if (-not $waitresponse) { Write-Warning "Kopiervorgang fehlgeschlagen oder noch nicht abgeschlossen. Warten abgebrochen" return $false } Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Kopiervorgang abgeschlossen. Die Datenbank '$TargetDatabaseName' ist jetzt online." $newDatabase = Get-BcAdminAzSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $TargetDatabaseName return $newDatabase } Set-Alias -Name Copy-AzSqlDatabase -Value Copy-BcAdminAzSqlDatabase -Description 'Prevent breaking scripts using Copy-AzSqlDatabase after function has been renamed (2025-06-09).' |