CorpXeno

1 Apr 2023

Automating Azure SQL Managed Instance restore using Azure-CLI

Azure SQL Database

Connect-AzAccount #Store Source DB instance subscription ID in a variable. Please note this should be subscription ID and NOT the subscription name $SourceSubscriptionID = "xxxx-xxxx-xxxx-xxxx-xxxx"

#Set the AZ context to source subscription Set-AzContext -Subscription $SourceSubscriptionID

#Store Source DB instance in a variable, DO NOT use FQDN. Remove the suffix .73495ah*****.database.windows.net $SourceInstanceName = “xxxxxx”

#Store Source resource group name in a variable $SourceResourceGroupName = “rg-xxxxx”

#Store source DB names list in a variable $sourceDatabase = Get-AzSqlInstanceDatabase -InstanceName $SourceInstanceName -ResourceGroupName $SourceResourceGroupName

#Store Destination DB instance subscription ID in a variable. Please note this should be subscription ID and NOT the subscription name $DestinationSubscriptionID = “xxxx-xxxx-xxxx-xxxx-xxxx”

#Set the AZ context to Destination subscription Set-AzContext -Subscription $DestinationSubscriptionID

#Store Source resource group name in a variable $DestinationResourceGroupName = “xxxxx”

#Store Source DB instance in a variable, DO NOT use FQDN. Remove the suffix .73495ah*****.database.windows.net $DestinationInstanceName = “xxxx”

#Store Destination DB names list in a variable $DestDatabase = Get-AzSqlInstanceDatabase -InstanceName $DestinationInstanceName -ResourceGroupName $DestinationResourceGroupName

#Write-Output $DestDatabase.name #Write-Output $sourceDatabase.name

# Point int time to which destination DBs need to be restored with source copy YYYY-MM-DD $pointInTime = “2023-10-16T12:00:00.000Z”

#This loop will restore each DB present in destination instance from the source foreach ($sdb in $sourceDatabase.Name) { foreach ($ddb in $DestDatabase.Name) { if ($sdb -eq $ddb) { Remove-AzSqlInstanceDatabase -Name $sdb -InstanceName $DestinationInstanceName -ResourceGroupName $DestinationResourceGroupName -Force

Restore-AzSqlInstanceDatabase -FromPointInTimeBackup -SubscriptionId $SourceSubscriptionID -ResourceGroupName $SourceResourceGroupName -InstanceName $SourceInstanceName -Name $sdb -PointInTime $pointInTime -TargetInstanceDatabaseName $sdb -TargetInstanceName $DestinationInstanceName -TargetResourceGroupName $DestinationResourceGroupName ` -TargetSubscriptionId $DestinationSubscriptionID

#break from the if loop break

} } }

#Store if any extra DBs present at source SQL MI which also needs to be copied over to destination SQL MI $ExtraDB = @(‘db_1’,‘db_2’,‘db_3’,‘db_4’)

For ($i=0; $i -lt $ExtraDB.Length; $i++) { #Write-Output $ExtraDB[$i]

Restore-AzSqlInstanceDatabase -FromPointInTimeBackup -SubscriptionId $SourceSubscriptionID -ResourceGroupName $SourceResourceGroupName -InstanceName $SourceInstanceName -Name $ExtraDB[$i] -PointInTime $pointInTime -TargetInstanceDatabaseName $ExtraDB[$i] -TargetInstanceName $DestinationInstanceName -TargetResourceGroupName $DestinationResourceGroupName ` -TargetSubscriptionId $DestinationSubscriptionID

}