备份整个数据库,或者备份一个或多个文件或文件组 (BACKUP DATABASE)。另外,在完整恢复模式或大容量日志恢复模式下备份事务日志 (BACKUP LOG)。
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 ] ]
[;]
Truncating the Transaction Log (breaks the log chain)
BACKUP LOG { database_name | @database_name_var }
WITH { NO_LOG | TRUNCATE_ONLY }
[;]
<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
| DESCRIPTION = { 'text' | @text_variable }
| NAME = { backup_set_name | @backup_set_name_var }
| PASSWORD = { password | @password_variable }
| [ EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
| NO_LOG
--Media Set Options
{ NOINIT | INIT }
| { NOSKIP | SKIP }
| { NOFORMAT | FORMAT }
| MEDIADESCRIPTION = { 'text' | @text_variable }
| MEDIANAME = { media_name | @media_name_variable }
| MEDIAPASSWORD = { mediapassword | @mediapassword_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 会备份足够的事务日志,以便在还原备份时生成一个一致的数据库。
注意: 对 master 数据库,只能采用完整数据库备份。
- LOG
-
指定仅备份事务日志。该日志是从上一次成功执行的日志备份到当前日志的末尾。必须创建完整备份,才能创建第一个日志备份。
注意: 执行典型日志备份后,如果没有指定 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
-
一个占位符,表示可以在逗号分隔的列表中指定多个文件和文件组。数目没有限制。
有关详细信息,请参阅完整文件备份和如何备份文件和文件组 (Transact-SQL)。
- 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
-
一个占位符,表示可以在逗号分隔的列表中指定多个只读文件组。
有关部分备份的详细信息,请参阅部分备份。
- TO <backup_device> [ ,...n ]
-
表示伴随的备份设备组是一个非镜像媒体集,或者是镜像媒体集中的第一个镜像(对其声明一个或多个 MIRROR TO 子句)。
- <backup_device>
-
指定用于备份操作的逻辑备份设备或物理备份设备。
- { logical_device_name | @logical_device_name_var }
-
数据库要备份到的备份设备(由 sp_addumpdevice 创建)的逻辑名称。逻辑名称必须遵守标识符规则。如果作为变量 (@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 选项,则备份将追加到该设备。
有关详细信息,请参阅备份设备。
- n
-
一个占位符,表示最多可以在逗号分隔的列表中指定 64 个备份设备。
- MIRROR TO <backup_device> [ ,...n ]
-
指定将要镜像 TO 子句中指定备份设备的一个或多个备份设备。必须对 MIRROR TO 子句和 TO 子句指定相同类型和数量的备份设备。最多可以使用三个 MIRROR TO 子句。
注意: 对于 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 创建完整备份。 有关详细信息,请参阅使用差异备份。
备份集选项
这些选项对此备份操作创建的备份集进行操作。
注意: |
---|
若要为还原操作指定备份集,请使用 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 选项将创建“仅复制日志备份”,该备份不会截断事务日志。仅复制日志备份对日志链没有任何影响,因此其他日志备份的表现就像仅复制备份不存在一样。
有关详细信息,请参阅仅复制备份。
- 与 BACKUP DATABASE 一起使用时,COPY_ONLY 选项创建的完整备份不能用作差异基准。差异位图不会被更新,因此差异备份的表现就像仅复制备份不存在一样。后续差异备份将最新的常规完整备份用作它们的基准。
- DESCRIPTION = { 'text' | @text_variable }
-
指定说明备份集的自由格式文本。该字符串最长可以有 255 个字符。
- NAME = { backup_set_name | @backup_set_var }
-
指定备份集的名称。名称最长可达 128 个字符。如果未指定 NAME,它将为空。
- PASSWORD = { password | @password_variable }
-
为备份集设置密码。PASSWORD 是一个字符串。如果为备份集定义了密码,则必须提供此密码才能对该备份集执行任何的 SQL Server 还原操作。但是,备份集密码不能防止覆盖备份文件。若要防止覆盖备份文件,请改用媒体集密码(请参阅此表后面的 MEDIAPASSWORD 选项)。(有关使用密码的详细信息,请参阅本主题后面的“权限”。)
安全说明: 此密码提供的安全性较低。它旨在防止授权用户或未授权用户使用 SQL Server 2005 工具进行不正确的还原,但是不能防止通过其他方式或通过替换密码来读取备份数据。保护备份的最佳做法是将备份磁带存储在安全的位置,或者备份到由适当的访问控制列表 (ACL) 保护的磁盘文件。ACL 应设置在创建备份的根目录下。 注意: 将来的 SQL Server 版本中会删除 PASSWORD 选项。
- [ EXPIREDATE = date | RETAINDAYS = date ]
-
指定允许覆盖该备份的备份集的日期。如果同时使用这两个选项,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) 提供,则必须指定为整数。
- NO_LOG
-
在 BACKUP DATABASE 语句的上下文中,指定备份将不包含任何日志。这相当于在没有 SQL Server 2005 之前创建文件备份的方式。使用 NO_LOG 创建的数据库备份相当于不包含任何日志记录的完整文件备份集。
在完整恢复模式下,如果您需要快速备份数据并拥有该数据的完整日志备份顺序,NO_LOG 将很有用。
媒体集选项
这些选项作为一个整体对媒体集进行操作。
- { NOINIT | INIT }
-
控制备份操作是追加到还是覆盖备份媒体中的现有备份集。默认为追加到媒体中最新的备份集 (NOINIT)。
注意: 有关 { NOINIT | INIT } 和 { NOSKIP | SKIP } 之间交互的信息,请参阅本主题后面的“备注”。 - NOINIT
-
表示备份集将追加到指定的媒体集上,以保留现有的备份集。如果为媒体集定义了媒体密码,则必须提供密码。NOINIT 是默认设置。
有关详细信息,请参阅追加到现有备份集。
- INIT
-
指定应覆盖所有备份集,但是保留媒体标头。如果指定了 INIT,将覆盖该设备上所有现有的备份集(如果条件允许)。默认情况下,BACKUP 将检查下列条件,如果其中的任一条件存在,都不会覆盖备份媒体:
- 所有备份集都未过期。有关详细信息,请参阅 EXPIREDATE 和 RETAINDAYS 选项。
- 如果 BACKUP 语句给出了备份集名,则该备份集名与备份媒体上的名称不匹配。有关详细信息,请参阅本部分前面介绍的 NAME 选项。
若要越过这些检查,请使用 SKIP 选项。
注意: 如果备份媒体有密码保护,则 SQL Server 将不写入媒体,除非提供媒体密码。SKIP 选项不覆盖此检查。仅通过重新格式化即可覆盖受密码保护的媒体,该操作将删除媒体中的备份。有关媒体密码的信息,请参阅本主题前面的“MEDIAPASSWORD”。有关重新格式化媒体的信息,请参阅本主题前面的“FORMAT”。 有关详细信息,请参阅覆盖备份集。
- { 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 选项,将不会对媒体名称进行验证检查。
- MEDIAPASSWORD = { mediapassword | @mediapassword_variable }
-
为媒体集设置密码。MEDIAPASSWORD 是一个字符串。
如果为媒体集定义了密码,则在该媒体集上创建备份集之前必须提供此密码。另外,从该媒体集执行任何还原操作时也必须提供媒体密码。只有通过重新格式化才能覆盖受密码保护的媒体。有关详细信息,请参阅 FORMAT 选项。(有关使用密码的详细信息,请参阅本主题后面的“权限”部分。)
安全说明: 此密码提供的安全性较低。它旨在防止授权用户或未授权用户使用 SQL Server 2005 工具进行不正确的还原,但是不能防止通过其他方式或通过替换密码来读取备份数据。保护备份的最佳做法是将备份磁带存储在安全的位置,或者备份到由适当的访问控制列表 (ACL) 保护的磁盘文件。ACL 应设置在创建备份的根目录下。 注意: 将来的 SQL Server 版本中会删除 MEDIAPASSWORD 选项。
- 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。
- MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }
-
指定要在 SQL Server 和备份媒体之间使用的最大传输单元(字节)。可能的值是 65536 字节 (64 KB) 的倍数,最多可到 4194304 字节 (4 MB)。
错误管理选项
使用这些选项可以确定是否为备份操作启用了备份校验和,以及备份操作是否将在遇到错误时停止。
- { NO_CHECKSUM | CHECKSUM }
-
控制是否启用备份校验和。
- NO_CHECKSUM
-
显式禁用备份校验和的生成(以及页校验和的验证)。这是默认行为。
- CHECKSUM
-
启用备份校验和,以便 BACKUP 可以执行以下操作:
- 将页写入备份媒体之前,如果该页显示此信息,则 BACKUP 将对该页进行验证(校验和或页撕裂)。
- 无论是否存在页校验和,BACKUP 都会为备份流生成一个单独的备份校验和。还原操作可使用(可选)备份校验和来验证该备份是否损坏。备份校验和存储在备份媒体上,而不是存储在数据库页上。备份校验和可在还原时使用。
使用备份校验和可能会影响工作负荷以及备份吞吐量。
- { STOP_ON_ERROR | CONTINUE_AFTER_ERROR }
-
控制备份操作在遇到页校验和错误后是停止还是继续。
- STOP_ON_ERROR
-
如果未验证页校验和,则指示 BACKUP 失败。这是默认行为。
- CONTINUE_AFTER_ERROR
-
指示 BACKUP 继续执行,不管是否遇到无效校验和或页撕裂之类的错误。
数据库损坏时,如果无法使用 NO_TRUNCATE 选项备份日志尾部,则可以通过指定 CONTINUE_AFTER_ERROR 而不是 NO_TRUNCATE 尝试执行尾日志备份。
兼容性选项
- RESTART
-
无效。为了与旧版 SQL Server 兼容,此版本接受此选项。
监视选项
- STATS [ = 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 选项或服务器实例关闭为止。磁带保持打开将防止其他进程访问磁带。有关如何显示打开的磁带列表和如何将打开的磁带关闭的信息,请参阅备份设备。
- { UNLOAD | NOUNLOAD }
-
注意: UNLOAD/NOUNLOAD 这一会话设置可在整个会话期间存在,或者在通过指定其他设置而进行重置之前一直存在。 - UNLOAD
-
指定在备份完成后自动重绕并卸载磁带。会话开始时 UNLOAD 是默认值。
- NOUNLOAD
-
指定在 BACKUP 操作之后磁带将继续加载在磁带机中。
注意: |
---|
对于备份到磁带备份设备,BLOCKSIZE 选项会影响备份操作的性能。通常,只有写入磁带设备时,此选项才会影响性能。 |
日志特定的选项
这些选项仅与 BACKUP LOG 一起使用。
注意: |
---|
如果不想进行日志备份,则请使用简单恢复模式。有关详细信息,请参阅简单恢复模式下的备份。 |
- { NORECOVERY | STANDBY = undo_file_name }
-
- NORECOVERY
-
备份日志的尾部并使数据库处于 RESTORING 状态。当将故障转移到辅助数据库或在执行 RESTORE 操作前保存日志尾部时,NORECOVERY 很有用。
若要执行最大程度的日志备份(跳过日志截断)并自动将数据库置于 RESTORING 状态,请同时使用 NO_TRUNCATE 和 NORECOVERY 选项。
- STANDBY = standby_file_name
-
备份日志的尾部并使数据库处于只读和 STANDBY 状态。将 TANDBY 子句写入备用数据(执行回滚,但需带进一步还原选项)。使用 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 选项,则数据库必须联机。
如果数据库处于 OFFLINE 或 EMERGENCY 状态,则即使使用 NO_TRUNCATE,也不允许进行 BACKUP。
- [ NO_LOG | TRUNCATE_ONLY ]
-
注意: 在 SQL Server 的未来版本中将删除该选项。应避免使用该选项进行新的开发工作,并计划修改当前使用它的应用程序。 仅在 BACKUP LOG 语句中使用,它执行一个检查点,以便手动强制截断事务日志。NO_LOG 和 TRUNCATE_ONLY 是同义的。因为并不备份日志,所以没有必要指定备份设备。
在简单恢复模式下,执行检查点将在不创建备份副本的情况下,删除日志中不活动的部分。这样就丢弃了除活动日志外的其他所有部分,从而截断了日志。此选项会释放空间,但是存在可能丢失数据的风险。使用 NO_LOG 或 TRUNCATE_ONLY 截断日志后,在日志的截断部分中记录的更改只有到下次数据库备份时才能恢复。因此,为了进行恢复,使用这些选项中的任一个后,应立即执行 BACKUP DATABASE 以执行完整或差异数据库备份。
注意: 建议不要使用 NO_LOG 或 TRUNCATE_ONLY 手动截断事务日志,因为这样会断开日志链。在下一次完整备份或差异数据库备份之前,将无法为数据库提供媒体故障保护。只在非常特殊的情况下才手动截断日志,并立即创建数据备份。
可以将数据库或日志备份追加到任何磁盘或磁带设备上,从而使得数据库和它的事务日志能存储在一个物理位置中。
不允许在显式或隐式事务中使用 BACKUP 语句。
只要操作系统支持数据库的排序规则,就可以在不同的平台之间执行备份操作,即使这些平台使用不同的处理器类型。
有关备份术语、备份设备以及管理备份的信息,请参阅在 SQL Server 中使用备份媒体。
并发
当数据库正在使用时,SQL Server 使用一个联机备份过程来对数据库进行备份。在备份过程中,可以进行多个操作;例如:在执行备份操作期间允许使用 INSERT、UPDATE 或 DELETE 语句。
在数据库或事务日志备份的过程中无法运行的操作包括:
- 文件管理操作,如含有 ADD FILE 或 REMOVE FILE 选项的 ALTER DATABASE 语句。
- 收缩数据库或文件操作。这包括自动收缩操作。
如果备份操作与文件管理操作或收缩操作重叠,则产生冲突。无论哪个冲突操作先行开始,第二个操作总会等待第一个操作设置的锁超时(超时期限由会话超时设置控制)。如果锁在超时期限内释放,则第二个操作继续执行。如果锁超时,则第二个操作失败。
格式化备份媒体
当且仅当满足以下任何一个条件,才由 BACKUP 语句格式化备份媒体:
- 指定了 FORMAT 选项。
- 媒体为空。
- 操作正在写入延续磁带。
有关详细信息,请参阅创建新媒体集。
备份类型
支持的备份类型取决于数据库的恢复模式,如下所示:
- 所有恢复模式都支持数据的完整备份和差异备份。
备份范围 备份类型 整个数据库
数据库备份涵盖整个数据库。
部分数据库
部分备份涵盖读/写文件组,也可能涵盖一个或多个只读文件或文件组。
文件或文件组
文件备份涵盖一个或多个文件或文件组,仅与包含多个文件组的数据库相关。在简单恢复模式下,文件备份实质上仅限于只读辅助文件组。
- 在完整恢复模式或大容量日志恢复模式下,常规备份还包括顺序“事务日志备份”(或称“日志备份”),这是必需的备份。每个日志备份均涵盖创建备份时处于活动状态的事务日志部分,并包括在上次日志备份中没有备份的所有日志记录。
注意: 必须创建完整备份,才能创建第一个日志备份。 - “仅复制备份”是特殊用途的完整备份或日志备份,它独立于正常的常规备份顺序。若要创建仅复制备份,请在 BACKUP 语句中指定 COPY_ONLY 选项。有关详细信息,请参阅仅复制备份。
备份全文数据
在 SQL Server 2005 中执行完整数据库备份期间,全文数据将与其他数据库数据一起备份。备份操作将全文目录视为文件。例如,可以使用 FILE= clause 来选择目录,以对其单独备份。(每个全文目录的逻辑文件名都具有以下格式:sysft_<catalog name>。)
在备份过程中,目录处于只读模式,因此在备份完成之前将挂起“爬网”活动(创建和维护全文索引的过程)。
SKIP、NOSKIP、INIT 和 NOINIT 间的交互
下表说明 { NOINIT | INIT } 与 { NOSKIP | SKIP } 选项间的交互。
注意: |
---|
如果磁带媒体为空或磁盘备份文件不存在,则所有这些交互将写入媒体标头并继续进行。如果媒体不为空但缺少有效的媒体标头,则这些操作将反馈相关信息,指出这是无效的 MTF 媒体,然后终止备份操作。 |
NOINIT | INIT | |
---|---|---|
NOSKIP |
如果卷中包含有效的媒体标头,则验证媒体密码并验证媒体名称是否匹配给定的 MEDIANAME(如果有)。如果匹配,则追加备份集,同时保留所有现有的备份集。 如果卷中不含有效的媒体标头,则会发生错误。 |
如果卷中包含有效的媒体标头,将执行以下检查:
如果这些检查都通过了,则覆盖该媒体上的所有备份集,只保留媒体标头。 如果卷中不含有效的媒体标头,则使用指定的 MEDIANAME、MEDIAPASSWORD 和 MEDIADESCRIPTION(如果有)生成一个媒体标头。 |
SKIP |
如果卷中包含有效的媒体标头,则验证媒体密码、追加备份集,并保留所有现有备份集。 |
如果卷中包含有效的 1 媒体标头,则验证媒体密码并覆盖媒体上的所有备份集,仅保留媒体标头。 如果媒体为空,则使用指定的 MEDIANAME、MEDIAPASSWORD 和 MEDIADESCRIPTION(如果有)生成一个媒体标头。 |
1 有效性包括 MTF 版本号和其他标头信息。如果不支持指定的版本或指定的版本不是期望值,将会发生错误。
2 用户必须属于适当的固定数据库或服务器角色,并提供执行备份操作所需的正确媒体密码。
备份历史记录表
SQL Server 包括以下跟踪备份活动的备份历史记录表:
- backupfile (Transact-SQL)
- backupfilegroup (Transact-SQL)
- backupmediafamily (Transact-SQL)
- backupmediaset (Transact-SQL)
- backupset (Transact-SQL)
执行还原操作时,如果在 msdb 数据库中没有记录备份集,则可能修改备份历史记录表。
兼容性支持
注意: |
---|
由 SQL Server 的较新版本创建的备份将无法在 SQL Server 的早期版本中还原。 |
BACKUP 支持以下关键字以提供与 SQL Server 早期版本的向后兼容性:
- 接受 RESTART 选项以实现兼容,但在 SQL Server 2005 中不起作用。
- 若要保持向后兼容,可以在 BACKUP 语句中使用 DUMP 关键字而不是 BACKUP 关键字。此外,可以使用 TRANSACTION 关键字而不是 LOG 关键字。SQL Server 数据库引擎解释 DUMP DATABASE 或 DUMP TRANSACTION 分别与解释 BACKUP DATABASE 或 BACKUP LOG 的方式相同。
重要提示: 包含 DUMP 语句是为了向后兼容。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 使用 BACKUP。
条带媒体集(条带集)中的备份设备
“条带集”是一组磁盘文件,其中的数据划分为若干块并以固定顺序分布。条带集中使用的备份设备数目必须保持不变(除非以 FORMAT 命令重新初始化媒体)。
以下示例将 AdventureWorks 数据库的备份写入使用三个磁盘文件的新条带媒体集。
BACKUP DATABASE AdventureWorks
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 AdventureWorks database;
GO
在备份设备已定义为条带集的组成部分后,将不能用于单个设备备份,除非指定了 FORMAT。同样,一个含有非条带备份的备份设备不能用于条带集,除非指定了 FORMAT。若要拆分条带备份集,请使用 FORMAT。
如果写入媒体标头时未指定 MEDIANAME 或 MEDIADESCRIPTION,则与空项对应的媒体标头字段将为空。
使用镜像媒体集
通常,备份是非镜像的,而且 BACKUP 语句仅包含一个 TO 子句。但是,每个媒体集可能总共包含四个镜像。对于镜像媒体集,备份操作写入到多组备份设备。每组备份设备均包含镜像媒体集中的一个镜像。每个镜像都必须使用相同数量和类型的物理备份设备,而且这些设备必须都具有相同的属性。
若要备份到镜像媒体集,则所有的镜像服务器必须存在。若要备份到镜像媒体集,请指定 TO 子句来指定第一个镜像,并为其他每个镜像指定 MIRROR TO 子句。
对于镜像媒体集,每个 MIRROR TO 子句列出的设备数量和类型都必须与 TO 子句列出的相同。下面的示例写入到包含两个镜像并在每个镜像中使用三个设备的镜像媒体集:
BACKUP DATABASE AdventureWorks
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 |
C:\AdventureWorks1a.bak |
C:\AdventureWorks2a.bak |
C:\AdventureWorks3a.bak |
1 |
C:\AdventureWorks1b.bak |
C:\AdventureWorks2b.bak |
C:\AdventureWorks3b.bak |
媒体簇必须总是备份到特定镜像中的同一个设备。因此,每次使用现有媒体集时,请按照创建媒体集时指定的相同顺序列出各个镜像的设备。
有关镜像媒体集的详细信息,请参阅使用镜像备份媒体集。有关媒体集和媒体簇的一般信息,请参阅媒体集、媒体簇和备份集。
BACKUP DATABASE 和 BACKUP LOG 权限默认授予 sysadmin 固定服务器角色和 db_owner 及 db_backupoperator 固定数据库角色的成员。
此外,用户可以为媒体集、备份集或两者指定密码。如果为媒体集定义了密码,则用户还必须提供媒体密码才能执行这些操作。同样,除非在还原命令中指定正确的媒体集密码和备份集密码,否则不能执行还原操作。
在 BACKUP 语句中,定义备份集密码和媒体集密码为可选功能。此密码提供的安全性较低。它旨在防止经过授权的用户和未经授权的用户使用 SQL Server 2005 工具执行不正确的还原操作。但是不能防止通过其他方式或通过替换密码来读取备份数据。同样,密码也不能防止通过 FORMAT 选项覆盖媒体。建议使用强密码。有关强密码的信息,请参阅强密码。
因此,尽管使用密码对防止使用 SQL Server 工具未经授权地访问媒体内容有帮助,但不能防止媒体内容被破坏。密码不能完全防止未经授权地访问媒体内容,原因在于备份集中的数据没有加密,理论上可以被专为此目的创建的程序所检查。对于安全性至关重要的场合,防止未经授权的个人物理访问媒体非常重要。
为不是用相关密码创建的对象指定密码是错误的做法。
BACKUP 使用由 PASSWORD 选项提供的备份集密码创建备份集。另外,通常 BACKUP 在写入媒体之前将验证由 MEDIAPASSWORD 选项提供的媒体密码。BACKUP 不验证媒体密码的唯一情况是格式化媒体时,这将覆盖媒体标头。如果 BACKUP 写入媒体标头,BACKUP 将给 MEDIAPASSWORD 选项中指定的值分配媒体集密码。
有关密码对 SKIP、NOSKIP、INIT 和 NOINIT 选项的影响的信息,请参阅本主题后面的“备注”。
备份设备物理文件的所有权和权限问题可能会妨碍备份操作。SQL Server 必须能够读取和写入设备;运行 SQL Server 服务的帐户必须具有写入权限。但是,为设备在系统表中添加项目的 sp_addumpdevice 不检查文件访问权。备份设备物理文件的这些问题可能直到为备份或还原而访问物理资源时才会出现。
注意: |
---|
AdventureWorks 数据库用于举例说明。 AdventureWorks 是 SQL Server 2005 中的示例数据库之一。Adventure Works Cycles 是一家虚构的制造公司,用于演示数据库概念和方案。 有关该数据库的详细信息,请参阅示例和示例数据库。 |
本部分包含以下示例:
- A. 备份整个数据库
- B. 备份数据库和日志
- C. 创建辅助文件组的完整文件备份
- D. 创建辅助文件组的差异文件备份
- E. 创建和备份到单簇镜像媒体集
- F. 创建和备份到多簇镜像媒体集
- G. 备份到现有镜像媒体集
注意: |
---|
备份操作指南主题还包含其他示例。有关详细信息,请参阅备份和还原操作指南主题 (Transact-SQL)。 |
A. 备份整个数据库
下面的示例将 AdventureWorks 数据库备份到磁盘文件。
BACKUP DATABASE AdventureWorks
TO DISK = 'Z:\SQLServerBackups\AdvWorksData.bak'
WITH FORMAT;
GO
B. 备份数据库和日志
下面的示例备份 AdventureWorks 示例数据库,默认情况下,该数据库使用简单恢复模式。若要支持日志备份,请将 AdventureWorks 数据库改为使用完整恢复模式。
接下来,此例使用 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 AdventureWorks
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',
'Z:\SQLServerBackups\AdvWorksLog.bak';
GO
-- Back up the full AdventureWorks database.
BACKUP DATABASE AdventureWorks TO AdvWorksData;
GO
-- Back up the AdventureWorks log.
BACKUP LOG AdventureWorks
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. 创建和备份到单簇镜像媒体集
以下示例将创建包含一个媒体簇和四个镜像的镜像媒体集,并将 AdventureWorks 数据库备份到其中。
BACKUP DATABASE AdventureWorks
TO TAPE = '\\.\tape0'
MIRROR TO TAPE = '\\.\tape1'
MIRROR TO TAPE = '\\.\tape2'
MIRROR TO TAPE = '\\.\tape3'
WITH
FORMAT,
MEDIANAME = 'AdventureWorksSet0'
F. 创建和备份到多簇镜像媒体集
以下示例将创建镜像媒体集,其中每个镜像包含两个媒体簇。然后将 AdventureWorks 数据库备份到这两个镜像中。
BACKUP DATABASE AdventureWorks
TO TAPE = '\\.\tape0', TAPE = '\\.\tape1'
MIRROR TO TAPE = '\\.\tape2', TAPE = '\\.\tape3'
WITH
FORMAT,
MEDIANAME = 'AdventureWorksSet1'
G. 备份到现有镜像媒体集
以下示例将备份集追加到在前面的示例中创建的媒体集上。
BACKUP LOG AdventureWorks
TO TAPE = '\\.\tape0', TAPE = '\\.\tape1'
MIRROR TO TAPE = '\\.\tape2', TAPE = '\\.\tape3'
WITH
NOINIT,
MEDIANAME = 'AdventureWorksSet1'
注意: |
---|
为清楚起见,此处显示默认的 NOINIT。 |
其他资源
创建 SQL Server 数据库的完整备份和差异备份在 SQL Server 中使用备份媒体
媒体集、媒体簇和备份集
使用事务日志备份