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

适用于:SQL ServerAzure SQL 托管实例

本文介绍使用 Azure Blob 存储作为备份目标所需的概念、要求和组件。 备份和还原功能与使用DISKTAPE时相同或类似,但存在一些差异。 本文将介绍这些区别和多个代码示例。

Tip

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

Overview

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 存储安全策略证书的一种安全而简单的方法。

务必要了解各组件及其交互,以便进行备份到 Azure Blob 存储或从中进行还原。

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

Azure 存储和 S3 兼容存储

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 的对比

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

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

对于备份到 Azure Blob 存储,SQL Server 2016 或更高版本中仅提供备份到块 Blob。 如果运行的是 SQL Server 2016 或更高版本,请备份到块 Blob,而不是备份到页 Blob。

主要原因是:

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

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

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

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

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

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

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

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

Azure Blob 存储

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

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

Blob: 任何类型和大小的文件。 Azure Blob 存储中可存储两类 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,BACKUP 则会失败,除非指定了用于覆盖 Blob 中现有备份文件的 WITH FORMAT 选项。

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

Note

不支持通过 HTTP 备份至 URL。

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

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

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

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

Azure 不可变存储支持

SQL Server 2025 (17.x) 预览版引入了对 Azure 不可变存储的支持,可防范勒索软件攻击。 写入不可变存储的文件无法修改或删除,如不可变性所定义。

通常,SQL Server 备份是在两个步骤中创建的。 最初,备份 .bak 文件是使用零创建的,然后使用数据更新该文件。 由于写入并提交文件后,不允许对不可变存储进行文件修改,因此备份过程现在跳过初始步骤,创建包含零的备份文件。 而是在写入块 Blob 后,在一个步骤中创建整个备份。

在预览期间,需要 跟踪标志 3012 才能启用对 URL 备份的不可变存储支持。

若要使用不可变存储来备份 SQL Server 2025(17.x)预览版至 URL,请执行以下步骤:

  1. 为 Azure 存储容器配置不可变性

  2. 通过运行以下 DBCC 命令为 SQL Server 实例启用跟踪标志 3012:

    DBCC TRACEON(3012, -1);
    
  3. 发出 BACKUP ,将数据库备份到 Azure 存储容器。 如果使用不 WITH FORMAT 可变存储上的选项,并且已存在具有相同名称的备份,则会出现错误,并且备份失败。

    BACKUP DATABASE [<Database>] TO URL = '<url>';
    

Azure Blob 存储的安全性

备份到 Azure Blob 存储或从从还原时,需满足以下安全注意事项和要求。

  • 为 Azure Blob 存储创建容器时,建议将访问权限设置为 专用。 将访问权限设置为 private 后,仅允许能够提供向 Azure 帐户进行身份验证所需的信息的用户或帐户进行访问。

    Important

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

    Warning

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

  • 用于发出BACKUPRESTORE命令的用户帐户应在具有更改任何凭证权限的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

    Important

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

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

  • 备份到 Azure 存储帐户时,SQL Server 仅支持使用共享访问签名(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 个字符。 用于指定 URL 的 BACKUP TO URL 需要 36 个字符,剩下 223 个字符用于帐户、容器和 Blob 名称。

  • 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。

  • 高级 存储不支持备份到 URL。

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

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

备份/还原命令 Supported Exceptions Comments
BACKUP Yes BLOCKSIZEMAXTRANSFERSIZE 都支持块 blob。 页 Blob 不支持它们。 BACKUP 到块 blob 需要一个保存在 SQL Server 凭据中的共享访问签名。 BACKUP 转为页 Blob 需要将存储帐户密钥保存为 SQL Server 凭据,并且需要指定 WITH CREDENTIAL 参数。
RESTORE Yes 要求定义 SQL Server 凭据,并且如果使用存储帐户密钥作为机密来定义 SQL Server 凭据,则需要指定参数 WITH CREDENTIAL
RESTORE FILELISTONLY Yes 要求定义 SQL Server 凭据,并且如果使用存储帐户密钥作为机密来定义 SQL Server 凭据,则需要指定参数 WITH CREDENTIAL
RESTORE HEADERONLY Yes 要求定义 SQL Server 凭据,并且如果使用存储帐户密钥作为机密来定义 SQL Server 凭据,则需要指定参数 WITH CREDENTIAL
RESTORE LABELONLY Yes 要求定义 SQL Server 凭据,并且如果使用存储帐户密钥作为机密来定义 SQL Server 凭据,则需要指定参数 WITH CREDENTIAL
RESTORE VERIFYONLY Yes 要求定义 SQL Server 凭据,并且如果使用存储帐户密钥作为机密来定义 SQL Server 凭据,则需要指定参数 WITH CREDENTIAL
RESTORE REWINDONLY No

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

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

在 Azure Blob 存储中支持备份参数

Argument Supported Exception Comments
DATABASE Yes
LOG Yes
TOURL Yes DISKTAPE 不同,URL 不支持指定或创建逻辑名称。 此参数用于指定备份文件的 URL 路径。
MIRROR TO Yes
WITH 选项:
CREDENTIAL Yes WITH CREDENTIAL 仅当使用 BACKUP TO URL 选项备份到 Azure Blob 存储,并且 SQL Server 凭据通过存储帐户密钥作为机密定义后才受支持。
FILE_SNAPSHOT Yes
ENCRYPTION Yes 当指定了 WITH ENCRYPTION 参数时,SQL Server 文件快照备份会确保在执行备份之前对整个数据库进行 TDE 加密,如果是这样,请使用数据库中为 TDE 指定的算法加密文件快照备份文件本身。 如果整个数据库中的所有数据未加密,则备份会失败(例如,加密过程尚未完成)。
DIFFERENTIAL Yes
COPY_ONLY Yes
COMPRESSION|NO_COMPRESSION Yes 文件快照备份不支持
DESCRIPTION Yes
NAME Yes
EXPIREDATE | RETAINDAYS No
NOINIT | INIT No 无法追加到 Blob。 若要覆盖备份,请使用 WITH FORMAT 参数。 在使用文件快照备份(使用 WITH FILE_SNAPSHOT 参数)时,不允许使用 WITH FORMAT 参数,以避免留下由原始备份创建的孤立文件快照。
NOSKIP | SKIP No
NOFORMAT | FORMAT Yes 如果未指定 WITH FORMAT,那么对现有 Blob 进行的备份将失败。 当指定 WITH FORMAT 时,这个现有的 Blob 会被覆盖。 但是,在使用文件快照备份(使用 WITH FILE_SNAPSHOT 参数)时,不允许使用 FORMAT 参数,以避免留下使用原始文件快照备份创建的孤立文件快照。 在使用文件快照备份(使用 WITH FILE_SNAPSHOT 参数)时,不允许使用 WITH FORMAT 参数,以避免留下由原始备份创建的孤立文件快照。
MEDIADESCRIPTION Yes
MEDIANAME Yes
BLOCKSIZE Yes 页 Blob 不支持。 块 Blob 支持。 建议 BLOCKSIZE=65536 优化块 Blob 中允许的 50,000 个块的使用。
BUFFERCOUNT Yes
MAXTRANSFERSIZE Yes 页 Blob 不支持。 块 Blob 支持。 默认值为 1048576。 该值可以以 65,536 字节为增量,最高可达 4 MB。

建议 MAXTRANSFERSIZE=4194304 优化块 Blob 中允许的 50,000 个块的使用。
NO_CHECKSUM | CHECKSUM Yes
STOP_ON_ERROR | CONTINUE_AFTER_ERROR Yes
STATS Yes
REWIND | NOREWIND No
UNLOAD | NOUNLOAD No
NORECOVERY | STANDBY Yes
NO_TRUNCATE Yes

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

在 Azure Blob 存储中支持还原参数

Argument Supported Exceptions Comments
DATABASE Yes
LOG Yes
FROMURL Yes FROM URL 参数用于指定备份文件的 URL 路径。
WITH 选项:
CREDENTIAL Yes WITH CREDENTIAL 仅当使用 RESTORE FROM URL 选项从 Azure Blob 存储还原时才受支持。
PARTIAL Yes
RECOVERY | NORECOVERY | STANDBY Yes
LOADHISTORY Yes
MOVE Yes
REPLACE Yes
RESTART Yes
RESTRICTED_USER Yes
FILE No
PASSWORD Yes
MEDIANAME Yes
MEDIAPASSWORD Yes
BLOCKSIZE Yes
BUFFERCOUNT No
MAXTRANSFERSIZE No
CHECKSUM | NO_CHECKSUM Yes
STOP_ON_ERROR | CONTINUE_AFTER_ERROR Yes
FILESTREAM Yes 快照备份不支持
STATS Yes
REWIND | NOREWIND No
UNLOAD | NOUNLOAD No
KEEP_REPLICATION Yes
KEEP_CDC Yes
ENABLE_BROKER | ERROR_BROKER_CONVERSATIONS | NEW_BROKER Yes
STOPAT | STOPATMARK | STOPBEFOREMARK Yes

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

使用 SSMS 进行备份

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

Note

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

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

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

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

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

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

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

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

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

Note

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

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

使用维护计划进行备份

与前面所述的备份任务类似,SQL Server Management Studio 中的维护计划向导包括 URL 作为目标选项之一,以及备份到 Azure 存储(如 SQL 凭据)所需的其他支持对象。 有关详细信息,请参阅使用维护计划向导中的定义备份任务部分。

Note

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

使用 SSMS 进行还原

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

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

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

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

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

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

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

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

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

代码示例

本部分包含以下示例。

Note

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

创建共享访问签名

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

Note

此示例需要 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. 使用共享访问签名备份到 URL

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

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

使用 STOPAT 还原到时间点

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

使用共享访问签名从 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