还原现有专用 SQL 池

本文介绍如何通过 Azure 门户、Synapse Studio 和 PowerShell 在 Azure Synapse Analytics 中还原现有专用 SQL 池。 本文适用于还原和异地还原。

注意

本指南仅适用于Azure Synapse工作区中的专用 SQL 池。 对于独立专用 SQL 池(以前称为 SQL DW),请参阅还原现有的专用 SQL 池(以前称为 SQL DW)

通过 Synapse Studio 还原现有专用 SQL 池

  1. 登录 Azure 门户

  2. 导航到 Azure Synapse 工作区。

  3. 在“入门”->“打开 Synapse Studio”下,选择“打开”>。 Synapse Studio 中的屏幕截图,其中显示了“打开 Synapse Studio”框和“打开”链接。

  4. 在左侧导航窗格中,选择“数据”。

  5. 选择“管理池”。

  6. 选择“+ 新建”,以便在 Azure Synapse Analytics 工作区中创建一个新的专用 SQL 池。

  7. 在“其他设置”选项卡中,选择要从中还原的还原点。

    如果要执行异地还原,请选择要恢复的工作区和专用 SQL 池。

  8. 选择“自动还原点”或“用户定义的还原点”。

    Azure 门户中的屏幕截图,包括扩“创建 SQL 池”页和“其他设置”页。对于还原点类型,已选择“自动还原点”单选按钮。

    • 如果专用 SQL 池没有任何自动还原点,请等待数小时或创建一个用户定义的还原点,然后再进行还原。 对于用户定义的还原点,请选择一个现有的,或者创建一个新的。

    • 如果要从其他工作区还原专用 SQL 池,请从当前工作区中选择“新建专用 SQL 池”。 在“其他设置”选项卡下,找到“使用现有数据”并选择“还原点”选项。 如上面的屏幕截图所示,然后可以选择可从中还原的服务器或工作区名称。

    • 如果要还原异地备份,请选择位于源区域中的工作区,然后选择要还原的专用 SQL 池。

    注意

    不能对与现有池同名的 SQL 池执行就地还原。 无论 SQL 池位于同一工作区还是不同的工作区中。

  9. 选择“查看 + 创建” 。

通过 Azure 门户还原现有专用 SQL 池

  1. 登录到 Azure 门户

  2. 导航到要从其进行还原的专用 SQL 池。

  3. 在“概述”页的顶部,选择“还原”。

    Azure 门户中的屏幕截图,其中显示了“SQL 池概述”页。突出显示了“还原”按钮。

  4. 选择“自动还原点”或“用户定义的还原点”。

    如果专用 SQL 池没有任何自动还原点,请等待数小时或创建一个用户定义的还原点,然后再进行还原。

    如果要执行异地还原,请选择要恢复的工作区和专用 SQL 池。

  5. 选择“查看 + 创建” 。

通过 PowerShell 还原现有专用 SQL 池

  1. 打开 PowerShell 终端。

  2. 连接到 Azure 帐户,并列出与帐户关联的所有订阅。

  3. 选择包含要还原的 SQL 池的订阅。

  4. 列出专用 SQL 池的还原点。

  5. 使用 RestorePointCreationDate 选取所需的还原点。

  6. 使用 Restore-AzSynapseSqlPool PowerShell cmdlet 将专用 SQL 池还原到所需还原点。

  7. 验证已还原的专用 SQL 池是否处于联机状态。


$SubscriptionName="<YourSubscriptionName>"
$ResourceGroupName="<YourResourceGroupName>"
$WorkspaceName="<YourWorkspaceNameWithoutURLSuffixSeeNote>"  # Without sql.azuresynapse.azure.cn
#$TargetResourceGroupName="<YourTargetResourceGroupName>" # uncomment to restore to a different workspace.
#$TargetWorkspaceName="<YourtargetWorkspaceNameWithoutURLSuffixSeeNote>"  
$SQLPoolName="<YourDatabaseName>"
$NewSQLPoolName="<YourDatabaseName>"

Connect-AzAccount -Environment AzureChinaCloud
Get-AzSubscription
Select-AzSubscription -SubscriptionName $SubscriptionName

# list all restore points
Get-AzSynapseSqlPoolRestorePoint -ResourceGroupName $ResourceGroupName -WorkspaceName $WorkspaceName -Name $SQLPoolName
# Pick desired restore point using RestorePointCreationDate "xx/xx/xxxx xx:xx:xx xx"
$PointInTime="<RestorePointCreationDate>"

# Get the specific SQL pool to restore
$SQLPool = Get-AzSynapseSqlPool -ResourceGroupName $ResourceGroupName -WorkspaceName $WorkspaceName -Name $SQLPoolName
# Transform Synapse SQL pool resource ID to SQL database ID because currently the restore command only accepts the SQL database ID format.
$DatabaseID = $SQLPool.Id -replace "Microsoft.Synapse", "Microsoft.Sql" `
    -replace "workspaces", "servers" `
    -replace "sqlPools", "databases"

# Restore database from a restore point
$RestoredDatabase = Restore-AzSynapseSqlPool -FromRestorePoint -RestorePoint $PointInTime -ResourceGroupName $SQLPool.ResourceGroupName `
    -WorkspaceName $SQLPool.WorkspaceName -TargetSqlPoolName $NewSQLPoolName -ResourceId $DatabaseID -PerformanceLevel DW100c

# Use the following command to restore to a different workspace
#$TargetResourceGroupName = $SQLPool.ResourceGroupName # for restoring to different workspace in same resourcegroup 
#$RestoredDatabase = Restore-AzSynapseSqlPool -FromRestorePoint -RestorePoint $PointInTime -ResourceGroupName $TargetResourceGroupName `
#    -WorkspaceName $TargetWorkspaceName -TargetSqlPoolName $NewSQLPoolName -ResourceId $DatabaseID -PerformanceLevel DW100c

# Verify the status of restored database
$RestoredDatabase.status

通过 PowerShell 将现有的专用 SQL 池还原到其他订阅

执行跨订阅还原时,Azure Synapse 工作区中的专用 SQL 池只能直接还原到独立的专用 SQL 池(以前称为 SQL DW)。 如果需要将 Azure Synapse 工作区中的专用 SQL 池还原到目标订阅中的工作区,则需要附加的还原步骤。

下面的 PowerShell 示例与上一个类似,但有三个主要区别:

  • 检索要还原的 SQL 池对象后,需要将订阅上下文切换到目标订阅名称。
  • 执行还原时,请使用 Az.Sql 模块而不是 Az.Synapse 模块。
  • 以下示例代码包含用于还原到目标订阅中的 Azure Synapse 工作区的附加步骤。 按照示例中所述取消注释 PowerShell 命令。

步骤:

  1. 打开 PowerShell 终端。

  2. 如果使用的是较旧版本,请使用 Update-Module 将 Az.Sql 模块更新为 3.8.0(或更高版本)。 否则,它将导致失败。 若要通过 PowerShell 验证你的版本,请执行以下操作:

    foreach ($i in (get-module -ListAvailable | ?{$_.name -eq 'az.sql'}).Version) { $version = [string]$i.Major + "." + [string]$i.Minor; if ($version -gt 3.7) {write-host "Az.Sql version $version installed. Prequisite met."} else {update-module az.sql} }
    
  3. 连接到 Azure 帐户,并列出与帐户关联的所有订阅。

  4. 选择包含要还原的 SQL 池的订阅。

  5. 列出专用 SQL 池的还原点。

  6. 使用 RestorePointCreationDate 选取所需的还原点。

  7. 选择应在其中还原 SQL 池的目标订阅。

  8. 使用 Restore-AzSqlDatabase PowerShell cmdlet 将专用 SQL 池还原到所需还原点。

  9. 验证已还原的专用 SQL 池(之前称为 SQL DW)是否处于联机状态。

  10. 如果所需目标为 Synapse 工作区,请通过取消注释代码来执行其他还原步骤。

    1. 为新创建的数据仓库创建还原点。
    2. 使用 Select -Last 1 语法检索创建的最后一个还原点。
    3. 执行到所需 Azure Synapse 工作区的还原。
$SourceSubscriptionName="<YourSubscriptionName>"
$SourceResourceGroupName="<YourResourceGroupName>"
$SourceWorkspaceName="<YourServerNameWithoutURLSuffixSeeNote>"  # Without sql.azuresynapse.azure.cn
$SourceSQLPoolName="<YourDatabaseName>"
$TargetSubscriptionName="<YourTargetSubscriptionName>"
$TargetResourceGroupName="<YourTargetResourceGroupName>"
$TargetServerName="<YourTargetServerNameWithoutURLSuffixSeeNote>"  # Without sql.azuresynapse.azure.cn
$TargetDatabaseName="<YourDatabaseName>"
#$TargetWorkspaceName="<YourTargetWorkspaceName>" # uncomment if restore to an Azure Synapse workspace is required

# Update Az.Sql module to the latest version (3.8.0 or above)
# Update-Module -Name Az.Sql -RequiredVersion 3.8.0

Connect-AzAccount -Environment AzureChinaCloud
Get-AzSubscription
Select-AzSubscription -SubscriptionName $SourceSubscriptionName

# list all restore points
Get-AzSynapseSqlPoolRestorePoint -ResourceGroupName $SourceResourceGroupName -WorkspaceName $SourceWorkspaceName -Name $SourceSQLPoolName
# Pick desired restore point using RestorePointCreationDate "xx/xx/xxxx xx:xx:xx xx"
$PointInTime="<RestorePointCreationDate>"

# Get the specific SQL pool to restore
$SQLPool = Get-AzSynapseSqlPool -ResourceGroupName $SourceResourceGroupName -WorkspaceName $SourceWorkspaceName -Name $SourceSQLPoolName
# Transform Synapse SQL pool resource ID to SQL database ID because currently the restore command only accepts the SQL database ID format.
$DatabaseID = $SQLPool.Id -replace "Microsoft.Synapse", "Microsoft.Sql" `
    -replace "workspaces", "servers" `
    -replace "sqlPools", "databases"

# Switch context to the destination subscription
Select-AzSubscription -SubscriptionName $TargetSubscriptionName

# Restore database from a desired restore point of the source database to the target server in the desired subscription
$RestoredDatabase = Restore-AzSqlDatabase -FromPointInTimeBackup -PointInTime $PointInTime -ResourceGroupName $TargetResourceGroupName `
    -ServerName $TargetServerName -TargetDatabaseName $TargetDatabaseName -ResourceId $DatabaseID

# Verify the status of restored database
$RestoredDatabase.status

# uncomment below cmdlets to perform one more restore to push the SQL Pool to an existing workspace in the destination subscription
# # Create restore point
# New-AzSqlDatabaseRestorePoint -ResourceGroupName $RestoredDatabase.ResourceGroupName -ServerName $RestoredDatabase.ServerName `
#     -DatabaseName $RestoredDatabase.DatabaseName -RestorePointLabel "UD-001"
# # Gets the last restore point of the sql dw (will use the RestorePointCreationDate property)
# $RestorePoint = Get-AzSqlDatabaseRestorePoint -ResourceGroupName $RestoredDatabase.ResourceGroupName -ServerName $RestoredDatabase.ServerName `
#     -DatabaseName $RestoredDatabase.DatabaseName | Select -Last 1
# # Restore to destination synapse workspace
# $FinalRestore = Restore-AzSynapseSqlPool -FromRestorePoint -RestorePoint $RestorePoint.RestorePointCreationDate -ResourceGroupName $TargetResourceGroupName `
#     -WorkspaceName $TargetWorkspaceName -TargetSqlPoolName $TargetDatabaseName -ResourceId $RestoredDatabase.ResourceID -PerformanceLevel DW100c

疑难解答

还原操作可能会导致基于“RequestTimeout”异常的部署失败。

超时异常的“资源组部署”对话框的屏幕截图。

可以忽略此超时。 请查看 Azure 门户中的“专用 SQL 池”页,它可能仍然是“正在还原”状态,最终将会转换为“联机”。

“SQL 池”对话框的屏幕截图,其中“状态”显示“正在还原”。