BACKUP (Transact-SQL)

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

注意注意

从 SQL Server 2012 SP1 累积更新 2 开始,支持 SQL Server 备份到 Windows Azure Blob 存储服务。 有关详细信息,请参阅备份和还原增强功能使用 Windows Azure Blob 存储服务进行 SQL Server 备份和还原

主题链接图标 Transact-SQL 语法约定

语法

Backing 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 ] } ]
[;]

Backing 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 ] } ]
[;]

Creating 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 ] } ]
[;]

Backing 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_optionspec> } [ ,...n ] ]
[;]

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

<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 | NO_COMPRESSION } 
 | DESCRIPTION = { 'text' | @text_variable } 
 | NAME = { backup_set_name | @backup_set_name_var } 
 | { EXPIREDATE = { 'date' | @date_var } 
        | RETAINDAYS = { days | @days_var } } 

--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 } 

--Log-specific Options
   { NORECOVERY | STANDBY = undo_file_name }
 | NO_TRUNCATE

参数

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

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

    注意注意

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

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

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

    注意注意

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

  • { database_name| **@database_name_var }
    备份事务日志、部分数据库或完整的数据库时所用的源数据库。 如果作为变量 (
    @database_name_var) 提供,则可以将此名称指定为字符串常量 (@**database_name_var = database name) 或指定为字符串数据类型(ntext 或 text 数据类型除外)的变量。

    注意注意

    不能备份数据库镜像伙伴关系中的镜像数据库。

  • <file_or_filegroup> [ ,...n ]
    只能与 BACKUP DATABASE 一起使用,用于指定某个数据库文件或文件组包含在文件备份中,或指定某个只读文件或文件组包含在部分备份中。

    • FILE = { logical_file_name| **@**logical_file_name_var }
      文件或变量的逻辑名称,其值等于要包含在备份中的文件的逻辑名称。

    • FILEGROUP = { logical_filegroup_name| **@**logical_filegroup_name_var }
      文件组或变量的逻辑名称,其值等于要包含在备份中的文件组的逻辑名称。 在简单恢复模式下,只允许对只读文件组执行文件组备份。

      注意注意

      如果数据库的大小和性能要求使得进行数据库备份不切实际,则应考虑使用文件备份。

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

    有关详细信息,请参阅完整文件备份 (SQL Server)备份文件和文件组 (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
      一个占位符,表示可以在逗号分隔的列表中指定多个只读文件组。

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

  • TO <backup_device> [ ,...n]
    指示附带的备份设备集是一个未镜像的介质集,或者是镜像介质集中的第一批镜像(为其声明了一个或多个 MIRROR TO 子句)。

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

      • { logical_device_name | **@**logical_device_name_var }
        要将数据库备份到的备份设备的逻辑名称。 逻辑名称必须遵守标识符规则。 如果作为变量 (@logical_device_name_var) 提供,则可以将该备份设备名称指定为字符串常量 (@logical_device_name_var = logical backup device name) 或任何字符串数据类型(ntext 或 text 数据类型除外)的变量。

      • { DISK | TAPE } = { 'physical_device_name' | **@**physical_device_name_var }
        指定磁盘文件或磁带设备。

        如果某一磁盘设备不存在,也可以在 BACKUP 语句中指定它。 如果存在物理设备且 BACKUP 语句中未指定 INIT 选项,则备份将追加到该设备。

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

        注意注意

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

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

  • MIRROR TO <backup_device> [ ,...n]
    指定一组辅助备份设备(最多三个),其中每个设备都将镜像 TO 子句中指定的备份设备。 必须对 MIRROR TO 子句和 TO 子句指定相同类型和数量的备份设备。 最多可以使用三个 MIRROR TO 子句。

    只有 SQL Server 2005 Enterprise Edition 及更高版本中提供此选项。

    注意注意

    对于 MIRROR TO = DISK,BACKUP 自动决定磁盘设备合适的块大小。 有关块大小的详细信息,请参阅此表后面的 "BLOCKSIZE"。

    • <backup_device>
      请参阅本部分前面的 "<backup_device>"。

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

    有关详细信息,请参阅本主题后面“备注”部分中的“镜像介质集中的介质簇”。

  • [ next-mirror-to ]
    一个占位符,表示一个 BACKUP 语句除了包含一个 TO 子句外,最多还可包含三个 MIRROR TO 子句。

WITH 选项

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

  • DIFFERENTIAL
    只能与 BACKUP DATABASE 一起使用,指定数据库备份或文件备份应该只包含上次完整备份后更改的数据库或文件部分。 差异备份一般会比完整备份占用更少的空间。 对于上一次完整备份后执行的所有单个日志备份,使用该选项可以不必再进行备份。

    注意注意

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

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

备份集选项

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

注意注意

若要为还原操作指定备份集,请使用 FILE = <backup_set_file_number> 选项。 有关如何指定备份集的详细信息,请参阅 RESTORE 参数 (Transact-SQL) 中的“指定备份集”。

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

    仅复制备份是在 SQL Server 2005 中引入的,用于执行特殊目的的备份,例如在进行联机文件还原前备份日志。 通常,仅复制日志备份仅使用一次即被删除。

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

      重要说明重要提示

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

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

    有关详细信息,请参阅仅复制备份 (SQL Server)

  • { COMPRESSION | NO_COMPRESSION }
    仅适用于 SQL Server 2008 Enterprise 和更高版本;指定是否对此备份执行备份压缩;覆盖服务器级默认设置。

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

    • COMPRESSION
      显式启用备份压缩。

    • NO_COMPRESSION
      显式禁用备份压缩。

  • DESCRIPTION = { 'text' | **@**text_variable }
    指定说明备份集的自由格式文本。 该字符串最长可达 255 个字符。

  • NAME = { backup_set_name| **@**backup_set_var }
    指定备份集的名称。 名称最长可达 128 个字符。 如果未指定 NAME,它将为空。

  • { EXPIREDATE = 'date'| RETAINDAYS = days }
    指定允许覆盖该备份的备份集的日期。 如果同时使用这两个选项,RETAINDAYS 的优先级别将高于 EXPIREDATE。

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

    重要说明重要提示

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

    • EXPIREDATE = { 'date'| **@**date_var }
      指定备份集到期和允许被覆盖的日期。 如果作为变量 (@date_var) 提供,则该日期必须采用已配置系统 datetime 的格式,并指定为下列类型之一:

      • 字符串常量 (@date_var = date)

      • 字符串数据类型(ntext 或 text 数据类型除外)的变量

      • 一个 smalldatetime 类型的值

      • datetime 变量

      例如:

      • 'Dec 31, 2020 11:59 PM'

      • '1/1/2021'

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

      注意注意

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

    • RETAINDAYS = { days| **@days_var }
      指定必须经过多少天才可以覆盖该备份介质集。 如果作为变量 (
      @**days_var) 提供,则必须指定为整数。

介质集选项

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

  • { NOINIT | INIT }
    控制备份操作是追加到还是覆盖备份介质中的现有备份集。 默认为追加到介质中最新的备份集 (NOINIT)。

    注意注意

    有关 { NOINIT | INIT } 和 { NOSKIP | SKIP } 之间交互的信息,请参阅本主题后面的“备注”。

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

      有关详细信息,请参阅介质集、介质簇和备份集 (SQL Server)

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

      • 所有备份集都未过期。 有关详细信息,请参阅 EXPIREDATE 和 RETAINDAYS 选项。

      • 如果 BACKUP 语句给出了备份集名,则该备份集名与备份介质上的名称不匹配。 有关详细信息,请参阅本部分前面介绍的 NAME 选项。

      若要越过这些检查,请使用 SKIP 选项。

      有关详细信息,请参阅介质集、介质簇和备份集 (SQL Server)

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

    注意注意

    有关 { NOINIT | INIT } 和 { NOSKIP | SKIP } 之间交互的信息,请参阅本主题后面的“备注”。

    • NOSKIP
      指示 BACKUP 语句在可以覆盖介质上的所有备份集之前先检查它们的过期日期。 这是默认行为。

    • SKIP
      禁用备份集的过期和名称检查,这些检查一般由 BACKUP 语句执行以防覆盖备份集。 有关 { NOINIT | INIT } 和 { NOSKIP | SKIP } 之间交互的信息,请参阅本主题后面的“备注”。

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

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

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

    • FORMAT
      指定创建新的介质集。 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 = { buffercount | **@**buffercount_variable }
    指定用于备份操作的 I/O 缓冲区总数。 可以指定任何正整数;但是,较大的缓冲区数可能导致由于 Sqlservr.exe 进程中的虚拟地址空间不足而发生“内存不足”错误。

    缓冲区使用的总计空间由下面公式确定:buffercount * maxtransfersize。

    注意注意

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

  • MAXTRANSFERSIZE = { maxtransfersize | **@**maxtransfersize_variable }
    指定要在 SQL Server 和备份介质之间使用的最大传输单元(字节)。 可能的值是 65536 字节 (64 KB) 的倍数,最多可到 4194304 字节 (4 MB)。

错误管理选项

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

  • { NO_CHECKSUM | CHECKSUM }
    控制是否启用备份校验和。

    • NO_CHECKSUM
      显式禁用备份校验和的生成(以及页校验和的验证)。 这是默认行为,但压缩备份除外。

    • CHECKSUM
      如果此选项已启用并且可用,则指定备份操作将验证每页的校验和及页残缺,并生成整个备份的校验和。 这是压缩备份的默认行为。

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

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

  • { STOP_ON_ERROR | CONTINUE_AFTER_ERROR }
    控制备份操作在遇到页校验和错误后是停止还是继续。

    • STOP_ON_ERROR
      如果未验证页校验和,则指示 BACKUP 失败。 这是默认行为。

    • CONTINUE_AFTER_ERROR
      指示 BACKUP 继续执行,不管是否遇到无效校验和或页撕裂之类的错误。

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

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

兼容性选项

  • RESTART
    从 SQL Server 2008 开始不起作用。 此版本接受该选项,以便与旧版本的 SQL Server 保持兼容。

监视选项

  • STATS [ **=**percentage ]
    每当另一个r percentage 完成时显示一条消息,并用于测量进度。 如果省略 percentage,则 SQL Server 在每完成 10% 就显示一条消息。

    STATS 选项报告截止报告下一个间隔的阈值时的完成百分比。 这是指定百分比的近似值;例如,当 STATS=10 时,如果完成进度为 40%,则该选项可能显示 43%。 对于较大的备份集,这不是问题,因为完成百分比在已完成的 I/O 调用之间变化非常缓慢。

磁带选项

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

  • { REWIND | NOREWIND }

    • REWIND
      指定 SQL Server 将释放和重绕磁带。 REWIND 是默认设置。

    • NOREWIND
      指定在备份操作之后 SQL Server 让磁带一直处于打开状态。 在对磁带执行多个备份操作时,可以使用此选项来帮助改进性能。

      NOREWIND 包含 NOUNLOAD,并且这些选项在单个 BACKUP 语句中不兼容。

      注意注意

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

  • { UNLOAD | NOUNLOAD }

    注意注意

    UNLOAD/NOUNLOAD 这一会话设置可在整个会话期间存在,或者在通过指定其他设置而进行重置之前一直存在。

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

    • NOUNLOAD
      指定在 BACKUP 操作之后磁带将继续加载在磁带机中。

注意注意

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

特定于日志的选项

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

注意注意

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

  • { NORECOVERY | STANDBY **=**undo_file_name }

    • NORECOVERY
      备份日志的尾部并使数据库处于 RESTORING 状态。 当将故障转移到辅助数据库或在执行 RESTORE 操作前保存日志尾部时,NORECOVERY 很有用。

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

    • STANDBY **=**standby_file_name
      备份日志的尾部并使数据库处于只读和 STANDBY 状态。 将 STANDBY 子句写入备用数据(执行回滚,但需带进一步还原选项)。 使用 STANDBY 选项等同于 BACKUP LOG WITH NORECOVERY 后跟 RESTORE WITH STANDBY。

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

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

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

    BACKUP LOG 的 NO_TRUNCATE 选项相当于同时指定 COPY_ONLY 和 CONTINUE_AFTER_ERROR。

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

关于使用 SQL Server 备份

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

备份类型

事务日志截断

格式化备份介质

使用备份设备和介质集

还原 SQL Server 备份

注意注意

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

备份类型

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

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

    备份范围

    备份类型

    整个数据库

    数据库备份涵盖整个数据库。

    或者,每个数据库备份都可以充当由一个或多个差异数据库备份构成的系列的基础。

    部分数据库

    部分备份涵盖读/写文件组,也可能涵盖一个或多个只读文件或文件组。

    或者,每个部分备份都可以充当由一个或多个差异部分备份构成的系列的基础。

    文件或文件组

    文件备份涵盖一个或多个文件或文件组,仅与包含多个文件组的数据库相关。 在简单恢复模式下,文件备份实质上仅限于只读辅助文件组。

    或者,每个文件备份都可以充当由一个或多个差异文件备份构成的系列的基础。

  • 在完整恢复模式或大容量日志恢复模式下,常规备份还包括顺序“事务日志备份”(或称“日志备份”),这是必需的备份。 每个日志备份均涵盖创建备份时处于活动状态的事务日志部分,并包括在上次日志备份中没有备份的所有日志记录。

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

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

    注意注意

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

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

事务日志截断

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

注意注意

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

格式化备份介质

当且仅当满足任何以下条件时,BACKUP 语句才会格式化备份介质:

  • 指定了 FORMAT 选项。

  • 介质为空。

  • 操作正在写入延续磁带。

使用备份设备和介质集

条带介质集(条带集)中的备份设备

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

下面的示例将 AdventureWorks2012 数据库的备份写入使用三个磁盘文件的新条带介质集。

BACKUP DATABASE AdventureWorks2012
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 AdventureWorks2012 database;
GO

在备份设备已定义为条带集的组成部分后,将不能用于单个设备备份,除非指定了 FORMAT。 同样,一个含有非条带备份的备份设备不能用于条带集,除非指定了 FORMAT。 若要拆分条带备份集,请使用 FORMAT。

如果写入介质标头时未指定 MEDIANAME 或 MEDIADESCRIPTION,则与空项对应的介质标头字段将为空。

使用镜像介质集

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

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

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

BACKUP DATABASE AdventureWorks2012
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
重要说明重要提示

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

镜像介质集中的介质簇

BACKUP 语句的 TO 子句中指定的每个备份设备均对应于一个介质簇。 例如,如果 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

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

有关镜像介质集的详细信息,请参阅镜像备份介质集 (SQL Server)。 有关介质集和介质簇的一般信息,请参阅介质集、介质簇和备份集 (SQL Server)

还原 SQL Server 备份

若要还原数据库,选择恢复数据库以使其联机或者还原文件或文件组,请使用 Transact-SQL RESTORE 语句或 SQL Server Management Studio 还原任务。 有关详细信息,请参阅还原与恢复概述 (SQL Server)

有关 BACKUP 选项的其他注意事项

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

下表说明了 { NOINIT | INIT } 与 { NOSKIP | SKIP } 选项之间的交互。

注意注意

如果磁带介质为空或磁盘备份文件不存在,则所有这些交互将写入介质标头并继续进行。 如果介质不为空但缺少有效的介质标头,则这些操作将反馈相关信息,指出这是无效的 MTF 介质,然后终止备份操作。

 

NOINIT

INIT

NOSKIP

如果卷中包含有效的介质标头,则验证介质名称是否匹配给定的 MEDIANAME(如果有)。 如果匹配,则追加备份集,同时保留所有现有的备份集。

如果卷中不含有效的介质标头,则会发生错误。

如果卷中包含有效的介质标头,将执行以下检查:

  • 如果指定了 MEDIANAME,则验证给定的介质名称是否匹配介质标头的介质名称。 2

  • 确保介质上没有未过期的备份集。

    如果有,则终止备份。

如果这些检查都通过了,则覆盖该介质上的所有备份集,只保留介质标头。

如果卷中不含有效的介质标头,则使用指定的 MEDIANAME 和 MEDIADESCRIPTION(如果有)生成一个介质标头。

SKIP

如果卷中包含有效的介质标头,则追加备份集,并保留所有现有备份集。

如果卷中包含有效的 1 介质标头,则覆盖介质上的所有备份集,仅保留介质标头。

如果介质为空,则使用指定的 MEDIANAME 和 MEDIADESCRIPTION(如果有)生成一个介质标头。

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

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

兼容性

注意事项注意

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

BACKUP 支持 RESTART 选项以提供与 SQL Server 早期版本的向后兼容性。 但在 SQL Server 2005 和更高版本中,RESTART 不起作用。

一般备注

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

不允许在显式或隐式事务中使用 BACKUP 语句。

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

注意注意

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

互操作性

在数据库仍在使用时,SQL Server 使用联机备份过程对数据库进行备份。 在备份过程中,可以进行多个操作;例如:在执行备份操作期间允许使用 INSERT、UPDATE 或 DELETE 语句。

在数据库或事务日志备份的过程中无法运行的操作包括:

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

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

如果备份操作与文件管理操作或收缩操作重叠,则产生冲突。 无论哪个冲突操作先行开始,第二个操作总会等待第一个操作设置的锁超时(超时期限由会话超时设置控制)。 如果在超时期限内释放锁,第二个操作将继续执行。 如果锁超时,则第二个操作失败。

元数据

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

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

安全性

从 SQL Server 2012 开始,PASSWORD 和 MEDIAPASSWORD 选项不可再用于创建备份; 但仍可以还原使用密码创建的备份。

权限

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

备份设备的物理文件的所有权和权限问题可能会妨碍备份操作。 SQL Server 必须能够读取和写入设备;运行 SQL Server 服务的帐户必须具有写入权限。 但是,用于在系统表中为备份设备添加项目的 sp_addumpdevice 不检查文件访问权限。 备份设备物理文件的这些问题可能直到为备份或还原而访问物理资源时才会出现。

示例

本部分包含以下示例:

  • A. 备份整个数据库

  • B. 备份数据库和日志

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

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

  • E. 创建和备份到单簇镜像介质集

  • F. 创建和备份到多簇镜像介质集

  • G 备份到现有镜像介质集

  • H. 在新的介质集中创建压缩备份

注意注意

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

A.备份整个数据库

下面的示例将 AdventureWorks2012 数据库备份到磁盘文件。

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

B.备份数据库和日志

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

接下来,该示例使用 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 AdventureWorks2012
   SET RECOVERY FULL;
GO
-- Create AdvWorksData and AdvWorksLog logical backup devices. 
USE master
GO
EXEC sp_addumpdevice 'disk', 'AdvWorksData', 
'Z:\SQLServerBackups\AdvWorksData.bak';
GO
EXEC sp_addumpdevice 'disk', 'AdvWorksLog', 
'X:\SQLServerBackups\AdvWorksLog.bak';
GO

-- Back up the full AdventureWorks2012 database.
BACKUP DATABASE AdventureWorks2012 TO AdvWorksData;
GO
-- Back up the AdventureWorks2012 log.
BACKUP LOG AdventureWorks2012
   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.创建和备份到单簇镜像介质集

下面的示例将创建包含一个介质簇和四个镜像的镜像介质集,并将 AdventureWorks2012 数据库备份到其中。

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

F.创建和备份到多簇镜像介质集

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

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

G.备份到现有镜像介质集

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

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

为清楚起见,此处显示默认的 NOINIT。

[返回示例顶部]

H.在新的介质集中创建压缩备份

下面的示例格式化介质,并创建新的介质集,然后对 AdventureWorks2012 数据库执行压缩完整备份。

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

[返回示例顶部]

请参阅

参考

ALTER DATABASE (Transact-SQL)

DBCC SQLPERF (Transact-SQL)

RESTORE (Transact-SQL)

RESTORE FILELISTONLY (Transact-SQL)

RESTORE HEADERONLY (Transact-SQL)

RESTORE LABELONLY (Transact-SQL)

RESTORE VERIFYONLY (Transact-SQL)

sp_addumpdevice (Transact-SQL)

sp_configure (Transact-SQL)

sp_helpfile (Transact-SQL)

sp_helpfilegroup (Transact-SQL)

概念

备份设备 (SQL Server)

介质集、介质簇和备份集 (SQL Server)

结尾日志备份 (SQL Server)

服务器配置选项