适用于:
Azure SQL 托管实例
在 Azure SQL 托管实例中,可以配置长期备份保留策略 (LTR)。 这样就可以在单独的 Azure Blob 存储容器中自动将数据库备份保留长达 10 年的时间。 然后,可以通过 Azure 门户、Azure CLI 和 PowerShell 使用这些备份来恢复数据库。
以下部分展示了如何使用 Azure 门户、PowerShell 和 Azure CLI 配置长期备份保留、查看 Azure SQL 存储中的备份,以及从 Azure SQL 存储中的备份进行还原。
先决条件
为 PowerShell 准备环境。
重要
PowerShell Azure 资源管理器(AzureRM)模块已于 2024 年 2 月 29 日弃用。 所有未来的开发都应使用 Az.Sql 模块。 建议用户从 AzureRM 迁移到 Az PowerShell 模块,以确保持续支持和更新。 不再维护或支持 AzureRM 模块。 Az PowerShell 模块和 AzureRM 模块中命令的参数基本相同。 有关兼容性的详细信息,请参阅 介绍新的 Az PowerShell 模块。
对于 Get-AzSqlInstanceDatabaseLongTermRetentionBackup
和 Restore-AzSqlInstanceDatabase
,你需要是以下角色之一的成员:
- “订阅所有者”角色或
- SQL 托管实例参与者角色或
- 具有以下权限的自定义角色:
Microsoft.Sql/locations/longTermRetentionManagedInstanceBackups/read
Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionManagedInstanceBackups/read
Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups/read
对于 Remove-AzSqlInstanceDatabaseLongTermRetentionBackup
,你需要是以下角色之一的成员:
- “订阅所有者”角色或
- 具有以下权限的自定义角色:
Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups/delete
权限
若要查看和还原 LTR 备份,你需要是以下角色的成员:
- “订阅所有者”角色或
- SQL 托管实例参与者角色或
- 具有以下权限的自定义角色:
Microsoft.Sql/locations/longTermRetentionManagedInstanceBackups/read
Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionManagedInstanceBackups/read
Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups/read
若要删除 LTR 备份,你需要是以下角色之一的成员:
- “订阅所有者”角色或
- 具有以下权限的自定义角色:
Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups/delete
注意
“SQL 托管实例参与者”角色无权删除 LTR 备份。
可以在“订阅”或“资源组”范围内授予 Azure 基于角色的访问控制 (RBAC) 权限。 但是,若要访问属于已删除实例的 LTR 备份,必须在该实例的“订阅”范围内授予此权限。
Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups/delete
创建长期保留策略
可以对 SQL 托管实例进行配置,使其保留自动备份的时间长于你的服务层级的保留期。
在 Azure 门户中,选择你的托管实例,然后选择“备份”。 在“保留策略”选项卡上,选择要为其设置或修改长期备份保留策略的数据库。 更改将不会应用于未选择的任何数据库。
在配置策略窗格中,为每周、每月或每年备份指定所需的保留期。 选择的保留期为“0”表明不应设置长期备份保留期。
完成后选择“应用”。
重要
启用长期备份保留策略时,最长可能需要 7 天以后才能查看和还原第一个备份。 有关 LTR 备份频率的详细信息,请参阅长期备份保留。
运行 az sql midb show 命令,以获取 SQL 托管实例数据库的详细信息。
az sql midb show /
--resource-group mygroup /
--managed-instance myinstance /
--name mymanageddb /
--subscription mysubscription
运行 az sql midb ltr-policy set 命令,以创建 LTR 策略。 以下示例设置 12 周的长期保留策略进行每周备份。
az sql midb ltr-policy set /
--resource-group mygroup /
--managed-instance myinstance /
--name mymanageddb /
--weekly-retention "P12W"
此示例设置 12 周的保留策略进行每周备份,设置 5 年的保留策略进行每年备份,并在 4 月 15 日所在的那一周进行每年 LTR 备份。
az sql midb ltr-policy set /
--resource-group mygroup /
--managed-instance myinstance /
--name mymanageddb /
--weekly-retention "P12W" /
--yearly-retention "P5Y" /
--week-of-year 16
# get the Managed Instance
$subId = "<subscriptionId>"
$instanceName = "<instanceName>"
$resourceGroup = "<resourceGroupName>"
$dbName = "<databaseName>"
Connect-AzAccount
Select-AzSubscription -SubscriptionId $subId
$instance = Get-AzSqlInstance -Name $instanceName -ResourceGroupName $resourceGroup
# create LTR policy with WeeklyRetention = 12 weeks. MonthlyRetention and YearlyRetention = 0 by default.
$LTRPolicy = @{
InstanceName = $instanceName
DatabaseName = $dbName
ResourceGroupName = $resourceGroup
WeeklyRetention = 'P12W'
}
Set-AzSqlInstanceDatabaseBackupLongTermRetentionPolicy @LTRPolicy
# create LTR policy with WeeklyRetention = 12 weeks, YearlyRetention = 5 years and WeekOfYear = 16 (week of April 15). MonthlyRetention = 0 by default.
$LTRPolicy = @{
InstanceName = $instanceName
DatabaseName = $dbName
ResourceGroupName = $resourceGroup
WeeklyRetention = 'P12W'
YearlyRetention = 'P5Y'
WeekOfYear = '16'
}
Set-AzSqlInstanceDatabaseBackupLongTermRetentionPolicy @LTRPolicy
查看备份并从备份进行还原
若要查看 Azure 门户中提供的长期备份,请执行以下步骤:
在 Azure 门户中,选择你的托管实例,然后选择“备份”。 在“可用备份”选项卡上,选择要查看其可用备份的数据库。 选择“管理”。
在“管理备份”窗格中,查看可用备份。
还可以通过依次选择“备份”和“还原”,从此页面还原。
或者,若要使用 Azure 门户从长期保留中还原备份,请执行以下步骤:
登录 Azure 门户。
转到计划将数据库还原到的目标 SQL 托管实例。
在“概述”页面上,选择“+ 新建数据库”,打开“创建 Azure SQL 托管数据库”页面。
在“创建 Azure SQL 托管数据库”页面的“基本信息”选项卡上,在“项目详细信息”下提供订阅和资源组详细信息。 然后,在“数据库详细信息”下提供计划还原的数据库的新名称。 确认下拉列表中列出了正确的托管实例。 然后选择“下一步: 数据源 >”
在“数据源”选项卡上,选择“使用现有数据”下的“时间点还原”。 提供包含源数据库的订阅、资源组和托管实例。 从“托管数据库”下拉列表中,选择要还原的数据库,然后选择要从中还原数据库的时间点。 源实例和目标实例可以是两个相同的实例,也可以是两个不同的实例。 选择“下一步: 其他设置 >”
在“其他设置”选项卡上,可以选中该框以从源数据库继承保留策略,也可以选择“配置保留期”以打开“配置策略”页面,并为还原的数据库设置所需的保留策略。 完成后,选择“查看 + 创建”。
在“查看 + 创建”上,验证成功后,选择“创建”以还原数据库。
此操作会启动还原过程,期间会创建一个新数据库,并在其中填充原始数据库在指定时间点的数据。 有关恢复过程的详细信息,请参阅恢复时间。
查看 LTR 策略
运行 az sql midb ltr-policy show 命令,以查看实例中单一数据库的 LTR 策略。
az sql midb ltr-policy show \
--resource-group mygroup \
--managed-instance myinstance \
--name mymanageddb
查看 LTR 备份
使用 az sql midb ltr-backup list 命令来查看实例中的 LTR 备份。
az sql midb ltr-backup list \
--resource-group mygroup \
--location eastus2 \
--managed-instance myinstance
从 LTR 备份进行还原
运行 az sql midb ltr-backup restore 命令,以从 LTR 备份还原数据库。 可以运行 az sql midb ltr-backup show 来获取 backup-id
。
使用 backup-id
命令为 az sql db ltr-backup show
创建供将来使用的变量。
get_backup_id=$(az sql midb ltr-backup show
--location eastus2 \
--managed-instance myinstance \
--database mydb \
--name "3214b3fb-fba9-43e7-96a3-09e35ffcb336;132292152080000000" \
--query 'id' \
--output tsv)
从 LTR 备份还原数据库
az sql midb ltr-backup restore \
--dest-database targetmidb \
--dest-mi myinstance \
--dest-resource-group mygroup \
--backup-id $get_backup_id
重要
若要在删除实例后从 LTR 备份进行还原,必须有实例订阅范围内的权限,并且该订阅必须处于活动状态。
注意
从此处,可使用 SQL Server Management Studio 连接到已还原的数据库,执行所需任务,例如从恢复的数据库中提取一部分数据,复制到现有数据库或删除现有数据库,并将已还原的数据库重命名为现有数据库名。 请参阅时间点还原。
查看 LTR 策略
此示例展示了如何列出单个数据库的实例内的 LTR 策略。
# gets the current version of LTR policy for a database
$LTRPolicy = @{
InstanceName = $instanceName
DatabaseName = $dbName
ResourceGroupName = $resourceGroup
}
Get-AzSqlInstanceDatabaseBackupLongTermRetentionPolicy @LTRPolicy
此示例展示了如何列出实例上所有数据库的 LTR 策略。
# gets the current version of LTR policy for all of the databases on an instance
$Databases = Get-AzSqlInstanceDatabase -ResourceGroupName $resourceGroup -InstanceName $instanceName
$LTRParams = @{
InstanceName = $instanceName
ResourceGroupName = $resourceGroup
}
foreach($database in $Databases.Name){
Get-AzSqlInstanceDatabaseBackupLongTermRetentionPolicy @LTRParams -DatabaseName $database
}
清除 LTR 策略
此示例演示如何从数据库中清除 LTR 策略。
# remove the LTR policy from a database
$LTRPolicy = @{
InstanceName = $instanceName
DatabaseName = $dbName
ResourceGroupName = $resourceGroup
RemovePolicy = $true
}
Set-AzSqlInstanceDatabaseBackupLongTermRetentionPolicy @LTRPolicy
查看 LTR 备份
此示例展示了如何列出实例内的 LTR 备份。
$instance = Get-AzSqlInstance -Name $instanceName -ResourceGroupName $resourceGroup
# get the list of all LTR backups in a specific Azure region
# backups are grouped by the logical database id, within each group they are ordered by the timestamp, the earliest backup first
Get-AzSqlInstanceDatabaseLongTermRetentionBackup -Location $instance.Location
# get the list of LTR backups from the Azure region under the given managed instance
$LTRBackupParam = @{
Location = $instance.Location
InstanceName = $instanceName
}
Get-AzSqlInstanceDatabaseLongTermRetentionBackup @LTRBackupParam
# get the LTR backups for a specific database from the Azure region under the given managed instance
$LTRBackupParam = @{
Location = $instance.Location
InstanceName = $instanceName
DatabaseName = $dbName
}
Get-AzSqlInstanceDatabaseLongTermRetentionBackup @LTRBackupParam
# list LTR backups only from live databases (you have option to choose All/Live/Deleted)
$LTRBackupParam = @{
Location = $instance.Location
DatabaseState = 'Live'
}
Get-AzSqlInstanceDatabaseLongTermRetentionBackup @LTRBackupParam
# only list the latest LTR backup for each database
$LTRBackupParam = @{
Location = $instance.Location
InstanceName = $instanceName
OnlyLatestPerDatabase = $true
}
Get-AzSqlInstanceDatabaseLongTermRetentionBackup @LTRBackupParam
从 LTR 备份进行还原
此示例展示了如何从 LTR 备份进行还原。 请注意,此接口没有更改,但是资源 ID 参数现在要求提供 LTR 备份资源 ID。
# restore a specific LTR backup as an P1 database on the instance $instanceName of the resource group $resourceGroup
$LTRBackupParam = @{
Location = $instance.Location
InstanceName = $instanceName
DatabaseName = $dbname
OnlyLatestPerDatabase = $true
}
$ltrBackup = Get-AzSqlInstanceDatabaseLongTermRetentionBackup @LTRBackupParam
$RestoreLTRParam = @{
TargetInstanceName = $instanceName
TargetResourceGroupName = $resourceGroup
TargetInstanceDatabaseName = $dbName
FromLongTermRetentionBackup = $true
ResourceId = $ltrBackup.ResourceId
}
Restore-AzSqlInstanceDatabase @RestoreLTRParam
重要
若要在删除实例后从 LTR 备份进行还原,必须有实例订阅范围内的权限,并且该订阅必须处于活动状态。 还必须省略可选的 -ResourceGroupName 参数。
注意
从此处,可使用 SQL Server Management Studio 连接到已还原的数据库,执行所需任务,例如从恢复的数据库中提取一部分数据,复制到现有数据库或删除现有数据库,并将已还原的数据库重命名为现有数据库名。 请参阅时间点还原。
删除 LTR 备份
删除使用 LTR 策略为特定数据库保留的备份。
重要
删除 LTR 备份操作是不可逆的。 若要在删除实例后删除 LTR 备份,必须有“订阅”范围权限。 可以通过筛选“删除长期保留备份”操作,在 Azure Monitor 中设置有关每次删除的通知。 活动日志包含有关发出请求的人员和时间的信息。 有关详细说明,请参阅创建活动日志警报。
- 在 Azure 门户中,导航到 SQL 托管实例。
- 选择“备份”。 若要查看特定数据库的可用 LTR 备份,请在“可用 LTR 备份”列下选择“管理”。 将显示一个窗格,其中包含所选数据库的可用 LTR 备份列表。
- 在显示的可用 LTR 备份窗格中,查看可用备份。 选择要删除的备份。 选择“删除” 。
此示例展示了如何从备份列表中删除最早的 LTR 备份。 此示例从给定 SQL 托管实例下的 Azure 区域获取特定数据库的 LTR 备份列表。
# remove the earliest backup
# get the LTR backups for a specific database from the Azure region under the given SQL managed instance
$LTRBackupParam = @{
Location = $instance.Location
InstanceName = $instanceName
DatabaseName = $dbName
}
$ltrBackups = Get-AzSqlInstanceDatabaseLongTermRetentionBackup @LTRBackupParam
$ltrBackup = $ltrBackups[0]
Remove-AzSqlInstanceDatabaseLongTermRetentionBackup -ResourceId $ltrBackup.ResourceId
限制
从使用 SQL Server 2022 更新策略配置的实例中获取的数据库备份可以还原到使用 SQL Server 2022 或“始终保持最新”更新策略配置的实例。 从使用“始终保持最新”更新策略配置的实例中获取的数据库备份只能还原到也使用“始终保持最新”更新策略配置的实例。
后续步骤