使用 PowerShell 将数据库还原到较早的时间点

适用于:Azure SQL 数据库

此 PowerShell 脚本示例将 SQL 数据库中的数据库还原到特定的时间点。

如果没有 Azure 试用版订阅,请在开始前创建一个试用版订阅

注意

本文使用 Azure Az PowerShell 模块,这是与 Azure 交互时推荐使用的 PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

本教程需要 Az PowerShell 1.4.0 或更高版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 此外,还需要运行 Connect-AzAccount -EnvironmentName AzureChinaCloud 以创建与 Azure 的连接。

示例脚本

# Connect-AzAccount -Environment AzureChinaCloud
$subscriptionId = "<Subscription-ID>"
# Set the resource group name and location for your server
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$location = "chinaeast2"
# Set an admin login and password for your server
$adminSqlLogin = "<admin>"
$password = "<password>"
# Set server name - the logical server name has to be unique in the system
$serverName = "server-$(Get-Random)"
# The sample database name
$databaseName = "mySampleDatabase"
# The restored database names
$pointInTimeRestoreDatabaseName = "MySampleDatabase_10MinutesAgo"
# The IP address range that you want to allow to access your server
$startIp = "0.0.0.0"
$endIp = "0.0.0.0"

# Set subscription
Set-AzContext -SubscriptionId $subscriptionId

# Create a resource group
$resourceGroup = New-AzResourceGroup -Name $resourceGroupName -Location $location

$adminCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminSqlLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force)

# Create a server with a system-wide unique server name
$serverParams = @{
    ResourceGroupName           = $resourceGroupName
    ServerName                  = $serverName
    Location                    = $location
    SqlAdministratorCredentials = $adminCredential
}
$server = New-AzSqlServer @serverParams

# Create a server firewall rule that allows access from the specified IP range
$firewallParams = @{
    ResourceGroupName = $resourceGroupName
    ServerName        = $serverName
    FirewallRuleName  = "AllowedIPs"
    StartIpAddress    = $startIp
    EndIpAddress      = $endIp
}
$firewallRule = New-AzSqlServerFirewallRule @firewallParams

# Create a blank database with an S0 performance level
$databaseParams = @{
    ResourceGroupName             = $resourceGroupName
    ServerName                    = $serverName
    DatabaseName                  = $databaseName
    RequestedServiceObjectiveName = "S0"
}
$database = New-AzSqlDatabase @databaseParams

Start-Sleep -second 600

# Restore database to its state 7 minutes ago
# Note: Point-in-time restore requires database to be at least 5 minutes old
$restoreParams = @{
    FromPointInTimeBackup = $true
    PointInTime           = (Get-Date).AddMinutes(-7)
    ResourceGroupName     = $resourceGroupName
    ServerName            = $serverName
    TargetDatabaseName    = $pointInTimeRestoreDatabaseName
    ResourceId            = $database.ResourceID
    Edition               = "Standard"
    ServiceObjectiveName  = "S0"
}
Restore-AzSqlDatabase @restoreParams

# Note: For performing geo-restore for a managed instance database, use -FromGeoBackup parameter with restore.
# Sample script: Restore-AzSqlDatabase -FromGeoBackup -ResourceGroupName "TargetResourceGroup" -ServerName "TargetServer" -TargetDatabaseName "RestoredDatabase" -ResourceId $geoBackup.ResourceID -Edition "Standard" -RequestedServiceObjectiveName "S2"

# Clean up deployment
# Remove-AzResourceGroup -ResourceGroupName $resourceGroupName

清理部署

使用以下命令删除资源组及其相关的所有资源。

Remove-AzResourceGroup -ResourceGroupName $resourcegroupname

脚本说明

此脚本使用以下命令。 表中的每条命令链接到特定于命令的文档。

命令 注释
New-AzResourceGroup 创建用于存储所有资源的资源组。
New-AzSqlServer 创建托管数据库和弹性池的服务器。
New-AzSqlDatabase 在服务器中创建数据库。
Get-AzSqlDatabaseGeoBackup 获取独立数据库或共用数据库的异地冗余备份。
Restore-AzSqlDatabase 还原数据库。
Remove-AzSqlDatabase 删除数据库。
获取已删除的Azure SQL数据库备份 获取可以还原的已删除数据库。
Remove-AzResourceGroup 删除资源组,包括所有嵌套的资源。