functions/azure/Copy-AzSqlDatabase.ps1
function Copy-AzSqlDatabase { param ( [Parameter(Mandatory)] [string]$ResourceGroupName, [Parameter(Mandatory)] [string]$ServerName, [Parameter(Mandatory)] [string]$SourceDatabaseName, [Parameter(Mandatory)] [string]$TargetDatabaseName, [Parameter(Mandatory)] [string]$ElasticPoolName, [switch]$ForceOverwrite ) # Prüfen, ob Zieldatenbank existiert $existingDb = Get-AzSqlDatabase -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 ($ForceOverwrite)) { $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 } } # Löschen der Datenbank Remove-AzSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $TargetDatabaseName -Force | Out-Null # Auf Löschung warten do { Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Warte auf Löschung..." Start-Sleep -Seconds 5 $existingDb = Get-AzSqlDatabase -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..." New-AzSqlDatabaseCopy ` -ResourceGroupName $ResourceGroupName ` -ServerName $ServerName ` -DatabaseName $SourceDatabaseName ` -CopyDatabaseName $TargetDatabaseName ` -ElasticPoolName $ElasticPoolName | Out-Null # Auf Abschluss warten do { Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Warte auf Abschluss des Kopiervorgangs..." Start-Sleep -Seconds 10 $status = Get-AzSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $TargetDatabaseName -ErrorAction SilentlyContinue $state = $status.Status Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Aktueller Status: $state" } while ($state -ne "Online") Write-Host "[$((Get-Date).ToString('HH:mm:ss'))] Kopiervorgang abgeschlossen. Die Datenbank '$TargetDatabaseName' ist jetzt online." } |