Skip to content

Commit

Permalink
[Az.SQL] Add Set-AzSqlDatabaseLongTermRetentionBackup, Copy-AzSqlData…
Browse files Browse the repository at this point in the history
…baseLongTermRetentionBackup (#14070)

* add support for copy ltr backup

* use new SDKs, add set LTR backup

* updated recordings

* more updated session records

* add updates to cmdlets get/set/copy and reference nuget

* more sessionrecords

* rename to currentBackupStorageRedundancy and fix tests

* fixed ps tests and add updated recordings

* refactoring + rerecord Copy tests

* slight fixes and adding help docs

* Added breaking change warning, added URLs to help files, updated major version, add additional recordings

* Breaking Change exception

* Simplify string compare

* add more breaking change exceptions

* minor edits + more test recordings

* push remaining test records; fix HA read replica cmdlet and test; fix some spacing changes

* minor fixes in syntax/wording

* made suggested changes

* update help files

* remove breaking change warning from Database cmdlets; change 2 words; add AsJob

* update Get Db help file, add input-object to Update LTR backup

* add autogened help files

* Help file updates, error msg to Resource file

* indents
  • Loading branch information
xaliciayang authored Mar 26, 2021
1 parent 1ab57c1 commit c2f1fd9
Show file tree
Hide file tree
Showing 247 changed files with 223,171 additions and 537,812 deletions.
8 changes: 4 additions & 4 deletions src/Sql/Sql.Test/ScenarioTests/Common.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ function Create-BasicTestEnvironmentWithParams ($params, $location, $serverVersi
$serverPassword = "t357ingP@s5w0rd!Sec"
$credentials = new-object System.Management.Automation.PSCredential($serverLogin, ($serverPassword | ConvertTo-SecureString -asPlainText -Force))
New-AzSqlServer -ResourceGroupName $params.rgname -ServerName $params.serverName -Location $location -ServerVersion $serverVersion -SqlAdministratorCredentials $credentials
New-AzSqlDatabase -DatabaseName $params.databaseName -ResourceGroupName $params.rgname -ServerName $params.serverName -Edition Basic
New-AzSqlDatabase -DatabaseName $params.databaseName -ResourceGroupName $params.rgname -ServerName $params.serverName -Edition Basic -Force
}

<#
Expand Down Expand Up @@ -224,7 +224,7 @@ function Create-DataMaskingTestEnvironment ($testSuffix)
New-AzResourceGroup -Name $params.rgname -Location "West Central US"
New-AzSqlServer -ResourceGroupName $params.rgname -ServerName $params.serverName -ServerVersion "12.0" -Location "West Central US" -SqlAdministratorCredentials $credentials
New-AzSqlServerFirewallRule -ResourceGroupName $params.rgname -ServerName $params.serverName -StartIpAddress 0.0.0.0 -EndIpAddress 255.255.255.255 -FirewallRuleName "ddmRule"
New-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
New-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -Force

if ([Microsoft.Azure.Test.HttpRecorder.HttpMockServer]::Mode -eq "Record")
{
Expand Down Expand Up @@ -353,7 +353,7 @@ function Create-ServerKeyVaultKeyTestEnvironment ($params)
Assert-AreEqual $server.ServerName $params.serverName

# Create database
$db = New-AzSqlDatabase -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $params.databaseName
$db = New-AzSqlDatabase -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $params.databaseName -Force
Assert-AreEqual $db.DatabaseName $params.databaseName

#Set permissions on key Vault
Expand Down Expand Up @@ -694,7 +694,7 @@ function Remove-ServerForTest ($server)
function Create-DatabaseForTest ($server)
{
$dbName = Get-DatabaseName
$db = New-AzSqlDatabase -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -DatabaseName $dbName -Edition Standard -MaxSizeBytes 250GB -RequestedServiceObjectiveName S0
$db = New-AzSqlDatabase -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -DatabaseName $dbName -Edition Standard -MaxSizeBytes 250GB -RequestedServiceObjectiveName S0 -Force
return $db
}

Expand Down
16 changes: 8 additions & 8 deletions src/Sql/Sql.Test/ScenarioTests/DataClassificationTests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ function Test-DataClassificationOnSqlDatabase
Assert-AreEqual $params.databaseName $allClassifications.DatabaseName

# Remove, using pipeline, all classifications, and verify.
Get-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName | Get-AzSqlDatabaseSensitivityClassification | Remove-AzSqlDatabaseSensitivityClassification
Get-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName | Get-AzSqlDatabaseSensitivityClassification | Remove-AzSqlDatabaseSensitivityClassification
$allClassifications = Get-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName | Get-AzSqlDatabaseSensitivityClassification
$allClassificationsCount = ($allClassifications.SensitivityLabels).count
Assert-AreEqual 0 $allClassificationsCount
Expand Down Expand Up @@ -388,19 +388,19 @@ function Test-ErrorIsThrownWhenInvalidClassificationIsSet
$badInformationTypeMessage = "Information Type '" + $badinformationType + "' is not part of Information Protection Policy. Please add '" + $badinformationType + "' to the Information Protection Policy, or use one of the following: "
Assert-ThrowsContains -script { Set-AzSqlDatabaseSensitivityClassification -ResourceGroupName $params.rgname -ServerName $params.serverName `
-DatabaseName $params.databaseName -SchemaName $schemaName -TableName $tableName -ColumnName $columnName -InformationType $badInformationType `
-SensitivityLabel $sensitivityLabel} -message $badInformationTypeMessage
-SensitivityLabel $sensitivityLabel -Force} -message $badInformationTypeMessage

# Provide illegal sensitivity label, and verify error is raised.
$badSensitivityLabel = $sensitivityLabel + $sensitivityLabel
$badSensitivityLabelMessage = "Sensitivity Label '" + $badSensitivityLabel + "' is not part of Information Protection Policy. Please add '" + $badSensitivityLabel + "' to the Information Protection Policy, or use one of the following: "
Assert-ThrowsContains -script { Set-AzSqlDatabaseSensitivityClassification -ResourceGroupName $params.rgname -ServerName $params.serverName `
-DatabaseName $params.databaseName -SchemaName $schemaName -TableName $tableName -ColumnName $columnName -InformationType $badInformationType `
-SensitivityLabel $badSensitivityLabel} -message $badSensitivityLabelMessage
-SensitivityLabel $badSensitivityLabel -Force} -message $badSensitivityLabelMessage

# Do not provide neither information type nor sensitivity label, and verify error is raised.
$message = "Value is not specified neither for InformationType parameter nor for SensitivityLabel parameter"
Assert-ThrowsContains -script { Set-AzSqlDatabaseSensitivityClassification -ResourceGroupName $params.rgname -ServerName $params.serverName `
-DatabaseName $params.databaseName -SchemaName $schemaName -TableName $tableName -ColumnName $columnName} -message $message
-DatabaseName $params.databaseName -SchemaName $schemaName -TableName $tableName -ColumnName $columnName -Force} -message $message
}
finally
{
Expand Down Expand Up @@ -497,7 +497,7 @@ function Remove-DataClassificationTestEnvironment ($testSuffix)
.SYNOPSIS
Creates the test environment needed to perform the tests
#>
function Create-SqlDataClassificationTestEnvironment ($testSuffix, $location = "West Central US", $serverVersion = "12.0")
function Create-SqlDataClassificationTestEnvironment ($testSuffix, $location = "southeast asia", $serverVersion = "12.0")
{
$params = Get-DataClassificationTestEnvironmentParameters $testSuffix

Expand All @@ -512,7 +512,7 @@ function Create-SqlDataClassificationTestEnvironment ($testSuffix, $location = "
# Enable Advanced Data Security
Enable-AzSqlServerAdvancedDataSecurity -ResourceGroupName $params.rgname -ServerName $params.serverName -DoNotConfigureVulnerabilityAssessment

New-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
New-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -Force

if ([Microsoft.Azure.Test.HttpRecorder.HttpMockServer]::Mode -eq "Record")
{
Expand Down Expand Up @@ -586,7 +586,7 @@ function Test-EnableDisableRecommendationsOnSqlDatabase
Assert-NotNullOrEmpty $secondSensitivityLabel

# Disable first two recommdations, second recommdation is disabled using pipeline.
Disable-AzSqlDatabaseSensitivityRecommendation -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -SchemaName $firstSchemaName -TableName $firstTableName -ColumnName $firstColumnName
Disable-AzSqlDatabaseSensitivityRecommendation -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -SchemaName $firstSchemaName -TableName $firstTableName -ColumnName $firstColumnName
Get-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName | Disable-AzSqlDatabaseSensitivityRecommendation -SchemaName $secondSchemaName -TableName $secondTableName -ColumnName $secondColumnName

# Get, using pipeline, recommended sensitivity labels, and verify.
Expand Down Expand Up @@ -618,7 +618,7 @@ function Test-EnableDisableRecommendationsOnSqlDatabase
Assert-AreNotEqual $firstColumnName ($recommendations.SensitivityLabels)[2].ColumnName

# Disable, using pipeline, all recommended columns.
Get-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName | Get-AzSqlDatabaseSensitivityRecommendation | Disable-AzSqlDatabaseSensitivityRecommendation
Get-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName | Get-AzSqlDatabaseSensitivityRecommendation | Disable-AzSqlDatabaseSensitivityRecommendation

# Verify no recommdations are retrieved since all are disabled.
$recommendations = Get-AzSqlDatabase -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName | Get-AzSqlDatabaseSensitivityRecommendation
Expand Down
6 changes: 3 additions & 3 deletions src/Sql/Sql.Test/ScenarioTests/DatabaseActivationTests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
function Test-DatabasePauseResume
{
# Setup
$location = "westcentralus"
$location = "southeastasia"
$serverVersion = "12.0";
$rg = Create-ResourceGroupForTest
$server = Create-ServerForTest $rg $location
Expand Down Expand Up @@ -67,7 +67,7 @@ function Test-DatabasePauseResume
function Test-DatabasePauseResumePiped
{
# Setup
$location = "westcentralus"
$location = "southeastasia"
$serverVersion = "12.0";
$rg = Create-ResourceGroupForTest

Expand All @@ -80,7 +80,7 @@ function Test-DatabasePauseResumePiped
$collationName = "SQL_Latin1_General_CP1_CI_AS"
$maxSizeBytes = 250GB
$dwdb = New-AzSqlDatabase -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName `
-CollationName $collationName -MaxSizeBytes $maxSizeBytes -Edition DataWarehouse -RequestedServiceObjectiveName DW100c
-CollationName $collationName -MaxSizeBytes $maxSizeBytes -Edition DataWarehouse -RequestedServiceObjectiveName DW100c -Force


# Pause the database. Make sure the database specs remain the same and its Status is Paused.
Expand Down
23 changes: 23 additions & 0 deletions src/Sql/Sql.Test/ScenarioTests/DatabaseBackupTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,29 @@ public void TestLongTermRetentionV2()
}
}

[Fact(Skip = "This is not recordable test")]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void TestCopyLongTermRetentionBackup()
{
// TODO Rewrite SQL backup tests to be recordable
// TODO https://github.com/Azure/azure-powershell/issues/4155
if (TestMockSupport.RunningMocked)
{
RunPowerShellTest("Test-CopyLongTermRetentionBackup");
}
}

[Fact(Skip = "This is not recordable test")]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void TestUpdateLongTermRetentionBackup()
{
if (TestMockSupport.RunningMocked)
{
RunPowerShellTest("Test-UpdateLongTermRetentionBackup");
}
}


[Fact(Skip = "This is not recordable test")]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void TestLongTermRetentionV2ResourceGroupBased()
Expand Down
83 changes: 70 additions & 13 deletions src/Sql/Sql.Test/ScenarioTests/DatabaseBackupTests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
function Test-ListDatabaseRestorePoints
{
# Setup
$location = "westcentralus"
$location = "southeastasia"
$serverVersion = "12.0";
$rg = Create-ResourceGroupForTest

Expand All @@ -30,11 +30,11 @@ function Test-ListDatabaseRestorePoints
# Create data warehouse database with all parameters.
$databaseName = Get-DatabaseName
$dwdb = New-AzSqlDatabase -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName `
-Edition DataWarehouse -RequestedServiceObjectiveName DW100c
-Edition DataWarehouse -RequestedServiceObjectiveName DW100c -Force

$databaseName = Get-DatabaseName
$standarddb = New-AzSqlDatabase -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName `
-Edition Standard -RequestedServiceObjectiveName S0
-Edition Standard -RequestedServiceObjectiveName S0 -Force

# Get restore points from data warehouse database.
$restorePoints = Get-AzSqlDatabaseRestorePoint -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $dwdb.DatabaseName
Expand Down Expand Up @@ -79,7 +79,7 @@ function Test-RestoreGeoBackup
function Test-RestoreDeletedDatabaseBackup
{
# Setup
$location = "westcentralus"
$location = "southeastasia"
$serverVersion = "12.0"
$rg = Create-ResourceGroupForTest
$restoredDbName = "powershell_db_deleted"
Expand Down Expand Up @@ -136,7 +136,7 @@ function Test-RestorePointInTimeBackup
# TODO update for LTRv2 backup
function Test-RestoreLongTermRetentionBackup
{
$location = "West Central US"
$location = "southeast asia"
$serverVersion = "12.0"
$rg = Get-AzResourceGroup -ResourceGroupName "brandong-test"
$server = Get-AzSqlServer -ServerName "brandong-ltr-test" -ResourceGroupName $rg.ResourceGroupName
Expand All @@ -147,10 +147,10 @@ function Test-RestoreLongTermRetentionBackup
-ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName
}

function Test-LongTermRetentionV2Policy($location = "westcentralus")
function Test-LongTermRetentionV2Policy($location = "southeastasia")
{
# Setup
$location = Get-Location "Microsoft.Sql" "servers" "West central US"
$location = Get-Location "Microsoft.Sql" "servers" "southeast asia"
$rg = Create-ResourceGroupForTest
$server = Create-ServerForTest $rg $location
$weeklyRetention1 = "P1W"
Expand Down Expand Up @@ -183,10 +183,10 @@ function Test-LongTermRetentionV2Policy($location = "westcentralus")
}
}

function Test-LongTermRetentionV2Backup($location = "westcentralus")
function Test-LongTermRetentionV2Backup($location = "southeastasia")
{
# Setup
$location = Get-Location "Microsoft.Sql" "servers" "West central US"
$location = Get-Location "Microsoft.Sql" "servers" "southeast asia"
$rg = Create-ResourceGroupForTest
$server = Create-ServerForTest $rg $location

Expand All @@ -210,10 +210,10 @@ function Test-LongTermRetentionV2Backup($location = "westcentralus")
}
}

function Test-LongTermRetentionV2ResourceGroupBasedBackup($location = "westcentralus")
function Test-LongTermRetentionV2ResourceGroupBasedBackup($location = "southeastasia")
{
# Setup
$location = Get-Location "Microsoft.Sql" "servers" "West central US"
$location = Get-Location "Microsoft.Sql" "servers" "southeast asia"
$rg = Create-ResourceGroupForTest
$server = Create-ServerForTest $rg $location

Expand Down Expand Up @@ -399,7 +399,7 @@ function Test-NewDatabaseRestorePoint
function Test-RemoveDatabaseRestorePoint
{
# Setup
$location = Get-Location "Microsoft.Sql" "servers" "West central US"
$location = Get-Location "Microsoft.Sql" "servers" "southeast asia"
$serverVersion = "12.0";
$label = "label01";
$rg = Create-ResourceGroupForTest
Expand All @@ -411,7 +411,7 @@ function Test-RemoveDatabaseRestorePoint
# Create data warehouse database with all parameters.
$databaseName = Get-DatabaseName
$dwdb = New-AzSqlDatabase -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName `
-Edition DataWarehouse -RequestedServiceObjectiveName DW100
-Edition DataWarehouse -RequestedServiceObjectiveName DW100 -Force

New-AzSqlDatabaseRestorePoint -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $dwdb.DatabaseName -RestorePointLabel $label

Expand Down Expand Up @@ -494,4 +494,61 @@ function Test-ShortTermRetentionPolicy
{
Remove-ResourceGroupForTest $rg
}
}

function Test-CopyLongTermRetentionBackup
{
# MANUAL INSTRUCTIONS
# Create a server and database and fill in the appropriate information below
# Set the weekly retention on the database so that the first backup gets picked up, for example:
# Set-AzSqlDatabaseLongTermRetentionPolicy -ResourceGroup $resourceGroup -ServerName $serverName -DatabaseName $databaseName -WeeklyRetention P1W
# Wait about 18 hours until it gets properly copied and you see the backup when run get backups, for example:
# Get-AzSqlDatabaseLongTermRetentionBackup -Location $locationName -ServerName $serverName -DatabaseName $databaseName -ResourceGroupName $resourceGroup
$sourceResourceGroupName = "testrg"
$targetResourceGroupName = "testrg"
$sourceLocationName = "eastasia"
$sourceServerName = "ayang-eas"
$targetLocationName = "southeastasia"
$targetServerName= "ayang-stage-seas"
$targetDatabaseName = "tgt-ltr1"

# Retrieve a backup to copy
$sourceBackups = Get-AzSqlDatabaseLongTermRetentionBackup -Location $sourceLocationName
Assert-AreNotEqual $sourceBackups.Count 0
$sourceBackup = $sourceBackups[0]

# Copy backup
$copyBackupResults = Copy-AzSqlDatabaseLongTermRetentionBackup -Location $sourceLocationName -ServerName $sourceBackup.ServerName -DatabaseName $sourceBackup.DatabaseName -BackupName $sourceBackup.BackupName -ResourceGroupName $sourceResourceGroupName -TargetDatabaseName $targetDatabaseName -TargetServerName $TargetServerName -TargetSubscriptionId '01c4ec88-e179-44f7-9eb0-e9719a5087ab' -TargetResourceGroupName $targetResourceGroupName
$targetBackup = Get-AzSqlDatabaseLongTermRetentionBackup -Location $copyBackupResults.TargetLocation -ResourceGroup $copyBackupResults.TargetResourceGroupName -ServerName $copyBackupResults.TargetServerName -DatabaseName $copyBackupResults.TargetDatabaseName -BackupName $copyBackupResults.TargetBackupName
Assert-AreEqual $targetDatabaseName $targetBackup.DatabaseName
Assert-AreEqual $targetServerName $targetBackup.ServerName
}

function Test-UpdateLongTermRetentionBackup
{
# MANUAL INSTRUCTIONS
# Create a server and database and fill in the appropriate information below
# Set the weekly retention on the database so that the first backup gets picked up, for example:
# Set-AzSqlDatabaseLongTermRetentionPolicy -ResourceGroup $resourceGroup -ServerName $serverName -DatabaseName $databaseName -WeeklyRetention P1W
# Wait about 18 hours until it gets properly copied and you see the backup when run get backups, for example:
# Get-AzSqlDatabaseLongTermRetentionBackup -Location $locationName -ServerName $serverName -DatabaeName $databaseName -ResourceGroupName $resourceGroup
$resourceGroupName = "testrg"
$locationName = "eastasia"
$serverName = "ayang-eas"
$databaseName = "ltr1"

# Fetch a backup
$backups = Get-AzSqlDatabaseLongTermRetentionBackup -Location $locationName -ResourceGroupName $resourceGroupName -ServerName $serverName -DatabaseName $databaseName
$backup = $backups[0]

# Change backup storage redundancy of database, so LTR backup's backup storage redundancy can be changed
# LTR backup's backup storage redundancy must match database's backup storage redundancy
# Use a backup storage redundancy different from the CurrentBackupStorageRedundancy value in Get-AzSqlDatabase
Set-AzSqlDatabase -DatabaseName $databaseName -ServerName $serverName -ResourceGroupName $resourceGroupName -BackupStorageRedundancy Local

# Change backup's backup storage redundancy
$backupAfterSet = Update-AzSqlDatabaseLongTermRetentionBackup -Location $locationName -ServerName $backup.ServerName -DatabaseName $backup.DatabaseName -BackupName $backup.BackupName -ResourceGroupName $backup.ResourceGroupName -BackupStorageRedundancy Local

# Update-AzSqlDatabaseLongTermRetentionBackup returns after target BSR is set
Assert-AreEqual "Local" $backupAfterSet.BackupStorageRedundancy
}
Loading

0 comments on commit c2f1fd9

Please sign in to comment.