SQL Server 备份到 Microsoft Azure Blob 存储的 URL

适用于:SQL ServerAzure SQL 托管实例

本文介绍将 Microsoft Azure Blob 存储用作备份目标所需的概念、要求和组件。 备份和还原功能与使用磁盘或磁带时相同,或类似但区别不大。 本文将介绍这些不同之处和几个代码示例。

小窍门

SQL Server 2025 (17.x) 预览版引入了使用托管标识的 URL 备份。 查看 备份到具有托管标识的 URL (预览版) - 由 Azure Arc 启用的 SQL Server

概述

请务必了解组件及其之间的交互,以便执行备份到或从 Microsoft Azure Blob 存储还原。

在 Azure 订阅中创建 Azure 存储帐户是此过程中的第一步。 此存储帐户是对使用存储帐户创建的所有容器和对象具有完全管理权限的管理帐户。 SQL Server 可以使用 Azure 存储帐户名称及其访问密钥值来进行身份验证,将 blob 写入到 Microsoft Azure Blob 存储和从中读取 blob,也可以使用特定容器上生成的共享访问签名令牌授予它读取和写入权限。 有关 Azure 存储帐户的详细信息,请参阅 关于 Azure 存储帐户 ;有关共享访问签名的详细信息,请参阅共享访问签名,第 1 部分:了解 SAS 模型。 SQL Server 凭据存储此身份验证信息,并且将在备份或还原期间使用这些信息。

Azure 存储和 S3 兼容存储

SQL Server 2012 Service Pack 1 CU2 和 SQL Server 2014 引入了备份到指向 Azure Blob 存储的 URL 的功能,它使用熟悉的 T-SQL 语法安全地将备份写入 Azure 存储。 SQL Server 2016(13.x)引入了 在 Azure 中为数据库文件进行备份File-Snapshot ,并通过共享访问签名(SAS)密钥增强安全性,这是验证 Azure 存储安全策略证书的一种安全而简单的方法。 SQL Server 2022 (16.x) 引入了将备份写入 S3 兼容对象存储的功能,从概念上讲,使用备份和还原功能与使用“备份到 URL”并将 Azure Blob 存储用作备份设备类型类似。 SQL Server 2022 (16.x) 通过使用 REST API 增加对新 S3 连接器的支持来扩展 BACKUP/RESTORE TO/FROM URL 语法。

本文包含有关如何使用“备份到 Azure Blob 存储 URL”的信息。 若要详细了解如何将数据备份到与 S3 兼容的对象存储的 URL,请参阅 SQL Server 备份到与 S3 兼容的对象存储的 URL

备份到 Azure 存储块 blob 和页 blob 的对比

Microsoft Azure Blob 存储中可存储两类 blob:块 blob 和页 blob。 对于 SQL Server 2016 及更高版本,应首选块 blob。

如果在凭据中使用存储密钥,则使用 page blob;如果使用共享访问签名,则使用 block blob。

备份到 Azure Blob 存储时,备份到块 blob 仅在 SQL Server 2016 或更高版本中可用。 如果运行的是 SQL Server 2016 或更高版本,请备份到块状 Blob 而不是页状 Blob。

主要原因是:

  • 与存储密钥相比,共享访问签名是用来授予 blob 访问权限的更为安全的方式。
  • 可以备份到多个块 blob,以获得更好的备份和还原性能并支持更大的数据库备份。
  • 块 blob页 blob 便宜。
  • 需要通过代理服务器备份到页 Blob 的客户需要使用 backuptourl.exe

将大型数据库备份到 Azure Blob 存储会受到 Azure SQL 托管实例 T-SQL 差异、限制和已知问题中所列限制的约束。

如果数据库太大,请执行以下任一操作:

  • 使用备份压缩或
  • 备份到多个块 blob

在 Linux、容器和 Azure Arc 启用的 SQL 托管实例上受支持

如果 SQL Server 实例托管在 Linux 上,包括:

  • 独立操作系统
  • 容器
  • Azure Arc 启用的 SQL 托管实例
  • 任何其他基于 Linux 的环境

唯一支持的“备份到 Azure Blob 存储 URL”是使用共享访问签名备份到块 blob。

Microsoft Azure Blob 存储

存储帐户: 存储帐户是所有存储服务的起始点。 若要访问 Microsoft Azure Blob 存储,请先创建一个 Azure 存储帐户。 有关详细信息,请参阅创建存储帐户

容器: 一个容器提供对一组 Blob 的分组,并且可以存储无限数目的 Blob。 若要将 SQL Server 备份写入到 Azure Blob 存储,必须至少创建一个根容器。 你可以在容器上生成共享访问签名令牌,并只授予其对特定容器上的对象的访问权限。

Blob: 任意类型和大小的文件。 可将两类 blob 存储到 Azure Blob 存储中:块 blob 和页 blob。 SQL Server 备份可以使用其中任一 blob 类型,具体取决于所使用的 Transact-SQL 语法。 blob 可使用以下 URL 格式寻址:https://<storage account>.blob.core.windows.net/<container>/<blob>。 有关 Azure Blob 存储的详细信息,请参阅 Azure Blob 存储简介。 有关页 blob 和块 blob 的详细信息,请参阅了解块 Blob 和页 Blob
Azure Blob 存储帐户、容器和 Blob 的关系图。

Azure 快照: 在某一时间点创建的 Azure blob 快照。 有关详细信息,请参阅创建 Blob 的快照。 SQL Server 备份现支持对 Azure Blob 存储中存储的数据库文件进行 Azure 快照备份。 有关详细信息,请参阅 Azure 中数据库文件的文件快照备份

SQL Server 组件

URL: URL 指定统一资源标识符 (URI) 来标识唯一备份文件。 URL 用于提供 SQL Server 备份文件的位置和名称。 URL 必须指向实际 blob,而不是仅指向容器。 如果 Blob 不存在,则会被创建。 如果指定了现有 blob,则除非指定了“WITH FORMAT”选项以覆盖 blob 中的现有备份文件,否则备份将失败。

下面是一个示例 URL 值: https://ACCOUNTNAME.blob.core.windows.net/<CONTAINER>/FILENAME.bak

注意

不支持使用 HTTP 备份到 URL。

凭据:凭据是用于存储连接到 SQL Server 外部资源所需的身份验证信息的对象。 在这里,SQL Server 备份和还原进程使用凭据对 Azure Blob 存储及其容器和 blob 对象进行身份验证。 凭据存储存储帐户名称和存储帐户 访问密钥 值或容器 URL 及其共享访问签名令牌。 创建凭据后,BACKUP/RESTORE 语句的语法确定 blob 的类型和所需的凭据。

有关如何创建共享访问签名的示例,请参阅本文后面的创建共享访问签名示例;有关如何创建 SQL Server 凭据的示例,请参阅本文后面的创建凭据示例。

有关凭据的详细信息,请参阅凭据(数据库引擎)。

有关使用凭据的其他示例的信息,请参阅创建 SQL Server 代理的代理

Azure Blob 存储的安全性

以下是备份到 Azure Blob 存储或从该服务还原时的安全注意事项和要求。

  • 为 Azure Blob 存储创建容器时,建议将访问权限设置为“私有”。 将访问权限设置为“私有”后,只允许可提供对 Azure 帐户进行身份验证所需的信息的用户或帐户进行访问。

    重要

    SQL Server 要求将 Azure 帐户名和访问密钥身份验证或共享访问签名和访问令牌存储在 SQL Server 凭据中。 在执行备份或还原操作时,将使用此信息对 Azure 帐户进行身份验证。

    警告

    Azure 存储支持对存储帐户禁用共享密钥授权。 如果禁用共享密钥授权,SQL Server 备份到 URL 将不起作用。

  • 用于发出 BACKUP 或 RESTORE 命令的用户帐户应属于具有“更改任意凭据”权限的 db_backup 操作员数据库角色。

备份/还原到 Azure Blob 存储的限制

  • SQL Server 将使用页 blob 支持的最大备份大小限制为 1 TB。 并将使用块 blob 支持的最大备份大小限制为 200 GB 左右(50,000 块 * 4 MB MAXTRANSFERSIZE)。 块 blob 支持条带化,可显著增加备份大小 - 上限为 64 个 URL,这将得出以下公式:64 stripes * 50,000 blocks * 4MB maxtransfersize = 12.8 TB

    重要

    尽管单个块 blob 支持的最大备份大小为 200 GB,但 SQL Server 能以更小的块大小进行写入,这可能会导致 SQL Server 在传输整个备份之前就已达到 50,000 个块的限制。 带区备份(即使它们小于 200 GB)可避免达到块限制,尤其是在使用差异备份或未压缩备份时。

  • 可以使用 Transact-SQL、SMO、PowerShell cmdlet 或 SQL Server Management Studio 备份或还原向导发出备份或还原语句。

  • 备份到 Azure 存储帐户仅支持使用共享访问签名 (SAS) 令牌或存储帐户密钥进行身份验证。 不支持所有其他身份验证方法,包括使用 Microsoft Entra ID(以前为 Azure Active Directory)进行身份验证。

  • 不支持创建逻辑设备名称。 因此不支持使用 sp_dumpdevice 或通过 SQL Server Management Studio 将 URL 添加为备份设备。

  • 不支持追加到现有备份 Blob。 只能使用 WITH FORMAT 选项覆盖现有 Blob 的备份。 但是,在使用文件快照备份(使用 WITH FILE_SNAPSHOT 参数)时,不允许使用 WITH FORMAT 参数,以避免留下使用原始文件快照备份创建的孤立文件快照。

  • 只有在使用块 blob 以及使用共享访问签名 (SAS) 令牌(而不是存储帐户密钥)作为 SQL 凭据时才支持通过单个备份操作备份到多个 blob。

  • 页面 Blob 不支持指定 BLOCKSIZE

  • 不支持为页 Blob 指定 MAXTRANSFERSIZE

  • 指定备份集选项 - RETAINDAYSEXPIREDATE 不支持。

  • SQL Server 要求备份设备名称最多包含 259 个字符。 BACKUP TO URL 为用于指定 URL https://.blob.core.windows.net//.bak的必需元素使用 36 个字符,为帐户、容器和 Blob 名称保留 223 个字符。

  • SQL Server 2019(15.x)和早期版本对共享访问签名(SAS)令牌的限制为 256 个字符,这限制了可以使用的令牌类型(例如,不支持用户委派密钥令牌)。

  • 如果服务器通过代理服务器访问 Azure,你必须使用跟踪标志 1819,然后通过以下方法之一设置 WinHTTP 代理配置:

    • Windows XP 或 Windows Server 2003 及更低版本上的 proxycfg.exe 实用工具。
    • Windows Vista 和 Windows Server 2008 或更高版本上的 netsh.exe 实用工具。
  • Azure Blob 存储尚不支持不可变存储。 将“不可变存储”策略设置为 false。

Azure Blob 存储中支持的参数和语句

Azure Blob 存储中对备份/还原语句的支持

备份/还原语句 支持 异常 注释
备份 Y 支持将 BLOCKSIZE 和 MAXTRANSFERSIZE 用于块 blob。 页面 Blob 不支持它们。 备份到块 blob 需要 SQL Server 凭据中保存的共享访问签名。 备份到页 blob 需要 SQL Server 凭据中保存的存储帐户密钥,并且需要指定 WITH CREDENTIAL 参数。
恢复 Y 需要定义 SQL Server 凭据,如果使用存储帐户密钥作为机密定义 SQL Server 凭据,则需要指定 WITH CREDENTIAL 参数
RESTORE FILELISTONLY (恢复文件列表) Y 需要定义 SQL Server 凭据,如果使用存储帐户密钥作为机密定义 SQL Server 凭据,则需要指定 WITH CREDENTIAL 参数
还原 HEADERONLY Y 需要定义 SQL Server 凭据,如果使用存储帐户密钥作为机密定义 SQL Server 凭据,则需要指定 WITH CREDENTIAL 参数
仅恢复标签 Y 需要定义 SQL Server 凭据,如果使用存储帐户密钥作为机密定义 SQL Server 凭据,则需要指定 WITH CREDENTIAL 参数
恢复仅验证 Y 需要定义 SQL Server 凭据,如果使用存储帐户密钥作为机密定义 SQL Server 凭据,则需要指定 WITH CREDENTIAL 参数
恢复REWINDONLY -

有关备份语句的语法和常规信息,请参阅 BACKUP

有关还原语句的语法和常规信息,请参阅 RESTORE 语句

Azure Blob 存储中对备份参数的支持

参数 支持 例外 注释
数据库 Y
日志 Y
TO (URL) Y 与 DISK 和 TAPE 不同,URL 不支持指定或创建逻辑名称。 此参数用于指定备份文件的 URL 路径。
镜像到 Y
WITH 选项:
凭据 Y 仅当使用 BACKUP TO URL 选项备份到 Azure Blob 存储且使用存储帐户密钥作为机密定义了 SQL Server 凭据时,才支持 WITH CREDENTIAL
文件快照 Y
加密 Y WITH ENCRYPTION指定参数时,SQL Server File-Snapshot 备份可确保在备份之前对整个数据库进行 TDE 加密,如果是,则使用为数据库上的 TDE 指定的算法加密文件快照备份文件本身。 如果整个数据库中的所有数据未加密,则备份会失败(例如,加密过程尚未完成)。
微分 Y
仅复制 Y
压缩|无压缩 Y 对文件快照备份不支持
描述 Y
名称 Y
到期日期 | 保留天数 -
NOINIT |INIT - 无法追加到 Blob。 若要覆盖备份,请使用 WITH FORMAT 参数。 在使用文件快照备份(使用 WITH FILE_SNAPSHOT 参数)时,不允许使用 WITH FORMAT 参数,以避免留下由原始备份创建的孤立文件快照。
NOSKIP |跳 -
NOFORMAT |格式 Y 如果未指定 WITH FORMAT,那么对现有 Blob 进行的备份将失败。 当指定 WITH FORMAT 时,这个现有的 Blob 会被覆盖。 在使用文件快照备份(使用 WITH FILE_SNAPSHOT 参数)时,为避免留下由原始文件快照备份创建的孤立文件快照,不允许使用 FORMAT 参数。 但是,在使用文件快照备份(使用 WITH FILE_SNAPSHOT 参数)时,不允许使用 WITH FORMAT 参数,以避免留下因原始备份创建的孤立文件快照。
媒体描述 Y
媒体名称 Y
BLOCKSIZE Y 不支持用于页 blob。 支持用于块 blob。 建议使用 BLOCKSIZE=65536 以优化块 blob 中允许的 50,000 个块的使用。
缓冲计数 Y
MAXTRANSFERSIZE Y 不支持用于页 blob。 支持用于块 blob。 默认值为 1048576。 该值的最大范围为 4 MB,以 65536 字节为增量递增。
建议使用 MAXTRANSFERSIZE=4194304 以优化块 blob 中允许的 50,000 个块的使用。
无校验和 | 校验和 Y
错误时停止 | 错误后继续 Y
统计信息 Y
REWIND |NOREWIND -
卸载 | 取消卸载 -
NORECOVERY |待机 Y
NO_TRUNCATE Y

有关备份参数的详细信息,请参阅 BACKUP

Azure Blob 存储中对还原参数的支持

参数 支持 异常 注释
数据库 Y
日志 Y
来自 (URL) Y FROM URL 参数用于指定备份文件的 URL 路径。
选项:
凭据 Y 仅当使用 RESTORE FROM URL 选项从 Microsoft Azure Blob 存储还原时,才支持 WITH CREDENTIAL。
部分 Y
恢复 | 不恢复 | 待机 Y
加载历史记录 Y
移动 Y
替换 Y
重新启动 Y
受限制用户 Y
文件 -
密码 Y
媒体名称 Y
媒体密码 Y
BLOCKSIZE Y
缓冲计数 -
MAXTRANSFERSIZE -
CHECKSUM |NO_CHECKSUM Y
错误时停止 | 错误后继续 Y
FILESTREAM Y 对快照备份不支持
统计信息 Y
REWIND |NOREWIND -
卸载 | 取消卸载 -
保持复制 Y
KEEP_CDC Y
ENABLE_BROKER |ERROR_BROKER_CONVERSATIONS |NEW_BROKER Y
STOPAT |STOPATMARK |STOPBEFOREMARK Y

有关 Restore 参数的详细信息,请参阅 RESTORE 语句 - 参数

使用 SSMS 进行备份

可以使用 SQL Server 凭据通过 SQL Server Management Studio 中的备份任务将数据库备份到 URL。

注意

若要创建 SQL Server 文件快照备份或覆盖现有媒体集,必须使用 Transact-SQL、PowerShell 或 C# 而不是 SQL Server Management Studio 中的备份任务。

以下步骤介绍为了能够备份到 Azure 存储而对 SQL Server Management Studio 中的“备份数据库”任务做出的更改:

  1. 在“对象资源管理器”中,连接到一个 SQL Server 数据库引擎实例,然后展开该实例。

  2. 展开“数据库”,右键单击所需数据库,指向“任务”,然后选择“备份…”

  3. “目标”部分中的“常规”页上,“备份到:”下拉列表中提供了 URL 选项。 URL选项用于向 Microsoft Azure 存储创建备份。 选择 “添加”,此时将打开 “选择备份目标 ”对话框:

    1. Azure 存储容器:用于存储备份文件的 Microsoft Azure 存储容器的名称。 从下拉列表中选择现有容器,或手动输入容器。

    2. 共享访问策略: 为手动输入的容器输入共享访问签名。 如果选择了现有容器,则此字段不可用。

    3. 备份文件: 备份文件的名称。

    4. 新容器: 用于注册没有共享访问签名的现有容器。 请参阅“连接到Microsoft Azure 订阅(备份到 URL)。

注意

“添加”单个媒体集支持多个备份文件和存储容器。

选择 URL 作为目标后,将禁用“媒体选项”页中的某些选项。 以下文章详细介绍“备份数据库”对话框:

使用维护计划进行备份

与之前介绍的备份任务类似,SQL Server Management Studio 中的维护计划向导包括 URL(作为一个目标选项)以及 SQL 凭据等备份到 Azure 存储所需的其他支持对象。 它具有相同的功能。有关详细信息,请参阅 Using Maintenance Plan Wizard 中的“定义备份任务”部分

注意

若要使用共享访问令牌创建条带备份集、SQL Server 文件快照备份或 SQL 凭据,必须使用 Transact-SQL、PowerShell 或 C# 而不是维护计划向导中的备份任务。

使用 SSMS 进行还原

“还原数据库”任务包括 URL 作为要从其还原的设备。 以下步骤描述如何使用还原任务从 Azure Blob 存储进行还原:

  1. 右键单击“数据库”,然后选择“还原数据库...”

  2. 在“常规”页上,在“源”部分下选择“设备”

  3. 选择“浏览(…)”按钮,打开“选择备份设备”对话框

  4. 备份媒体类型:下拉列表中选择URL。 选择“添加”,打开“选择备份文件位置”对话框

    1. Azure 存储容器:包含备份文件的 Microsoft Azure 存储容器的完全限定名称。 从下拉列表中选择现有容器,或手动输入完全限定的容器名称。

    2. 共享访问签名: 用于输入指定容器的共享访问签名。

    3. 加: 用于注册没有共享访问签名的现有容器。 请参阅“连接到Microsoft Azure 订阅(备份到 URL)。

    4. 确定:SQL Server 使用所提供的 SQL 凭据信息连接到 Microsoft Azure 存储,然后打开“在 Microsoft Azure 上定位备份文件”对话框。 此页上显示位于存储容器中的备份文件。 选择要还原的文件,然后选择“确定”。 这会将你返回到 “选择备份设备 ”对话框,然后在此对话框中选择 “确定 ”将返回到主 “还原 ”对话框,你可以在其中完成还原。

代码示例

本节包含以下示例。

注意

有关将 SQL Server 2016 与 Azure Blob 存储配合使用的教程,请参阅 教程:将 Azure Blob 存储与 SQL Server 配合使用

创建共享访问签名

下面的示例创建可用于在新创建的容器中创建 SQL Server 凭据的共享访问签名。 该脚本创建了与存储访问策略关联的共享访问签名。 有关详细信息,请参阅 共享访问签名,第 1 部分:了解 SAS 模型。 此脚本还编写在 SQL Server 上创建凭据时所需的 T-SQL 命令。

注意

此示例需要Microsoft Azure PowerShell。 有关安装和使用 Azure PowerShell 的信息,请参阅 如何安装和配置 Azure PowerShell
这些脚本是使用 Azure PowerShell 5.1.15063 验证的。

与存储访问策略关联的共享访问签名

# Define global variables for the script
$prefixName = '<a prefix name>'  # used as the prefix for the name for various objects
$subscriptionName='<your subscription name>'   # the name of subscription name you will use
$locationName = '<a data center ___location>'  # the data center region you will use
$storageAccountName= $prefixName + 'storage' # the storage account name you will create or use
$containerName= $prefixName + 'container'  # the storage container name to which you will attach the SAS policy with its SAS token
$policyName = $prefixName + 'policy' # the name of the SAS policy

# Set a variable for the name of the resource group you will create or use
$resourceGroupName=$prefixName + 'rg'

# adds an authenticated Azure account for use in the session
Connect-AzAccount

# set the tenant, subscription and environment for use in the rest of
Set-AzContext -SubscriptionName $subscriptionName

# create a new resource group - comment out this line to use an existing resource group
New-AzResourceGroup -Name $resourceGroupName -Location $locationName

# Create a new ARM storage account - comment out this line to use an existing ARM storage account
New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type Standard_RAGRS -Location $locationName

# Get the access keys for the ARM storage account
$accountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName

# Create a new storage account context using an ARM storage account
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].value

# Creates a new container in Azure Blob Storage
$container = New-AzStorageContainer -Context $storageContext -Name $containerName
$cbc = $container.CloudBlobContainer

# Sets up a Stored Access Policy and a Shared Access Signature for the new container
$policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission "rwld"
$sas = New-AzStorageContainerSASToken -Policy $policyName -Context $storageContext -Container $containerName
Write-Host 'Shared Access Signature= '$($sas.TrimStart('?'))''

# Outputs the Transact SQL to the clipboard and to the screen to create the credential using the Shared Access Signature
Write-Host 'Credential T-SQL'
$tSql = "CREATE CREDENTIAL [{0}] WITH IDENTITY='Shared Access Signature', SECRET='{1}'" -f $cbc.Uri,$sas.TrimStart('?')
$tSql | clip
Write-Host $tSql

成功运行脚本后,将 CREATE CREDENTIAL 命令复制到查询工具,连接到 SQL Server 的实例并运行该命令以创建使用共享访问签名的凭据。

创建凭据

下面的示例创建用于向 Azure Blob 存储进行身份验证的 SQL Server 凭据。 执行以下操作之一。

  1. 使用共享访问签名

    如果运行前面的脚本来创建共享访问签名,请将 CREATE CREDENTIAL 复制到连接 SQL Server 实例的查询编辑器并运行命令。

    下面的 T-SQL 是创建凭据以使用共享访问签名的一个例子。

    IF NOT EXISTS (SELECT *
                   FROM sys.credentials
                   WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>')
        CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>]
            WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<SAS_TOKEN>';
    
  2. 使用存储帐户标识和访问密钥

    IF NOT EXISTS (SELECT *
                   FROM sys.credentials
                   WHERE name = '<mycredentialname>')
        CREATE CREDENTIAL [<mycredentialname>]
            WITH IDENTITY = '<mystorageaccountname>', SECRET = '<mystorageaccountaccesskey>';
    

执行完整数据库备份

下面的示例执行 AdventureWorks2022 数据库到 Azure Blob 存储的完整数据库备份。 使用以下示例之一:

  1. To URL 使用共享访问签名

    BACKUP DATABASE AdventureWorks2022
        TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022.bak';
    GO
    
  2. To URL 使用存储帐户标识和访问密钥

    BACKUP DATABASE AdventureWorks2022
    TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022.bak'
    WITH CREDENTIAL = '<mycredentialname>',
    COMPRESSION, STATS = 5;
    GO
    

使用 STOPAT 还原到时间点

下面的示例将 AdventureWorks2022 示例数据库还原到某个时间点的状态,并显示还原操作。

From URL 使用共享访问签名

RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022_2015_05_18_16_00_00.bak'
WITH
MOVE 'AdventureWorks2022_data' TO 'C:\Program Files\Microsoft SQL Server\<myinstancename>\MSSQL\DATA\AdventureWorks2022.mdf',
MOVE 'AdventureWorks2022_log' TO 'C:\Program Files\Microsoft SQL Server\<myinstancename>\MSSQL\DATA\AdventureWorks2022.ldf',
NORECOVERY, REPLACE, STATS = 5;
GO

RESTORE LOG AdventureWorks2022 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022_2015_05_18_18_00_00.trn'
WITH RECOVERY, STOPAT = 'May 18, 2015 5:35 PM';
GO