Skip to content

Commit a833c07

Browse files
authored
Merge pull request #10241 from djnisic/master
Adding support for restore of deleted managed databases.
2 parents a89f0e5 + 1ceff6d commit a833c07

File tree

12 files changed

+8188
-151536
lines changed

12 files changed

+8188
-151536
lines changed

src/Sql/Sql.Test/ScenarioTests/ManagedDatabaseCrudScenarioTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ public void TestRestoreManagedDatabase()
6767
RunPowerShellTest("Test-RestoreManagedDatabase");
6868
}
6969

70+
[Fact]
71+
[Trait(Category.AcceptanceType, Category.CheckIn)]
72+
public void TestRestoreDeletedManagedDatabase()
73+
{
74+
RunPowerShellTest("Test-RestoreDeletedManagedDatabase");
75+
}
76+
7077
[Fact]
7178
[Trait(Category.AcceptanceType, Category.CheckIn)]
7279
public void TestGetManagedDatabaseGeoBackup()

src/Sql/Sql.Test/ScenarioTests/ManagedDatabaseCrudScenarioTests.ps1

Lines changed: 91 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ function Test-RestoreManagedDatabase
219219
$targetManagedDatabaseName = Get-ManagedDatabaseName
220220
$pointInTime = (Get-date).AddMinutes(5)
221221

222-
# Wait for 450 seconds for restore to be ready
222+
# Once database is created, backup service will automaticly take log backups every 5 minutes. We are waiting 450s to ensure backups are taken to which we can restore.
223223
Wait-Seconds 450
224224

225225
# restore managed database to the same instance
@@ -239,6 +239,94 @@ function Test-RestoreManagedDatabase
239239
finally
240240
{
241241
Remove-ResourceGroupForTest $rg
242+
Remove-ResourceGroupForTest $rg2
243+
}
244+
}
245+
246+
<#
247+
.SYNOPSIS
248+
Tests restoring a managed database
249+
#>
250+
function Test-RestoreDeletedManagedDatabase
251+
{
252+
# Setup
253+
$rg = Create-ResourceGroupForTest
254+
$rg2 = Create-ResourceGroupForTest
255+
$vnetName = "cl_initial"
256+
$subnetName = "Cool"
257+
258+
# Setup VNET
259+
$virtualNetwork1 = CreateAndGetVirtualNetworkForManagedInstance $vnetName $subnetName $rg.Location
260+
$subnetId = $virtualNetwork1.Subnets.where({ $_.Name -eq $subnetName })[0].Id
261+
262+
$managedInstance = Create-ManagedInstanceForTest $rg $subnetId
263+
$managedInstance2 = Create-ManagedInstanceForTest $rg2 $subnetId
264+
265+
try
266+
{
267+
# Create with all values
268+
$managedDatabaseName = Get-ManagedDatabaseName
269+
$collation = "SQL_Latin1_General_CP1_CI_AS"
270+
$job1 = New-AzSqlInstanceDatabase -ResourceGroupName $rg.ResourceGroupName -InstanceName $managedInstance.ManagedInstanceName -Name $managedDatabaseName -Collation $collation -AsJob
271+
$job1 | Wait-Job
272+
$db = $job1.Output
273+
274+
Assert-AreEqual $db.Name $managedDatabaseName
275+
276+
$targetManagedDatabaseName1 = Get-ManagedDatabaseName
277+
$targetManagedDatabaseName2 = Get-ManagedDatabaseName
278+
$targetManagedDatabaseName3 = Get-ManagedDatabaseName
279+
$targetManagedDatabaseName4 = Get-ManagedDatabaseName
280+
$targetManagedDatabaseName5 = Get-ManagedDatabaseName
281+
282+
# Once database is created, backup service will automatically take log backups every 5 minutes. We are waiting 450s to ensure backups are taken to which we can restore.
283+
Wait-Seconds 450
284+
285+
# Test remove using all parameters
286+
Remove-AzSqlInstanceDatabase -ResourceGroupName $rg.ResourceGroupName -InstanceName $managedInstance.ManagedInstanceName -Name $managedDatabaseName -Force
287+
288+
# Get deleted database
289+
$deletedDatabases = Get-AzSqlDeletedInstanceDatabaseBackup -ResourceGroupName $rg.ResourceGroupName -InstanceName $managedInstance.ManagedInstanceName -DatabaseName $managedDatabaseName
290+
291+
# restore managed database to the same instance
292+
$restoredDb1 = Restore-AzSqlInstanceDatabase -FromPointInTimeBackup -ResourceGroupName $rg.ResourceGroupName -InstanceName $managedInstance.ManagedInstanceName -Name $managedDatabaseName -DeletionDate $deletedDatabases[0].DeletionDate -PointInTime $deletedDatabases[0].EarliestRestorePoint -TargetInstanceDatabaseName $targetManagedDatabaseName1
293+
Assert-NotNull $restoredDb1
294+
Assert-AreEqual $restoredDb1.Name $targetManagedDatabaseName1
295+
Assert-AreEqual $restoredDb1.ResourceGroupName $rg.ResourceGroupName
296+
Assert-AreEqual $restoredDb1.ManagedInstanceName $managedInstance.ManagedInstanceName
297+
298+
# restore managed database to the another instance, different resource group and managed instance
299+
$restoredDb2 = Restore-AzSqlInstanceDatabase -FromPointInTimeBackup -ResourceGroupName $rg.ResourceGroupName -InstanceName $managedInstance.ManagedInstanceName -Name $managedDatabaseName -DeletionDate $deletedDatabases[0].DeletionDate -PointInTime $deletedDatabases[0].EarliestRestorePoint -TargetInstanceDatabaseName $targetManagedDatabaseName2 -TargetInstanceName $managedInstance2.ManagedInstanceName -TargetResourceGroupName $rg2.ResourceGroupName
300+
Assert-NotNull $restoredDb2
301+
Assert-AreEqual $restoredDb2.Name $targetManagedDatabaseName2
302+
Assert-AreEqual $restoredDb2.ResourceGroupName $rg2.ResourceGroupName
303+
Assert-AreEqual $restoredDb2.ManagedInstanceName $managedInstance2.ManagedInstanceName
304+
305+
# restore managed database to the same instance using InputObject
306+
$restoredDb3 = Restore-AzSqlInstanceDatabase -FromPointInTimeBackup -InputObject $deletedDatabases[0] -PointInTime $deletedDatabases[0].EarliestRestorePoint -TargetInstanceDatabaseName $targetManagedDatabaseName3
307+
Assert-NotNull $restoredDb3
308+
Assert-AreEqual $restoredDb3.Name $targetManagedDatabaseName3
309+
Assert-AreEqual $restoredDb3.ResourceGroupName $rg.ResourceGroupName
310+
Assert-AreEqual $restoredDb3.ManagedInstanceName $managedInstance.ManagedInstanceName
311+
312+
# restore managed database to the same instance using ResourceId
313+
$restoredDb4 = Restore-AzSqlInstanceDatabase -FromPointInTimeBackup -ResourceId $deletedDatabases[0].Id -PointInTime $deletedDatabases[0].EarliestRestorePoint -TargetInstanceDatabaseName $targetManagedDatabaseName4
314+
Assert-NotNull $restoredDb4
315+
Assert-AreEqual $restoredDb4.Name $targetManagedDatabaseName4
316+
Assert-AreEqual $restoredDb4.ResourceGroupName $rg.ResourceGroupName
317+
Assert-AreEqual $restoredDb4.ManagedInstanceName $managedInstance.ManagedInstanceName.
318+
319+
# restore managed database to the same instance using Piping
320+
$restoredDb5 = $deletedDatabases[0] | Restore-AzSqlInstanceDatabase -FromPointInTimeBackup -PointInTime $deletedDatabases[0].EarliestRestorePoint -TargetInstanceDatabaseName $targetManagedDatabaseName5
321+
Assert-NotNull $restoredDb5
322+
Assert-AreEqual $restoredDb5.Name $targetManagedDatabaseName5
323+
Assert-AreEqual $restoredDb5.ResourceGroupName $rg.ResourceGroupName
324+
Assert-AreEqual $restoredDb5.ManagedInstanceName $managedInstance.ManagedInstanceName
325+
}
326+
finally
327+
{
328+
Remove-ResourceGroupForTest $rg
329+
Remove-ResourceGroupForTest $rg2
242330
}
243331
}
244332

@@ -287,7 +375,7 @@ function Test-GeoRestoreManagedDatabase
287375

288376
Assert-NotNull $sourceDbGeoBackup
289377

290-
$targetManagedDatabaseName1 = Get-ManagedDatabaseName
378+
$targetManagedDatabaseName1 = Get-ManagedDatabaseName
291379
$targetManagedDatabaseName2 = Get-ManagedDatabaseName
292380
$targetManagedDatabaseName3 = Get-ManagedDatabaseName
293381
$targetManagedDatabaseName4 = Get-ManagedDatabaseName
@@ -323,7 +411,7 @@ function Test-GeoRestoreManagedDatabase
323411
}
324412
finally
325413
{
326-
$restoredDb1 | Remove-AzSqlInstanceDatabase -Force
414+
$restoredDb1 | Remove-AzSqlInstanceDatabase -Force
327415
$restoredDb2 | Remove-AzSqlInstanceDatabase -Force
328416
$restoredDb3 | Remove-AzSqlInstanceDatabase -Force
329417
$restoredDb4 | Remove-AzSqlInstanceDatabase -Force

0 commit comments

Comments
 (0)