BACKUP (Transact-SQL)

备份 SQL 数据库。

选择一个产品

在下面的行中,选择你感兴趣的产品名称,系统将只显示该产品的信息。

有关语法约定的详细信息,请参阅 Transact-SQL 语法约定。

* SQL Server *  

 

SQL Server

备份完整的SQL Server数据库以创建数据库备份,或者备份数据库的一个或多个文件或文件组以创建文件备份(BACKUP DATABASE)。 此外,在完整恢复模式或大容量日志恢复模式下,备份数据库的事务日志以创建日志备份(BACKUP LOG)。

语法

--Back up a whole database
BACKUP DATABASE { database_name | @database_name_var }
  TO <backup_device> [ , ...n ]
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { DIFFERENTIAL
           | <general_WITH_options> [ , ...n ] } ]
[ ; ]

--Back up specific files or filegroups
BACKUP DATABASE { database_name | @database_name_var }
 <file_or_filegroup> [ , ...n ]
  TO <backup_device> [ , ...n ]
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { DIFFERENTIAL | <general_WITH_options> [ , ...n ] } ]
[ ; ]

--Create a partial backup
BACKUP DATABASE { database_name | @database_name_var }
 READ_WRITE_FILEGROUPS [ , <read_only_filegroup> [ , ...n ] ]
  TO <backup_device> [ , ...n ]
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { DIFFERENTIAL | <general_WITH_options> [ , ...n ] } ]
[ ; ]

--Back up the transaction log (full and bulk-logged recovery models)
BACKUP LOG
  { database_name | @database_name_var }
  TO <backup_device> [ , ...n ]
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { <general_WITH_options> | <log_specific_options> } [ , ...n ] ]
[ ; ]

--Back up all the databases on an instance of SQL Server (a server)
ALTER SERVER CONFIGURATION
SET SUSPEND_FOR_SNAPSHOT_BACKUP ON
[ ; ]

BACKUP SERVER
  TO <backup_device> [ , ...n ]
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { METADATA_ONLY
           | <general_WITH_options> [ , ...n ] } ]
[ ; ]

--Back up a group of databases
ALTER DATABASE <database>
SET SUSPEND_FOR_SNAPSHOT_BACKUP ON

ALTER DATABASE <...>
SET SUSPEND_FOR_SNAPSHOT_BACKUP ON
...

BACKUP GROUP { <database> [ , ... ] }
  TO <backup_device> [ , ...n ]
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { METADATA_ONLY
           | <general_WITH_options> [ , ...n ] } ]
[ ; ]

<backup_device>::=
 {
  { logical_device_name | @logical_device_name_var }
 | {   DISK
     | TAPE
     | URL } =
     { 'physical_device_name' | @physical_device_name_var | 'NUL' }
 }

<MIRROR TO clause>::=
 MIRROR TO <backup_device> [ , ...n ]

<file_or_filegroup>::=
 {
   FILE = { logical_file_name | @logical_file_name_var }
 | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
 }

<read_only_filegroup>::=
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }

<general_WITH_options> [ , ...n ] ::=
--Backup Set Options
   COPY_ONLY
 | [ COMPRESSION [ ( ALGORITHM = { MS_XPRESS | ZSTD | accelerator_algorithm } [ , LEVEL = { LOW | MEDIUM | HIGH } ] ) ] | NO_COMPRESSION ]
 | DESCRIPTION = { 'text' | @text_variable }
 | NAME = { backup_set_name | @backup_set_name_var }
 | CREDENTIAL
 | ENCRYPTION
 | FILE_SNAPSHOT
 | { EXPIREDATE = { 'date' | @date_var }
        | RETAINDAYS = { days | @days_var } }
 | { METADATA_ONLY | SNAPSHOT }

--Media set options
   { NOINIT | INIT }
 | { NOSKIP | SKIP }
 | { NOFORMAT | FORMAT }
 | MEDIADESCRIPTION = { 'text' | @text_variable }
 | MEDIANAME = { media_name | @media_name_variable }
 | BLOCKSIZE = { blocksize | @blocksize_variable }

--Data Transfer Options
   BUFFERCOUNT = { buffercount | @buffercount_variable }
 | MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }

--Error Management Options
   { NO_CHECKSUM | CHECKSUM }
 | { STOP_ON_ERROR | CONTINUE_AFTER_ERROR }

--Compatibility Options
   RESTART

--Monitoring Options
   STATS [ = percentage ]

--Tape Options
   { REWIND | NOREWIND }
 | { UNLOAD | NOUNLOAD }

--Encryption Options
 ENCRYPTION (ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY } , encryptor_options ) <encryptor_options> ::=
   SERVER CERTIFICATE = Encryptor_Name | SERVER ASYMMETRIC KEY = Encryptor_Name

<log_specific_options> [ , ...n ] ::=
--Log-specific Options
   { NORECOVERY | STANDBY = undo_file_name }
 | NO_TRUNCATE

参数

DATABASE

指定一个完整数据库备份。 如果指定了一个文件和文件组的列表,则仅备份该列表中的文件和文件组。 在完整数据库备份或差异数据库备份期间,SQL Server备份足够的事务日志,以在还原备份时生成一致的数据库。

还原由 BACKUP DATABASE ( 数据备份)创建的备份时,将还原整个备份。 只有日志备份才能还原到备份中的特定时间或事务。

注意

对 master 数据库,只能执行完整数据库备份。

日志

指定仅备份事务日志。 该日志是从上一次成功执行的日志备份到当前日志的末尾。 必须创建完整备份,才能创建第一个日志备份。

您可以通过在 、 或 WITH STOPAT 在 LOG 语句中STOPBEFOREMARK指定RESTORE,将日志备份恢复到备份中的特定时间或事务。

注意

执行典型日志备份后,如果没有指定 WITH NO_TRUNCATE 或 COPY_ONLY,某些事务日志记录将变为不活动状态。 一个或多个虚拟日志文件中的所有记录变为不活动状态后,日志将被截断。 如果在例程日志备份后日志未截断日志,则可能会延迟日志截断。 有关详细信息,请参阅可能延迟日志截断的因素。

GROUP (<数据库>, ...n)

Applies to: SQL Server 2022 (16.x) 及更高版本。

备份一组数据库。 使用快照备份。 需要 WITH METADATA_ONLY。 请参阅 创建Transact-SQL快照备份。

服务器

Applies to: SQL Server 2022 (16.x) 及更高版本。

备份SQL Server实例上的所有数据库。 使用快照备份。 需要 WITH METADATA_ONLY。 请参阅 创建Transact-SQL快照备份。

METADATA_ONLY

Applies to: SQL Server 2022 (16.x) 及更高版本。

快照备份所必需的。 BACKUP SERVER 或 BACKUP GROUP... 请参阅 创建Transact-SQL快照备份。

METADATA_ONLY是同义词 。SNAPSHOT 虚拟设备接口 (VDI) 使用 SNAPSHOT。 有关 VDI 的详细信息,请参阅虚拟设备接口 (VDI) 参考。

{ database_name | @database_name_var }

从中备份事务日志、部分数据库或完整数据库的数据库。 如果作为变量(@database_name_var)提供,可以将此名称指定为字符串常量(@database_name_var = 数据库名称),也可以指定为字符串数据类型的变量(除 ntext 或 文本 数据类型除外)。

注意

无法备份数据库镜像合作关系中的镜像数据库。

< > file_or_filegroup [ , ...n ]

仅用于 BACKUP DATABASE指定要包含在文件备份中的数据库文件或文件组,或指定要包含在部分备份中的只读文件或文件组。

FILE = { logical_file_name | @logical_file_name_var }

文件或变量的逻辑名称,其值等同于要包含在备份中的文件的逻辑名称。

FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }

文件组或变量的逻辑名称,其值等同于要包含在备份中的文件组的逻辑名称。 在简单恢复模式下,只允许对只读文件组执行文件组备份。

注意

如果数据库的大小和性能要求使得进行数据库备份不切实际,则应考虑使用文件备份。 NUL 设备可用于测试备份的性能,但不应在生产环境中使用。

  • n

    一个占位符,指示可以在逗号分隔的列表中指定多个文件和文件组。 数量不受限制。

有关详细信息,请参阅 Full 文件备份 (SQL Server) 和 备份文件和文件组。

READ_WRITE_FILEGROUPS [ , FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } [ , ...n ] ]

指定部分备份。 部分备份包括数据库中的所有读/写文件:主文件组和任何读/写辅助文件组,以及任何指定的只读文件或文件组。

READ_WRITE_FILEGROUPS

指定在部分备份中备份所有读/写文件组。 如果数据库是只读的,则 READ_WRITE_FILEGROUPS 仅包括主文件组。

重要

使用 FILEGROUP 显式列出读/写文件组,而不是READ_WRITE_FILEGROUPS创建文件备份。

  • FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }

    只读文件组或变量的逻辑名称,其值等同于要包含在部分备份中的只读文件组的逻辑名称。 有关详细信息,请参阅本文前面的“<file_or_filegroup>”。

  • n

    一个占位符,指示可以在逗号分隔的列表中指定多个只读文件组。

    有关部分备份的详细信息,请参阅 Partial Backups (SQL Server)。

TO <backup_device> [ , ...n ]

指示随附的 备份设备 集是无序介质集或镜像介质集中的第一个镜像(其中声明了一个或多个 MIRROR TO 子句)。

<backup_device>

指定用于备份操作的逻辑备份设备或物理备份设备。

{ logical_device_name | @logical_device_name_var }

applies to: SQL Server。

备份数据库的备份设备的逻辑名称。 逻辑名称必须遵守标识符规则。 如果作为变量(@logical_device_name_var)提供,则可以将备份设备名称指定为字符串常量(@logical_device_name_var = 逻辑备份设备名称),也可以指定为除 ntext 或 文本 数据类型以外的任何字符串数据类型的变量。

{ DISK |磁带 |URL} = { 'physical_device_name' | @physical_device_name_var |'NUL' }

applies to: SQL Server。

指定磁盘文件或磁带设备,或 URL。

URL 格式用于创建备份以Microsoft Azure Blob 存储或 S3 兼容的对象存储。 有关详细信息和示例,请参阅:

可以使用从以下开始的托管标识备份到Microsoft Azure Blob 存储:

注意

NUL 磁盘设备会丢弃发送到它的所有信息,并且只应用于测试。 这不适用于生产用途。

重要

从 SQL Server 2012 (11.x) SP1 CU2 到 SQL Server 2014 (12.x),在备份到Azure Blob 存储 URL 时,只能备份到单个设备。 若要在备份到 URL 时备份到多个设备,必须使用 SQL Server 2016 (13.x) 及更高版本,并且必须使用共享访问签名 (SAS) 令牌。 有关创建共享访问签名的示例,请参阅SQL Server备份到 URL,以获取 Azure Blob 存储 和 使用 PowerShell Azure 存储上的共享访问签名 (SAS) 令牌创建 SQL 凭据。

磁盘设备在语句中 BACKUP 指定之前不必存在。 如果物理设备存在且 INIT 该选项未在语句中 BACKUP 指定,则会将备份追加到设备。

NUL 设备放弃发送到此文件的所有输入,但备份仍将所有页面标记为已备份。

有关详细信息,请参阅 Backup 设备(SQL Server)。

注意

TAPE 选项将在SQL Server的未来版本中删除。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

  • n

    一个占位符,指示最多可以在逗号分隔列表中指定最多 64 个备份设备。

镜像到 <backup_device> [ , ...n ]

指定一组最多三个辅助备份设备,每个设备镜像子句中指定的 TO 备份设备。 子 MIRROR TO 句必须指定与子句相同的备份设备 TO 类型和数量。 子句的最大数目 MIRROR TO 为 3。

此选项仅在SQL Server企业版中可用。

注意

对于 MIRROR TO = DISK, BACKUP 根据磁盘的扇区大小,自动确定磁盘设备的相应块大小。 MIRROR TO如果磁盘的格式与指定为主备份设备的磁盘不同,则备份命令将失败。 若要将备份镜像到具有不同扇区大小的设备, BLOCKSIZE 必须指定该参数,并且应设置为所有目标设备中的最高扇区大小。 有关块大小的详细信息,请参阅本文后面的“BLOCKSIZE”。

<backup_device>

请参阅本部分前面的“<backup_device>”。

  • n

    一个占位符,指示最多可以在逗号分隔列表中指定最多 64 个备份设备。 子句中的 MIRROR TO 设备数必须等于子句中的 TO 设备数。

    有关详细信息,请参阅本文后面的 镜像媒体集中的媒体系列 。

  • [下一个镜像]

    一个占位符,指示除了单个BACKUP子句外,单个MIRROR TO语句最多可以包含三TO个子句。

WITH 选项

指定要用于备份操作的选项。

CREDENTIAL

applies to: SQL Server。

仅在创建备份以Azure Blob 存储或 S3 兼容的对象存储时使用。

文件快照

应用到:SQL Server 2016(13.x)及更高版本。

当使用Azure Blob 存储存储所有SQL Server数据库文件时,用于创建数据库文件的Azure快照。 有关详细信息,请参阅 Microsoft Azure 中的 SQL Server 数据文件。 SQL Server快照备份以一致状态拍摄数据库文件(数据和日志文件)的Azure快照。 一组一致的Azure快照构成备份,并记录在备份文件中。 唯一的BACKUP DATABASE TO URL WITH FILE_SNAPSHOTBACKUP LOG TO URL WITH FILE_SNAPSHOT区别在于后者也会截断事务日志,而前者则不截断事务日志。 使用SQL Server快照备份,在SQL Server建立备份链所需的初始完整备份之后,只有单个事务日志备份才能将数据库还原到事务日志备份的时间点。 此外,只需两次事务日志备份即可将数据库还原到两次事务日志备份之间的时间点。

微分

仅用于 BACKUP DATABASE指定数据库或文件备份应仅包含自上次完整备份以来更改的数据库或文件部分。 差异备份一般会比完整备份占用更少的空间。 使用此选项,使自上次完整备份以来执行的所有单个日志备份都不必应用。

注意

默认情况下,BACKUP DATABASE 创建完整备份。

有关详细信息,请参阅 差异备份(SQL Server)。

加密

用于指定将备份加密。 可指定加密备份所用的加密算法,或指定 NO_ENCRYPTION 以不加密备份。 建议进行加密以帮助保护备份文件的安全。 可指定的算法的列表如下:

  • AES_128
  • AES_192
  • AES_256
  • TRIPLE_DES_3KEY
  • NO_ENCRYPTION

如果选择加密,则还必须使用加密程序选项指定加密程序:

  • SERVER CERTIFICATE = Encryptor_Name
  • SERVER ASYMMETRIC KEY = Encryptor_Name

SERVER CERTIFICATE 和 SERVER ASYMMETRIC KEY 是在 master 数据库中创建的证书和非对称密钥。 更多信息请参见 CREATE CERTIFICATE 和 CREATE ASYMMETRIC KEY 分别。

警告

当加密与参数一起使用FILE_SNAPSHOT时,元数据文件本身使用指定的加密算法进行加密,并且系统验证是否已为数据库完成透明数据加密(TDE)。 不会再对数据本身进行其他加密。 如果未加密数据库,或者未在发出备份语句之前完成加密,则备份将失败。

备份集选项

这些选项对此备份操作创建的备份集进行操作。

注意

若要为还原操作指定备份集,请使用 FILE = <backup_set_file_number> 选项。 关于如何指定备份集的更多信息,请参见参数中的RESTORE“指定备份集”。

仅复制

指定备份是 仅复制备份,不会影响备份的正常顺序。 仅复制备份是独立于定期计划的常规备份而创建的。 仅复制备份不会影响数据库的整体备份和还原过程。

应在出于特殊目的而进行备份的情况下使用仅复制备份,例如在进行联机文件还原前备份日志。 通常,仅复制日志备份仅使用一次即被删除。

  • 与 一起使用 BACKUP DATABASE时,此选项 COPY_ONLY 将创建不能用作差异基础的完整备份。 差异位图不会更新,差异备份的行为就像仅复制备份不存在一样。 后续差异备份将最新的常规完整备份用作它们的基准。

    重要

    如果将 DIFFERENTIAL 和 COPY_ONLY 一起使用,则忽略 COPY_ONLY 并创建差异备份。

  • 与 一起使用 BACKUP LOG时,此选项 COPY_ONLY 将创建 一个仅复制日志备份,该备份不会截断事务日志。 仅复制日志备份对日志链没有影响,其他日志备份的行为就像仅复制备份不存在一样。

有关详细信息,请参阅仅复制备份。

[ COMPRESSION [ ( ALGORITHM = { MS_XPRESS |ZSTD |accelerator_algorithm } [ , LEVEL = { LOW |MEDIUM |HIGH } ] ] | |NO_COMPRESSION ]

指定是否为此备份执行备份压缩,该设置将替代服务器级默认设置。

安装时,默认行为是不进行备份压缩。 但此默认设置可通过设置 backup compression default 服务器配置选项进行更改。 有关查看此选项的当前值的信息,请参阅 View 或更改服务器属性 (SQL Server)。

有关将备份压缩与已启用 透明数据加密(TDE) 的数据库配合使用的信息,请参阅 “备注 ”部分。

ZSTD 压缩算法从 2025 SQL Server(17.x)开始可用。

  • 压缩

    显式启用备份压缩。

  • NO_COMPRESSION

    显式禁用备份压缩。

  • 水平

    Applies to: SQL Server 2022 (16.x) 及更高版本。

    这是指定压缩级别的可选参数。 影响 ALGORITHM = MS_EXPRESS,从 SQL Server 2025 (17.x), ALGORITHM = ZSTD 开始。

    可接受的值为:

    • LOW(默认值)
    • MEDIUM
    • HIGH
  • 算法

    Applies to: SQL Server 2022 (16.x) 及更高版本。

    ZSTD 并且 MS_EXPRESS 是软件级算法。 QAT_DEFLATE是基于硬件的算法,需要用于SQL Server的 Intel® QuickAssist 技术(QAT)。 默认值为 MS_XPRESS。

    若要使用 2025 SQL Server中引入的 ZSTD 压缩算法(17.x):

    BACKUP DATABASE <database_name> TO DISK WITH COMPRESSION (ALGORITHM = ZSTD, LEVEL = MEDIUM)
    

    如果已配置集成加速和卸载,则可以使用解决方案提供的加速器。 例如,如果已配置 “配置集成加速和卸载”,则以下示例使用加速器解决方案完成备份,使用 QATzip 库 QZ_DEFLATE 使用压缩级别 1。

    BACKUP DATABASE <database_name> TO DISK WITH COMPRESSION (ALGORITHM = QAT_DEFLATE)
    

    示例行为:

    Backup 语句 结果
    BACKUP DATABASE *database_name* TO {DISK | TAPE | URL} WITH NO_COMPRESSION 不带任何压缩的备份
    BACKUP DATABASE *database_name* TO {DISK | TAPE | URL} WITH COMPRESSION 使用服务器选项 backup compression algorithm 指定的算法进行压缩备份(默认值 MS_XPRESS)
    BACKUP DATABASE *database_name* TO {DISK | TAPE | URL} WITH COMPRESSION (ALGORITHM = MS_XPRESS) 使用 MS_XPRESS 算法进行压缩备份
    BACKUP DATABASE *database_name* TO {DISK | TAPE | URL} WITH COMPRESSION (ALGORITHM = ZSTD) 使用 ZSTD 算法进行压缩备份。
    BACKUP DATABASE *database_name* TO {DISK | TAPE | URL} WITH COMPRESSION (ALGORITHM = ZSTD, LEVEL = HIGH) 使用压缩级别的 HIGHZSTD 算法进行压缩备份。

描述 = { '文本' | @text_variable }

指定说明备份集的自由格式文本。 该字符串最长可达 255 个字符。

姓名 = { backup_set_name | @backup_set_var }

指定备份集的名称。 名称最长可达 128 个字符。 NAME如果未指定,则为空。

{ EXPIREDATE = 'date' |RETAINDAYS = days }

指定允许覆盖该备份的备份集的日期。 如果同时使用这些选项, RETAINDAYS 则优先于 EXPIREDATE。

如果这两个选项均未指定,则过期日期由 media retention 配置设置确定。 有关详细信息,请参阅服务器配置选项。

重要

这些选项仅阻止SQL Server覆盖文件。 用其他方法仍可擦除磁带,而通过操作系统也可以删除磁盘文件。 有关过期验证的详细信息,请参阅 SKIP 本文中的 FORMAT。

  • EXPIREDATE = { '日期' | @date_var }

    指定备份集到期和允许被覆盖的日期。 如果作为变量提供(@date_var),则此日期必须遵循配置的系统 日期/时间 格式,并指定为下列格式之一:

    • 字符串常量 (@date_var = date)
    • 字符串数据类型(ntext 或 text 数据类型除外)的变量
    • smalldatetime
    • datetime 变量

    例如:

    • 'Dec 31, 2020 11:59 PM'
    • '1/1/2021'

    有关如何指定 日期/ 时间值的信息,请参阅 日期和时间类型。

    注意

    若要忽略过期日期,请使用 SKIP 选项。

  • RETAINDAYS = { 天 | @days_var }

    指定必须经过多少天才可以覆盖该备份介质集。 如果作为变量(@days_var)提供,则必须将其指定为整数。

{ METADATA_ONLY |SNAPSHOT }

Applies to: SQL Server 2022 (16.x) 及更高版本。

METADATA_ONLY 是 SNAPSHOT 同义词。

媒体集选项

这些选项作为一个整体对介质集进行操作。

{ NOINIT |INIT }

控制备份操作是追加到还是覆盖备份介质中的现有备份集。 默认值是追加到介质上的最新备份集(NOINIT)。

注意

有关 { } 和 { NOINIT | INITNOSKIP | SKIP } 之间的交互的信息,请参阅本文后面的备注。

  • NOINIT

    表示备份集将追加到指定的介质集上,以保留现有的备份集。 如果为介质集定义了介质密码,则必须提供密码。 NOINIT 是默认值。

    有关详细信息,请参阅 Media 集、媒体系列和备份集 (SQL Server)。

  • INIT

    指定应覆盖所有备份集,但是保留介质标头。 如果 INIT 已指定,则覆盖该设备上的任何现有备份集(如果条件允许)。 默认情况下, BACKUP 检查以下条件,如果任一条件存在,则不会覆盖备份介质:

    • 任何备份集尚未过期。 有关详细信息,请参阅 EXPIREDATE 和 RETAINDAYS 选项。
    • 语句中 BACKUP 给定的备份集名称(如果提供)与备份介质上的名称不匹配。 有关详细信息,请参阅 NAME 本节前面的选项。

    若要替代这些检查,请使用 SKIP 选项。

    有关详细信息,请参阅 Media 集、媒体系列和备份集 (SQL Server)。

{ NOSKIP |SKIP }

控制备份操作是否在覆盖介质中的备份集之前检查它们的过期日期和时间。

注意

有关 { } 和 { NOINIT | INITNOSKIP | SKIP } 之间的交互的信息,请参阅本文后面的备注。

  • NOSKIP

    BACKUP指示语句在允许覆盖介质上所有备份集的到期日期之前检查这些备份集的到期日期。 此选项为默认行为。

  • 跳

    禁用检查备份集过期和通常由 BACKUP 语句执行的名称,以防止覆盖备份集。 有关 { } 和 { INIT | NOINITNOSKIP | SKIP } 之间的交互的信息,请参阅本文后面的备注。

    若要查看备份集的到期日期,请查询expiration_date备份集历史记录表的列。

{ NOFORMAT |FORMAT }

指定是否应该在用于此备份操作的卷上写入介质标头,以覆盖任何现有的介质标头和备份集。

  • NOFORMAT

    指定备份操作在用于此备份操作的介质卷上保留现的有介质标头和备份集。 此选项为默认行为。

  • 格式

    指定创建新的介质集。 FORMAT 将使备份操作在用于备份操作的所有介质卷上写入新的介质标头。 卷的现有内容将变为无效,因为覆盖了任何现有的介质标头和备份集。

    重要

    请谨慎使用 FORMAT。 格式化介质集的任何一个卷都将使整个介质集不可用。 例如,如果初始化现有条带介质集中的单个磁带,则整个介质集都将变得不可用。

    指定 FORMAT 表示SKIP不需要显式声明; SKIP

MEDIADESCRIPTION = { text | @text_variable }

指定介质集的自由格式文本说明,最多为 255 个字符。

MEDIANAME = { media_name | @media_name_variable }

指定整个备份介质集的介质名称。 介质名称的长度不能多于 128 个字符。 如果指定了 MEDIANAME,则该名称必须匹配备份卷上已存在的先前指定的介质名称。 如果未指定,或者 SKIP 指定了选项,则不会对媒体名称进行验证检查。

BLOCKSIZE = { blocksize | @blocksize_variable }

用字节数来指定物理块的大小。 支持的大小是 512、1024、2048、4096、8192、16384、32768 和 65536 (64 KB) 字节。 对于磁带设备默认为 65536,其他情况为 512。 通常,此选项是不必要的,因为 BACKUP 自动选择适合设备的块大小。 显式声明块大小将覆盖自动选择块大小。

如果要备份计划从 CD-ROM 复制和还原,请指定 BLOCKSIZE = 2048。

注意

通常,只有写入磁带设备时,此选项才会影响性能。

数据传输选项

缓冲区计数 = { 缓冲区计数 | @buffercount_variable }

指定用于备份操作的 I/O 缓冲区总数。 可以指定任何正整数;但是,较大的缓冲区数可能导致由于 Sqlservr.exe 进程中的虚拟地址空间不足而发生“内存不足”错误。

缓冲区使用的总空间是由以下公式确定:BUFFERCOUNT * MAXTRANSFERSIZE。

增加 BUFFERCOUNT 可以显著减少备份时间,成本更高的内存使用量。

注意

有关使用 BUFFERCOUNT 选项的重要信息,请参阅不正确的 BufferCount 数据传输选项可导致 OOM 情况博客。

MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }

指定SQL Server和备份介质之间要使用的最大传输单位(以字节为单位)。 可能的值为 65536 字节(64 KB),范围最大为 4,194,304 字节(4 MB)。 在备份到与 S3 兼容的对象存储的 URL 的特定情况下,MAXTRANSFERSIZE 为 10 MB。 有关详细信息,请参阅备注。

使用 SQL 编写器服务创建备份时,如果数据库配置了 FILESTREAM (SQL Server), 或包括 memory 优化文件组,则还原时MAXTRANSFERSIZE应大于或等于创建备份时使用的 MAXTRANSFERSIZE。

命令 SQL Server 2022 及更高版本
BACKUPTO URL - Azure 默认为 1 MB,最大为 20 MB
BACKUP TO URL - S3 默认为 10 MB,最大为 20 MB
BACKUP 转为磁盘 默认值为 1 MB、最大 4 MB
BACKUP 转录带/VDI 默认 64 KB,最大 4 MB

对于启用了单个数据文件的 透明数据加密(TDE) 数据库,默认值 MAXTRANSFERSIZE 为 65536 (64 KB)。 对于非 TDE 加密数据库,使用备份到MAXTRANSFERSIZE数据库时,默认值DISK为 1048576 (1 MB),使用 VDI TAPE时为 65536 (64 KB)。 有关对 TDE 加密数据库使用备份压缩的详细信息,请参阅备注部分。

错误管理选项

使用这些选项可以确定是否为备份操作启用了备份校验和,以及备份操作是否在遇到错误时停止。

{ NO_CHECKSUM |CHECKSUM }

控制是否启用备份校验和。

  • NO_CHECKSUM

    显式禁用备份校验和的生成(以及页校验和的验证)。 此选项为默认行为。

  • 校验和

    如果此选项已启用并且可用,则指定备份操作将验证每页的校验和及页残缺,并生成整个备份的校验和。

使用备份校验和可能会影响工作负荷和备份吞吐量。

有关详细信息,请参阅备份和还原期间可能的媒体错误(SQL Server)。

{ STOP_ON_ERROR |CONTINUE_AFTER_ERROR }

控制备份操作在遇到页校验和错误后是停止还是继续。

  • STOP_ON_ERROR

    如果页面校验和未验证,则 BACKUP 指示失败。 此选项为默认行为。

  • 在错误后继续

    BACKUP指示继续,尽管遇到无效校验和或撕裂页等错误。

如果在数据库损坏时无法使用选项备份日志NO_TRUNCATE尾部,可以通过指定而不是CONTINUE_AFTER_ERROR指定NO_TRUNCATE。

有关详细信息,请参阅备份和还原期间可能的媒体错误(SQL Server)。

兼容性选项

重新启动

无效。 版本接受此选项,以便与 SQL Server 2005 Analysis Services (SSAS) 兼容。

监视选项

STATS [ = 百分比 ]

每当另一个百分比完成时显示一条消息,并用于测量进度。 如果省略 centage,SQL Server在完成每 10% 后显示一条消息。

该 STATS 选项将报告完成百分比,以报告下一个间隔的阈值。 此百分比约为指定百分比;例如,如果 STATS = 10已完成的金额为 40%,则选项可能会显示 43%。 对于大型备份集,这不是问题,因为完成百分比在完成的 I/O 调用之间移动速度非常慢。

磁带选项

这些选项仅用于 TAPE 设备。 如果使用的是非磁带设备,则会忽略这些选项。

{ REWIND |NOREWIND }

  • 重绕

    指定SQL Server释放和倒退磁带。 REWIND 是默认值。

  • NOREWIND

    指定SQL Server备份操作后使磁带保持打开状态。 在对磁带执行多个备份操作时,可以使用此选项来帮助改进性能。

    NOREWIND NOUNLOAD表示,这些选项在单个BACKUP语句中不兼容。

    注意

    如果使用 NOREWIND,则SQL Server实例将保留磁带驱动器的所有权,直到在同一进程中运行的 BACKUP 或 RESTORE 语句使用 REWIND 或 UNLOAD 选项,或关闭服务器实例。 磁带保持打开将防止其他进程访问磁带。 有关如何显示打开的磁带列表和关闭打开的磁带的信息,请参阅 Backup 设备(SQL Server)。

{ UNLOAD |NOUNLOAD }

注意

UNLOAD 并且 NOUNLOAD 是会话生存期保留的会话设置,或者通过指定替代项重置会话。

  • 卸载

    指定在备份完成后自动重绕并卸载磁带。 UNLOAD 是会话开始时的默认值。

  • NOUNLOAD

    指定在 BACKUP 作后,磁带将保留在磁带驱动器上。

注意

备份到磁带备份设备时,BLOCKSIZE 选项会影响备份操作的性能。 通常,只有写入磁带设备时,此选项才会影响性能。

特定于日志的选项

这些选项仅与 BACKUP LOG 一起使用。

注意

如果不想进行日志备份,请使用简单的恢复模式。 有关详细信息,请参阅 Recovery models (SQL Server)。

{ NORECOVERY |STANDBY = undo_file_name }

  • NORECOVERY

    备份日志的尾部并使数据库处于 RESTORING 状态。 NORECOVERY 在故障转移到辅助数据库或在作之前 RESTORE 保存日志尾部时非常有用。

    若要执行最大程度的日志备份(跳过日志截断)并自动将数据库置于 RESTORING 状态,请同时使用 NO_TRUNCATE 和 NORECOVERY 选项。

  • 待命 = standby_file_name

    备份日志的尾部,使数据库处于只读状态 STANDBY 。 该 STANDBY 子句写入备用数据(执行回滚,但可以选择进一步还原)。 STANDBY使用此选项等效于BACKUP LOG WITH NORECOVERY后跟 a RESTORE WITH STANDBY.

    使用备用模式需要一个备用文件,该文件由 standby_file_name 指定,其位置存储于数据库的日志中。 如果指定的文件已存在,则数据库引擎将覆盖它;如果该文件不存在,则数据库引擎创建该文件。 备用文件将成为数据库的一部分。

    此文件保存回滚的更改,如果 RESTORE LOG 随后要应用作,则必须撤消这些更改。 必须有足够的磁盘空间供备用文件增长,以使备用文件能够包含数据库中由回滚的未提交事务修改的所有不重复的页。

NO_TRUNCATE

指定不应截断事务日志,并导致数据库引擎尝试备份,而不考虑数据库的状态。 因此,使用 NO_TRUNCATE 备份时可能具有不完整的元数据。 该选项允许在数据库损坏时备份事务日志。

选项NO_TRUNCATE等效于同时指定和 BACKUP LOGCOPY_ONLY。CONTINUE_AFTER_ERROR

NO_TRUNCATE如果没有此选项,数据库必须处于ONLINE状态。 如果数据库处于 SUSPENDED 状态,则可以通过指定 NO_TRUNCATE 来创建备份。 但是,如果数据库处于OFFLINE或状态,EMERGENCY则即使不允许使用 BACKUPNO_TRUNCATE 。 有关数据库状态的信息,请参阅 数据库状态。

关于使用SQL Server备份

本节简要说明了以下基本备份概念:

Backup TypesTransaction Log TruncationFormatting Backup Media> 使用备份设备和媒体集备份SQL Server备份

注意

有关 SQL Server 中备份的简介,请参阅 Backup 概述 (SQL Server)。

备份类型

支持的备份类型取决于数据库的恢复模式,如下所示:

  • 所有恢复模式都支持数据的完整备份和差异备份。

    备份范围 备份类型
    整个数据库 数据库备份涵盖整个数据库。

    或者,每个数据库备份都可以充当由一个或多个差异数据库备份构成的系列的基础。
    部分数据库 部分备份涵盖读/写文件组,也可能涵盖一个或多个只读文件或文件组。

    或者,每个部分备份都可以充当由一个或多个差异部分备份构成的系列的基础。
    文件或文件组 文件备份涵盖一个或多个文件或文件组,仅与包含多个文件组的数据库相关。 在简单恢复模式下,文件备份实质上仅限于只读辅助文件组。
    或者,每个文件备份都可以充当由一个或多个差异文件备份构成的系列的基础。
  • 在完整恢复模式或大容量日志恢复模式下,常规备份还包括顺序“事务日志备份”(或称“日志备份”),这是必需的备份。 每个日志备份均涵盖创建备份时处于活动状态的事务日志部分,并包括在上次日志备份中没有备份的所有日志记录。

    若要以增加管理开销为代价最大限度地降低工作丢失的风险,您应该安排对日志进行频繁的备份。 在完整备份之间安排差异备份可减少数据还原后需要还原的日志备份数,从而缩短还原时间。

    建议您将日志备份和数据库备份分别放在不同的卷上。

    注意

    必须创建完整备份,才能创建第一个日志备份。

  • “仅复制备份”是特殊用途的完整备份或日志备份,它独立于正常的常规备份顺序。 若要创建仅复制备份,请在 COPY_ONLY 语句中 BACKUP 指定选项。 有关详细信息,请参阅仅复制备份。

事务日志截断

若要避免填满数据库的事务日志,例行备份至关重要。 在简单恢复模式下,备份了数据库后会自动截断日志,而在完整恢复模式下,只有备份了事务日志后方才截断日志。 但是,截断过程有时也可能发生延迟。 有关可能会延迟日志截断的因素的信息,请参阅 事务日志。

注意

已停用 BACKUP LOG WITH NO_LOG 和 WITH TRUNCATE_ONLY 选项。 如果使用的是完整恢复模式或大容量日志恢复模式,并且必须从数据库中删除日志备份链,请切换到简单的恢复模式。 有关详细信息,请参阅 View 或更改数据库(SQL Server)。

设置备份介质的格式

如果存在以下任一 BACKUP 情况,则备份介质的格式由语句格式化:

  • 未指定 FORMAT 选项。
  • 介质为空。
  • 操作正在写入延续磁带。

使用备份设备和媒体集

条带媒体集(条带集)中的备份设备

“条带集”是一组磁盘文件,其中的数据划分为若干块并按固定顺序分发。 条带集中使用的备份设备数目必须保持不变(除非以 FORMAT 命令重新初始化介质)。

以下示例将 AdventureWorks2025 数据库的备份写入使用三个磁盘文件的新条带媒体集。

BACKUP DATABASE AdventureWorks2022
TO DISK = 'X:\SQLServerBackups\AdventureWorks1.bak',
DISK = 'Y:\SQLServerBackups\AdventureWorks2.bak',
DISK = 'Z:\SQLServerBackups\AdventureWorks3.bak'
WITH FORMAT,
    MEDIANAME = 'AdventureWorksStripedSet0',
    MEDIADESCRIPTION = 'Striped media set for AdventureWorks2022 database';
GO

将备份设备定义为条带集的一部分后,除非指定 FORMAT,否则它不能用于单设备备份。 同样,包含非带状备份的备份设备不能在条带集中使用,除非指定 FORMAT。 若要拆分条带备份集,请使用 FORMAT。

如果写入媒体标头时或MEDIANAME未指定这两者MEDIADESCRIPTION,则对应于空白项的媒体标头字段为空。

使用镜像媒体集

通常,备份是无序的,语句 BACKUP 只是包括一个 TO 子句。 但是,每个介质集可能总共包含四个镜像。 对于镜像介质集,备份操作写入到多组备份设备。 每组备份设备均包含镜像介质集中的一个镜像。 每个镜像都必须使用相同数量和类型的物理备份设备,而且这些设备必须都具有相同的属性。

若要备份到镜像介质集,则所有的镜像服务器必须存在。 若要备份到镜像媒体集,请指定 TO 子句来指定第一个镜像,并为其他每个镜像指定 MIRROR TO 子句。

对于镜像媒体集,每个 MIRROR TO 子句必须列出与子句相同的设备数量和类型 TO 。 下面的示例写入到包含两个镜像并在每个镜像中使用三个设备的镜像介质集:

BACKUP DATABASE AdventureWorks2022
TO DISK = 'X:\SQLServerBackups\AdventureWorks1a.bak',
DISK = 'Y:\SQLServerBackups\AdventureWorks2a.bak',
DISK = 'Z:\SQLServerBackups\AdventureWorks3a.bak'
MIRROR TO DISK = 'X:\SQLServerBackups\AdventureWorks1b.bak',
DISK = 'Y:\SQLServerBackups\AdventureWorks2b.bak',
DISK = 'Z:\SQLServerBackups\AdventureWorks3b.bak';
GO

重要

此示例旨在允许您在本地系统上对其进行测试。 实际上,备份到同一驱动器中的多个设备会降低性能并不存在冗余,而镜像介质集正是为冗余而设计的。

镜像媒体集中的媒体簇

语句子句TO中指定的BACKUP每个备份设备对应于媒体系列。 例如,如果 TO 子句列出三个设备,将数据 BACKUP 写入三个媒体系列。 在镜像介质集中,每个镜像都必须包含各个介质簇的副本。 这正是各个镜像中的设备数量必须相同的原因。

当对每个镜像列出多个设备时,这些设备的顺序将决定将哪个介质簇写入特定的设备。 例如,在每个设备列表中,第二个设备都对应于第二个介质簇。 对于上一示例中的设备,下表显示了设备和媒体系列之间的对应关系。

镜像 媒体簇 1 媒体簇 2 介质簇 3
0 Z:\AdventureWorks1a.bak Z:\AdventureWorks2a.bak Z:\AdventureWorks3a.bak
1 Z:\AdventureWorks1b.bak Z:\AdventureWorks2b.bak Z:\AdventureWorks3b.bak

介质簇必须总是备份到特定镜像中的同一个设备。 因此,每次使用现有介质集时,请按照创建介质集时指定的相同顺序列出各个镜像的设备。

有关镜像介质集的详细信息,请参阅 Mirrored 备份介质集(SQL Server)。 有关媒体集和媒体系列的详细信息,请参阅媒体集、媒体系列和备份集(SQL Server)。

还原SQL Server备份

要恢复数据库并可选地恢复以使其上线,或恢复文件或文件组,可以使用 Transact-SQL RESTORE 语句或SQL Server Management Studio恢复任务。 有关详细信息,请参阅 Restore and recovery overview (SQL Server)。

关于 BACKUP 选项的额外考虑

SKIP、NOSKIP、INIT 和 NOINIT 之间的交互

下表描述了 { NOINIT | INIT } 和 { NOSKIP | SKIP } 选项之间的交互。

注意

如果磁带介质为空或磁盘备份文件不存在,则所有这些交互都会写入媒体标头并继续。 如果媒体不为空且缺少有效的媒体标头,则这些作会提供反馈,指出这不是有效的 MTF 介质,并且会终止备份作。

Skip 选项 NOINIT INIT
NOSKIP 如果卷中包含有效的介质标头,则验证介质名称是否匹配给定的 MEDIANAME(如果有)。 如果匹配,则追加备份集,同时保留所有现有的备份集。
如果卷不包含有效的媒体标头,则会发生错误。
如果卷中包含有效的介质标头,将执行以下检查:
  • 如果 MEDIANAME 已指定,请验证给定媒体名称是否与媒体标头的媒体名称匹配。 1
  • 确保介质上没有未过期的备份集。 如果有,则终止备份。

如果这些检查都通过了,则覆盖该介质上的所有备份集,只保留介质标头。
如果卷不包含有效的媒体标头,则生成一个使用指定的 MEDIANAME 媒体标头,如果有 MEDIADESCRIPTION的话。
SKIP 如果卷中包含有效的介质标头,则追加备份集,并保留所有现有备份集。 如果卷包含有效的 2 个媒体标头,则覆盖介质上的任何备份集,仅保留媒体标头。
如果介质为空,则使用指定的 MEDIANAME 和 MEDIADESCRIPTION(如果有)生成一个介质标头。

1 用户必须属于相应的固定数据库或服务器角色才能执行备份操作。

2 有效性包括 MTF 版本号和其他标头信息。 如果不支持指定的版本或指定的版本不是期望值,将会发生错误。

兼容性

注意

在早期版本的 SQL Server 中无法还原由较新版本的 SQL Server创建的备份。

BACKUP支持 RESTART 选项,以提供与早期版本的SQL Server的向后兼容性。 但是 RESTART 没有效果。

注解

可以将数据库或日志备份追加到任何磁盘或磁带设备上,从而将数据库及其事务日志保存在一个物理位置中。

显式或隐式事务中不允许该 BACKUP 语句。

无法备份处于以下状态的数据库:

  • 正在还原
  • 备用
  • 只读

只要操作系统支持数据库的排序规则,就可以在不同的平台之间执行备份操作,即使这些平台使用不同的处理器类型。

从 2016 SQL Server(13.x)开始,设置 larger 而不是 65536 (64 KB)为 Transparent 数据加密(TDE)加密的数据库,这些数据库首先解密页面,对其进行压缩, 然后再次对其进行加密。 如果未指定 MAXTRANSFERSIZE,或者使用了 MAXTRANSFERSIZE = 65536(64 KB),那么对使用 TDE 加密的数据库进行备份压缩时会直接压缩加密页,并且可能不会产生良好的压缩率。 有关详细信息,请参阅支持 TDE 的数据库的备份压缩。

从 SQL Server 2019 (15.x) CU5 开始,不再需要设置 MAXTRANSFERSIZE才能使用 TDE 启用此优化的压缩算法。 如果指定 WITH COMPRESSION 了备份命令或 备份压缩默认 服务器配置设置为 1, MAXTRANSFERSIZE 则会自动增加到 128 K 以启用优化的算法。 如果在 MAXTRANSFERSIZE 备份命令上指定了值为 > 64 K 的备份命令,则遵循提供的值。 换句话说,SQL Server永远不会自动减小该值,只会增加该值。 如果需要使用 MAXTRANSFERSIZE = 65536 备份 TDE 加密的数据库,则必须指定 WITH NO_COMPRESSION,或者确保将备份压缩默认服务器配置设置为 0。

注意

某些情况下,默认的 MAXTRANSFERSIZE 大于 64K:

  • 数据库创建了多个数据文件时,它使用 MAXTRANSFERSIZE> 64K。
  • 执行 URL 到Azure Blob 存储备份时,默认MAXTRANSFERSIZE = 1048576 (1 MB)。
  • 执行到与 S3 兼容的对象存储的 URL 备份时,默认值 MAXTRANSFERSIZE = 10485760 为 10 MB。

即使这些条件之一适用,也必须在备份命令中显式设置大于 64K 的 MAXTRANSFERSIZE才能获取优化的备份压缩算法,除非你使用的是 SQL Server 2019 (15.x) CU5 或更高版本。

默认情况下,每个成功的备份操作都会在SQL Server错误日志和系统事件日志中添加一个条目。 如果非常频繁地备份日志,这些成功消息会迅速累积,从而产生一个很大的错误日志,这样会使查找其他消息变得非常困难。 在这些情况下,如果任何自动化或监视均不依赖于这些日志条目,则可以使用跟踪标志 3226 取消这些条目。 有关详细信息,请参阅 使用 DBCC TRACEON 设置跟踪标志。

互操作性

SQL Server使用联机备份过程来允许数据库备份,而数据库仍在使用中。 在备份期间,大多数作都是可能的;例如,INSERT备份作期间允许使用UPDATE或DELETE语句。

在数据库或事务日志备份期间无法运行的作包括:

  • 文件管理操作,例如带有 ALTER DATABASE 或 ADD FILE 选项的 REMOVE FILE 语句。

  • 收缩数据库或文件操作。 这包括自动收缩操作。

如果备份操作与文件管理或 DBCC SHRINK 操作重叠,则会出现冲突。 无论哪个冲突作首先开始,第二个作都会等待第一个作设置的锁超时(超时期限由会话超时设置控制)。 如果在超时期间释放锁,则第二个作将继续。 如果锁超时,则第二个操作失败。

元数据

SQL Server包括跟踪备份活动的以下备份历史记录表:

执行还原时,如果备份集尚未记录在 msdb 数据库中,则可能会修改备份历史记录表。

安全性

从 SQL Server 2012 (11.x)开始,PASSWORD 和 MEDIAPASSWORD 选项已停止用于创建备份。 仍然可以还原使用密码创建的备份。

权限

默认情况下,为 sysadmin 固定服务器角色以及 db_owner 和 db_backupoperator 固定数据库角色的成员授予 BACKUP DATABASE 和 BACKUP LOG 权限 。

备份设备的物理文件的所有权和权限问题可能会妨碍备份操作。 确保SQL Server启动帐户需要对备份设备和写入备份文件的文件夹具有读取和写入权限。 但是, sp_addumpdevice(在系统表中为备份设备添加条目)不会检查文件访问权限。 有关备份设备物理文件的这些问题可能直到为尝试备份或还原而访问物理资源时才会出现。

示例

本部分包含以下示例:

注意

备份作指南文章包含其他示例。 有关详细信息,请参阅 Backup 概述(SQL Server)。

答: 备份完整数据库

以下示例将 AdventureWorks2025 数据库备份到磁盘文件。

BACKUP DATABASE AdventureWorks2022
TO DISK = 'Z:\SQLServerBackups\AdvWorksData.bak'
WITH FORMAT;
GO

B. 备份数据库和日志

下面的示例备份 AdventureWorks2025 示例数据库,默认情况下,该数据库使用简单恢复模式。 若要支持日志备份,请将 AdventureWorks2025 数据库改为使用完整恢复模式。

接下来,该示例使用 sp_addumpdevice 创建一个逻辑备份设备以备份数据 (AdvWorksData),并创建另一个逻辑备份设备以备份日志 (AdvWorksLog)。

然后,该示例对 AdvWorksData 创建完整数据库备份,并在一段更新活动过后将日志备份到 AdvWorksLog。

-- To permit log backups, before the full database backup, modify the database
-- to use the full recovery model.
USE master;
GO

ALTER DATABASE AdventureWorks2022 SET RECOVERY FULL;
GO

-- Create AdvWorksData and AdvWorksLog logical backup devices.
USE master;
GO

EXECUTE sp_addumpdevice 'disk', 'AdvWorksData', 'Z:\SQLServerBackups\AdvWorksData.bak';
GO

EXECUTE sp_addumpdevice 'disk', 'AdvWorksLog', 'X:\SQLServerBackups\AdvWorksLog.bak';
GO

-- Back up the full AdventureWorks2022 database.
BACKUP DATABASE AdventureWorks2022 TO AdvWorksData;
GO

-- Back up the AdventureWorks2022 log.
BACKUP LOG AdventureWorks2022 TO AdvWorksLog;
GO

注意

对于生产数据库,需要定期备份日志。 应当经常进行日志备份,以提供足够的保护来防止数据丢失。

°C 创建辅助文件组的完整文件备份

下面的示例将对两个辅助文件组中的各个文件创建完整文件备份。

--Back up the files in SalesGroup1:
BACKUP DATABASE Sales
    FILEGROUP = 'SalesGroup1', FILEGROUP = 'SalesGroup2'
    TO DISK = 'Z:\SQLServerBackups\SalesFiles.bck';
GO

D. 创建辅助文件组的差异文件备份

下面的示例将对两个辅助文件组中的各个文件创建差异文件备份。

--Back up the files in SalesGroup1:
BACKUP DATABASE Sales
FILEGROUP = 'SalesGroup1', FILEGROUP = 'SalesGroup2'
TO DISK = 'Z:\SQLServerBackups\SalesFiles.bck'
WITH DIFFERENTIAL;
GO

E. 创建并备份到单系列镜像媒体集

以下示例将创建包含一个媒体簇和四个镜像的镜像媒体集,并将 AdventureWorks2025 数据库备份到其中。

BACKUP DATABASE AdventureWorks2022
TO TAPE = '\\.\tape0'
MIRROR TO TAPE = '\\.\tape1'
MIRROR TO TAPE = '\\.\tape2'
MIRROR TO TAPE = '\\.\tape3'
WITH FORMAT, MEDIANAME = 'AdventureWorksSet0';

F. 创建并备份到多家庭镜像媒体集

下面的示例将创建镜像介质集,其中每个镜像包含两个介质簇。 然后将 AdventureWorks2025 数据库备份到这两个镜像中。

BACKUP DATABASE AdventureWorks2022
TO TAPE = '\\.\tape0', TAPE = '\\.\tape1'
MIRROR TO TAPE = '\\.\tape2', TAPE = '\\.\tape3'
WITH FORMAT, MEDIANAME = 'AdventureWorksSet1';

G. 备份到现有镜像媒体集

下面的示例将备份集追加到在前面的示例中创建的介质集上。

BACKUP LOG AdventureWorks2022
TO TAPE = '\\.\tape0', TAPE = '\\.\tape1'
MIRROR TO TAPE = '\\.\tape2', TAPE = '\\.\tape3'
WITH NOINIT, MEDIANAME = 'AdventureWorksSet1';

注意

NOINIT这是默认值,为了清楚起见,此处显示。

H. 在新媒体集中创建压缩备份

以下示例格式化媒体,并创建新的媒体集,然后对 AdventureWorks2025 数据库执行压缩的完整备份。

BACKUP DATABASE AdventureWorks2022
    TO DISK = 'Z:\SQLServerBackups\AdvWorksData.bak'
    WITH FORMAT, COMPRESSION;

一。 备份到Microsoft Azure Blob 存储

此示例对Azure Blob 存储执行 Sales的完整数据库备份。 存储帐户名称为 mystorageaccount。 容器名称为 myfirstcontainer。 已使用读取、写入、删除和列表权限创建存储访问策略。 SQL Server凭据https://mystorageaccount.blob.core.windows.net/myfirstcontainer是使用与存储访问策略关联的共享访问签名创建的。 有关SQL Server备份到 Azure Blob 存储 的信息,请参阅SQL Server备份和还原,以及使用 Azure Blob 存储 和 SQL Server备份到 URL 以获取Azure Blob 存储。

BACKUP DATABASE Sales
TO URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales.bak'
WITH STATS = 5;

还可以将数据库备份到多个条带,如下所示:

BACKUP DATABASE Sales
TO URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales-01.bak',
URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales-02.bak',
URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales-03.bak',
URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales-04.bak'
WITH COPY_ONLY;

J. 备份到与 S3 兼容的对象存储

Applies to: SQL Server 2022 (16.x) 及更高版本。

本示例将 Sales 数据库的完整备份数据库执行到 S3 兼容的对象存储平台。 语句中不需要凭据的名称或匹配确切的 URL 路径,而是对提供的 URL 执行适当的凭据查找。 有关详细信息,请参阅 使用 S3 兼容的对象存储备份和还原SQL Server。

BACKUP DATABASE Sales
TO URL = 's3://10.10.10.10:8787/sqls3backups/sales_01.bak',
URL = 's3://10.10.10.10:8787/sqls3backups/sales_02.bak',
URL = 's3://10.10.10.10:8787/sqls3backups/sales_03.bak'
WITH FORMAT, STATS = 10, COMPRESSION;

K. 跟踪备份语句的进度

以下查询返回有关当前正在运行的备份语句的信息:

SELECT a.text AS query,
       start_time,
       percent_complete,
       dateadd(second, estimated_completion_time / 1000, getdate()) AS eta
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS a
WHERE r.command LIKE 'BACKUP%';

* SQL 托管实例 *  

 

Azure SQL 托管实例

在 Azure SQL 托管实例 中备份 SQL 数据库。 Azure SQL 托管实例具有自动备份。 可以创建完整的数据库 COPY_ONLY 备份。 不支持差异备份、日志备份和文件快照备份。

也适用于由 Azure Arc 启用的 SQL 托管实例。

语法

BACKUP DATABASE { database_name | @database_name_var }
  TO URL = { 'physical_device_name' | @physical_device_name_var } [ , ...n ]
  WITH COPY_ONLY [ , { <general_WITH_options> } ]
[ ; ]

<general_WITH_options> [ , ...n ] ::=

--Media set options
   MEDIADESCRIPTION = { 'text' | @text_variable }
 | MEDIANAME = { media_name | @media_name_variable }
 | BLOCKSIZE = { blocksize | @blocksize_variable }

--Data Transfer Options
   BUFFERCOUNT = { buffercount | @buffercount_variable }
 | MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }

--Error Management Options
   { NO_CHECKSUM | CHECKSUM }
 | { STOP_ON_ERROR | CONTINUE_AFTER_ERROR }

--Compatibility Options
   RESTART

--Monitoring Options
   STATS [ = percentage ]

--Encryption Options
 ENCRYPTION (ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY } , encryptor_options ) <encryptor_options> ::=
   SERVER CERTIFICATE = Encryptor_Name | SERVER ASYMMETRIC KEY = Encryptor_Name

参数

DATABASE

指定一个完整数据库备份。 在数据库备份期间,Azure SQL 托管实例备份足够的事务日志,以在还原备份时生成一致的数据库。

重要

在托管实例上创建的数据库备份只能在另一个Azure SQL 托管实例或仅还原到 SQL Server 2022 实例。 这是因为与SQL Server的其他版本相比,SQL 托管实例具有更高的内部数据库版本。 有关详细信息,请查看 将SQL 托管实例数据库备份存储到 SQL Server 2022。

还原由 BACKUP DATABASE ( 数据备份)创建的备份时,将还原整个备份。 若要从SQL 托管实例自动备份还原,请参阅将数据库存储到 Azure SQL 托管实例。

{ database_name | @database_name_var }

从中备份完整数据库的数据库。 如果作为变量(@database_name_var)提供,可以将此名称指定为字符串常量(@database_name_var = 数据库名称),也可以指定为字符串数据类型的变量(除 ntext 或 文本 数据类型除外)。

有关详细信息,请参阅完整文件备份和备份文件和文件组。

TO URL

指定要用于备份操作的 URL。 URL 格式用于创建到Microsoft Azure存储服务的备份。

重要

若要在备份到 URL 时备份到多个设备,必须使用共享访问签名 (SAS) 令牌。 有关创建共享访问签名的示例,请参阅SQL Server备份到 URL 和 使用 PowerShell Azure 存储上的共享访问签名 (SAS) 令牌创建 SQL 凭据。

  • n

    一个占位符,指示最多可以在逗号分隔列表中指定最多 64 个备份设备。

WITH 选项

指定要用于备份操作的选项。

加密

用于指定将备份加密。 可指定加密备份所用的加密算法,或指定 NO_ENCRYPTION 以不加密备份。 建议进行加密以帮助保护备份文件的安全。 可指定的算法的列表如下:

  • AES_128
  • AES_192
  • AES_256
  • TRIPLE_DES_3KEY
  • NO_ENCRYPTION

如果选择加密,则还必须使用加密程序选项指定加密程序:

  • SERVER CERTIFICATE = <Encryptor_Name>
  • SERVER ASYMMETRIC KEY = <Encryptor_Name>

备份集选项

仅复制

指定备份是 仅复制备份,不会影响备份的正常顺序。 仅复制备份独立于Azure SQL 数据库自动备份创建。 有关详细信息,请参阅仅复制备份。

{ COMPRESSION |NO_COMPRESSION }

指定是否为此备份执行备份压缩,该设置将替代服务器级默认设置。

默认行为是不进行备份压缩。 但此默认设置可通过设置 backup compression default 服务器配置选项进行更改。 有关查看此选项的当前值的信息,请参阅查看或更改服务器属性面板。

  • 压缩

    显式启用备份压缩。

  • NO_COMPRESSION

    显式禁用备份压缩。

描述 = { '文本' | @text_variable }

指定说明备份集的自由格式文本。 该字符串最长可达 255 个字符。

NAME = { backup_set_name | @_backup| set_var }

指定备份集的名称。 名称最长可达 128 个字符。 NAME如果未指定,则为空。

MEDIADESCRIPTION = { text | @text_variable }

指定介质集的自由格式文本说明,最多为 255 个字符。

MEDIANAME = { media_name | @media_name_variable }

指定整个备份介质集的介质名称。 介质名称的长度不能多于 128 个字符,如果指定了 MEDIANAME,则该名称必须匹配备份卷上已存在的先前指定的介质名称。 如果未指定,或者 SKIP 指定了选项,则不会对媒体名称进行验证检查。

BLOCKSIZE = { blocksize | @blocksize_variable }

用字节数来指定物理块的大小。 支持的大小是 512、1024、2048、4096、8192、16384、32768 和 65536 (64 KB) 字节。 对于磁带设备默认为 65536,其他情况为 512。 通常,此选项是不必要的,因为 BACKUP 自动选择适合设备的块大小。 显式声明块大小将覆盖自动选择块大小。

数据传输选项

缓冲区计数 = { 缓冲区计数 | @buffercount_variable }

指定用于备份操作的 I/O 缓冲区总数。 可以指定任何正整数;但是,较大的缓冲区数可能导致由于 Sqlservr.exe 进程中的虚拟地址空间不足而发生“内存不足”错误。

缓冲区使用的总空间是由以下公式确定:BUFFERCOUNT * MAXTRANSFERSIZE。

注意

有关使用 BUFFERCOUNT 此选项的重要信息,请参阅博客文章 “错误的 BufferCount 数据传输”选项可能会导致 OOM 条件。

MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }

指定SQL Server和备份介质之间要使用的最大传输单位(以字节为单位)。 可能的值为 65536 字节(64 KB),范围最大为 4,194,304 字节(4 MB)。

命令 Azure SQL 托管实例

SQL Server 2022 或 SQL Server 2025 更新策略
Azure SQL 托管实例

Always-up-to-date 策略
BACKUPTO URL - Azure 由服务选择的动态自动备份。

对于COPY_ONLY备份:默认值 1 MB、最大 100 MB
由服务选择的动态自动备份。

对于COPY_ONLY备份:默认值 1 MB、最大 100 MB

对于使用单个数据文件启用 透明数据加密(TDE)的数据库 ,默认值 MAXTRANSFERSIZE 为 65536 (64 KB)。 对于非 TDE 加密的数据库,使用备份时MAXTRANSFERSIZE,默认值DISK为1048576(1 MB),使用 VDI TAPE时为 65536 (64 KB)。

注意

MAXTRANSFERSIZE 指定最大的传输单位,并且不保证每个写入作传输指定的最大大小。 MAXTRANSFERSIZE 用于条带化事务日志备份的写入作设置为 64 KB。

错误管理选项

使用这些选项可以确定是否为备份操作启用了备份校验和,以及备份操作是否在遇到错误时停止。

{ NO_CHECKSUM |CHECKSUM }

控制是否启用备份校验和。

  • NO_CHECKSUM

    显式禁用备份校验和的生成(以及页校验和的验证)。 此选项为默认行为。

  • 校验和

    如果此选项已启用并且可用,则指定备份操作将验证每页的校验和及页残缺,并生成整个备份的校验和。

使用备份校验和可能会影响工作负荷和备份吞吐量。

有关详细信息,请参阅在备份和还原期间可能的媒体错误。

{ STOP_ON_ERROR |CONTINUE_AFTER_ERROR }

控制备份操作在遇到页校验和错误后是停止还是继续。

  • STOP_ON_ERROR

    如果页面校验和未验证,则 BACKUP 指示失败。 此选项为默认行为。

  • 在错误后继续

    BACKUP指示继续,尽管遇到无效校验和或撕裂页等错误。

如果在数据库损坏时无法使用选项备份日志NO_TRUNCATE尾部,可以通过指定而不是CONTINUE_AFTER_ERROR指定NO_TRUNCATE。

有关详细信息,请参阅在备份和还原期间可能的媒体错误。

兼容性选项

重新启动

无效。 此选项由版本接受,以便与以前版本的 SQL Server 兼容。

监视选项

STATS [ = 百分比 ]

每当另一个百分比完成时显示一条消息,并用于测量进度。 如果省略 centage,SQL Server在完成每 10% 后显示一条消息。

该 STATS 选项将报告完成百分比,以报告下一个间隔的阈值。 此百分比约为指定百分比;例如,如果 STATS = 10已完成的金额为 40%,则选项可能会显示 43%。 对于大型备份集,这不是问题,因为完成百分比在完成的 I/O 调用之间移动速度非常慢。

SQL 托管实例限制

最大备份带状线大小为 195 GB(最大 blob 大小)。 增加备份命令中的带状线数量以缩小单个带状线大小,将其保持在限制范围内。

安全性

权限

默认情况下,为 sysadmin 固定服务器角色以及 db_owner 和 db_backupoperator 固定数据库角色的成员授予 BACKUP DATABASE 权限 。

URL 的所有权和权限问题可能会妨碍备份操作。 SQL Server必须能够读取和写入设备;运行SQL Server服务的帐户必须具有写入权限。

示例

该示例执行 COPY_ONLY 的 Sales 备份以Microsoft Azure Blob 存储。 存储帐户名称为 mystorageaccount。 容器名称为 myfirstcontainer。 已经创建具有读取、写入、删除和列表权限的存储访问策略。 SQL Server凭据https://mystorageaccount.blob.core.windows.net/myfirstcontainer是使用与存储访问策略关联的共享访问签名创建的。 有关SQL Server备份到 Azure Blob 存储 的信息,请参阅 SQL Server备份和还原,以及使用 Microsoft Azure Blob 存储 和 SQL Server 备份到 URL。

BACKUP DATABASE Sales
TO URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales_20160726.bak'
WITH STATS = 5, COPY_ONLY;

还可以将数据库备份到多个条带,如下所示:

BACKUP DATABASE Sales
TO URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales-01.bak',
URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales-02.bak',
URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales-03.bak',
URL = 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales-04.bak'
WITH COPY_ONLY;