BACKUP (Transact-SQL)

SQL Server 2005 联机丛书 
BACKUP (Transact-SQL) 

更新日期: 2005 年 12 月 5 日

备份整个数据库、事务日志,或者备份一个或多个文件或文件组。

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

<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl07fcc5d26,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl07img,"; </script> 语法语法
--Backing up an entire database BACKUP DATABASE { database_name | @database_name_var } 
TO < backup_device > [ ,...n ] 
[ [ MIRROR TO < backup_device > [ ,...n ] ] [ ...next-mirror ] ] 
[ WITH 
     [ BLOCKSIZE = { blocksize | @blocksize_variable } ] 
     [ [ , ] { CHECKSUM | NO_CHECKSUM } ]
     [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
     [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] 
     [ [ , ] DIFFERENTIAL ] 
     [ [ , ] EXPIREDATE = { date | @date_var } 
     | RETAINDAYS = { days | @days_var } ] 
     [ [ , ] PASSWORD = { password | @password_variable } ] 
     [ [ , ] { FORMAT | NOFORMAT } ] 
     [ [ , ] { INIT | NOINIT } ] 
     [ [ , ] { NOSKIP | SKIP } ] 
     [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] 
     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
     [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] 
     [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] 
     [ [ , ] { NOREWIND | REWIND } ] 
     [ [ , ] { NOUNLOAD | UNLOAD } ] 
     [ [ , ] RESTART ] 
     [ [ , ] STATS [ = percentage ] ] 
     [ [ , ] COPY_ONLY ]
]

--Backing up specific files or filegroups
BACKUP DATABASE { database_name | @database_name_var } 
     <file_or_filegroup> [ ,...f ] 
TO <backup_device> [ ,...n ] 
[ [ MIRROR TO <backup_device> [ ,...n ] ] [ ...next-mirror ] ] 
[ WITH
     [ BLOCKSIZE = { blocksize | @blocksize_variable } ]
     [ [ , ] { CHECKSUM | NO_CHECKSUM } ]
     [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
     [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] 
     [ [ , ] DIFFERENTIAL ] 
     [ [ , ] EXPIREDATE = { date | @date_var } 
    | RETAINDAYS = { days | @days_var } ] 
     [ [ , ] PASSWORD = { password | @password_variable } ] 
     [ [ , ] { FORMAT | NOFORMAT } ] 
     [ [ , ] { INIT | NOINIT } ] 
     [ [ , ] { NOSKIP | SKIP } ] 
     [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] 
     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
     [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] 
     [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] 
     [ [ , ] { NOREWIND | REWIND } ] 
     [ [ , ] { NOUNLOAD | UNLOAD } ] 
     [ [ , ] RESTART ] 
     [ [ , ] STATS [ = percentage ] ] 
     [ [ , ] COPY_ONLY ]
]

--Specifying a file or filegroup
<file_or_filegroup> :: = 
     { 
    FILE = { logical_file_name | @logical_file_name_var } 
    | 
    FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } 
    | READ_WRITE_FILEGROUPS
     } 

--Backing up a transaction log
BACKUP LOG { database_name | @database_name_var } 
{ 
     TO <backup_device> [ ,...n ]  
[ [ MIRROR TO <backup_device> [ ,...n ] ] [ ...next-mirror ] ] 
     [ WITH 
     [ BLOCKSIZE = { blocksize | @blocksize_variable } ] 
     [ [ , ] { CHECKSUM | NO_CHECKSUM } ]
     [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
     [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] 
     [ [ , ] EXPIREDATE = { date | @date_var } 
     | RETAINDAYS = { days | @days_var } ] 
     [ [ , ] PASSWORD = { password | @password_variable } ] 
     [ [ , ] { FORMAT | NOFORMAT } ] 
     [ [ , ] { INIT | NOINIT } ] 
     [ [ , ] { NOSKIP | SKIP } ] 
     [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] 
     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
     [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] 
     [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] 
     [ [ , ] NO_TRUNCATE ] 
     [ [ , ] { NORECOVERY | STANDBY = undo_file_name } ] 
     [ [ , ] { NOREWIND | REWIND } ] 
     [ [ , ] { NOUNLOAD | UNLOAD } ] 
     [ [ , ] RESTART ] 
     [ [ , ] STATS [ = percentage ] ] 
     [ [ , ] COPY_ONLY ]
     ] 
} 

<backup_device> ::= 
     { 
    { logical_backup_device_name | @logical_backup_device_name_var } 
    | 
    { DISK | TAPE } = { 'physical_backup_device_name' | @physical_backup_device_name_var }
     } 

--Truncating the transaction log 
BACKUP LOG { database_name | @database_name_var } 
    WITH 
        { NO_LOG | TRUNCATE_ONLY } 
<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl09d0471d0,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl09img,"; </script> 参数参数
DATABASE

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

注意:
master 数据库,只能采用完整数据库备份。

 

 

{ database_name | @ database_name_var }

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

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

 

 

TO

表示伴随的备份设备组是一个非镜像媒体集,或者镜像媒体集中的镜像之一(如果声明一个或多个 MIRROR TO 子句)。

< backup_device >

指定用于备份操作的逻辑备份设备或物理备份设备。备份设备可以是下列一种或多种形式:

  • { logical_backup_device_name | @logical_backup_device_name_var }
  • { DISK | TAPE } = { 'physical_backup_device_name' | @physical_backup_device_name_var }
n

表示可以在给定的 TO 子句或 MIRROR TO 子句中最多指定 64 个备份设备的占位符。每个 MIRROR TO 子句中的设备数必须等于 TO 子句中的设备数。

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

MIRROR TO

表示伴随的备份设备组是包含二至四个镜像服务器的镜像媒体集中的一个镜像。若要指定镜像媒体集,请针对第一个镜像服务器设备使用 TO 子句,后跟最多三个 MIRROR TO 子句。

备份设备必须在类型和数量上等同于 TO 子句中指定的设备。在镜像媒体集中,所有的备份设备必须具有相同的属性。例如,使用同一制造商生产的同一型号的类似的磁带机设备。

每个镜像服务器都包括一个用于每个媒体簇的卷。若要备份到镜像媒体集,则所有的镜像服务器必须存在。当备份到现有媒体集时,TO 子句和每个 MIRROR TO 子句必须准确地按照创建媒体集时指定的那样来指定每个设备。

next-mirror

一个占位符,表示对于全部四个镜像服务器(包括由 TO 子句创建的镜像)而言,一个 BACKUP 语句可最多包含三个 MIRROR TO 子句。

{ logical_backup_device_name | @ logical_backup_device_name_var }

数据库要备份到的备份设备(由 sp_addumpdevice 创建)的逻辑名称。逻辑名称必须遵守标识符规则。如果作为变量 (@logical_backup_device_name_var) 提供,则可以将该备份设备名称指定为字符串常量 (@logical_backup_device_name_var = logical backup device name) 或任何字符串数据类型(ntexttext 数据类型除外)的变量。

{DISK | TAPE } = { ' physical_backup_device_name ' | @ physical_backup_device_name_var }

允许在指定的磁盘或磁带设备上创建备份。在执行 BACKUP 语句之前,指定的设备不必存在。如果存在物理设备且 BACKUP 语句中未指定 INIT 选项,则备份将追加到该设备。

当指定 TO DISK 或 TO TAPE 时,请输入完整的路径和文件名。例如,DISK = 'C:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/Mybackup.bak' 或 TAPE = '//./TAPE0'。

注意:
对于备份到磁盘的情况,如果输入一个相对路径名,则备份文件将存储到默认的备份目录中。该目录在安装时被设置并且存储在 KEY_LOCAL_MACHINE/Software/Microsoft/MSSQLServer/MSSQLServer 目录下的 BackupDirectory 注册表项中。

 

 

如果使用的是具有通用命名约定 (UNC) 名称的网络服务器或已重定向的驱动器号,则请指定磁盘的设备类型。

当指定多个文件时,可以混合逻辑文件名(或变量)和物理文件名(或变量)。但是,所有的设备都必须为同一类型(即,磁盘或磁带)。

BLOCKSIZE = { blocksize | @ blocksize_variable }

用字节数来指定物理块的大小。通常,无需使用该选项,因为 BACKUP 会自动选择适于磁盘或磁带设备的块大小。显式声明块大小将覆盖自动选择块大小。65,536 (64 KB) 是 SQL Server 支持的最大块大小。

如果您要执行计划存储在 CD-ROM 上的备份,则该选项很有用。若要将结果备份集传输到 CD-ROM,请将 BLOCKSIZE 设置为 2048。

注意:
如果未指定物理块大小,则还原时需使用已缓存的 I/O,这将导致效率降低(尤其对于大型备份)。

 

 

DESCRIPTION = { ' text ' | @ text_variable }

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

DIFFERENTIAL

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

注意:
在进行完整数据库备份或差异备份时,SQL Server 会备份足够的事务日志,确保还原数据库时生成一个一致的数据库。

 

 

EXPIREDATE = { date | @ date_var }

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

  • 字符串常量 (@date_var = date)
  • 字符串数据类型(ntexttext 数据类型除外)的变量
  • smalldatetime
  • datetime 变量
RETAINDAYS = { days | @ days_var }

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

重要事项:
如果未指定 EXPIREDATE 或 RETAINDAYS,则由 sp_configuremedia retention 配置设置来决定过期时间。这些选项仅仅阻止 SQL Server 覆盖文件。用其他方法仍可擦除磁带,而通过操作系统也可以删除磁盘文件。有关过期验证的详细信息,请参阅本主题中的 SKIP 和 FORMAT。

 

 

PASSWORD = { password | @ password_variable }

为备份集设置密码。PASSWORD 是一个字符串。如果为备份集定义了密码,则必须提供此密码才能对该备份集执行任何的 SQL Server 还原操作。但是,备份集密码不能防止覆盖备份文件。若要防止覆盖备份文件,请改用媒体集密码(请参阅此表后面的 MEDIAPASSWORD 选项)。(有关使用密码的详细信息,请参阅下面的“权限”。)

安全说明:
此密码提供的安全性较低。它旨在防止经过授权的用户和未经授权的用户使用 SQL Server 2005 工具执行不正确的还原操作。但是不能防止通过其他方式或通过替换密码来读取备份数据。保护备份的最佳做法是将备份磁带存储在安全的位置,或者备份到由适当的访问控制列表 (ACL) 保护的磁盘文件。ACL 应设置在创建备份的根目录下。

 

 

注意:
将来的版本中会删除 PASSWORD 选项。

 

 

FORMAT

指定创建新的媒体集。FORMAT 将在用于此备份操作的所有卷上写入一个新的媒体标头,从而覆盖任何现有的媒体标头和备份集。FORMAT 选项将使全部现有的媒体内容失效。

重要事项:
使用 FORMAT 要谨慎。格式化一个备份设备或媒体将使整个媒体集不可用。例如,如果初始化现有条带媒体集中的单个磁带,则整个媒体集都将变得不可用。

 

 

指定 FORMAT 即表示 SKIP;SKIP 无需显式声明。

NOFORMAT

指定不应将媒体标头写入用于此备份操作的所有卷。这是默认行为。

INIT

指定应覆盖所有备份集,但是保留媒体标头。如果指定了 INIT,将覆盖该设备上所有现有的备份集。

默认情况下,BACKUP 将检查下列条件,如果其中的任一条件存在,都不会覆盖备份媒体:

  • 所有备份集都未过期。有关详细信息,请参阅 EXPIREDATE 和 RETAINDAYS 选项。
  • 如果 BACKUP 语句给出了备份集名,则该备份集名与备份媒体上的名称不匹配。有关详细信息,请参阅 NAME 子句。

若要越过这些检查,请使用 SKIP 选项。有关 { INIT | NOINIT } 和 { NOSKIP | SKIP } 之间交互的详细信息,请参阅“备注”部分。

注意:
如果备份媒体有密码保护,则 SQL Server 将不写入媒体,除非提供媒体密码。SKIP 选项不覆盖此检查。只有通过重新格式化才能覆盖受密码保护的媒体。有关详细信息,请参阅 FORMAT 选项。

 

 

NOINIT

表示备份集将追加到指定的媒体集上,以保留现有的备份集。NOINIT 是默认设置。有关 { INIT | NOINIT } 和 { NOSKIP | SKIP } 之间交互的信息,请参阅“备注”部分。

RESTORE 命令的 FILE 选项用于在还原时选择适当的备份集。有关详细信息,请参阅 RESTORE

如果为媒体集定义了媒体密码,则必须提供密码。

NOSKIP

指示 BACKUP 语句在可以覆盖媒体上的所有备份集之前先检查它们的过期日期。这是默认行为。有关 { INIT | NOINIT } 与 { NOSKIP | SKIP } 之间交互的信息,请参阅“备注”部分。

SKIP

禁用备份集的过期和名称检查,这些检查一般由 BACKUP 语句执行以防覆盖备份集。有关 { INIT | NOINIT } 与 { NOSKIP | 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 应设置在创建备份的根目录下。

 

 

注意:
将来的版本中会删除 MEDIAPASSWORD 选项。

 

 

NAME = { backup_set_name | @ backup_set_var }

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

NORECOVERY

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

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

STANDBY = standby_file_name

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

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

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

NOREWIND

只用于磁带设备,以便提高对已加载的磁带执行多个备份操作时的性能,指定 SQL Server 在备份操作后让磁带一直处于打开状态。NOREWIND 表示 NOUNLOAD。SQL Server 将保留磁带机的所有权,直到 BACKUP 或 RESTORE 命令与 REWIND 或 UNLOAD 选项一起使用或服务器关闭为止。

如果无意中使磁带处于打开状态,则释放磁带的最快方法是使用下面的 RESTORE 命令:

RESTORE REWINDONLY FROM TAPE = <name>

有关详细信息,请参阅 RESTORE REWINDONLY (Transact-SQL)

通过查询 sys.dm_io_backup_tapes 动态管理视图可以找到当前打开的磁带的列表(有关详细信息,请参阅 sys.dm_io_backup_tapes)。

REWIND

指定 SQL Server 将在填充后释放和重绕磁带。如果 NOREWIND 和 REWIND 均未指定,则默认设置为 REWIND。

CHECKSUM

指定:

  1. 将页写入备份媒体之前,如果该页显示此信息,则 BACKUP 将对该页进行验证(校验和或页撕裂)。
  2. 无论是否存在页校验和,BACKUP 都会为备份流生成一个单独的备份校验和。还原操作可使用备份校验和来验证该备份是否损坏。备份校验和存储在备份媒体上,而不是存储在数据库页上。备份校验和可在还原时使用。

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

NO_CHECKSUM

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

STOP_ON_ERROR

如果未验证校验和,则指示 BACKUP 失败。(这是默认的行为。)

如果备份中包含损坏的页,则最好使用不包含错误的备用备份(例如,在页损坏之前进行的备份)来重复执行备份操作。但是,作为最后的手段,您可以使用还原语句的 CONTINUE_AFTER_ERROR 选项来还原损坏的备份并尝试补救数据。

CONTINUE_AFTER_ERROR

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

可以使用该选项代替 NO_TRUNCATE,尝试在数据库损坏时执行日志备份。

NOUNLOAD

指定不在备份后从磁带机中自动卸载磁带。设置始终为 NOUNLOAD,直到指定 UNLOAD 为止。该选项只用于磁带设备。

UNLOAD

指定在备份完成后自动重绕并卸载磁带。启动新用户会话时其默认设置为 UNLOAD。该设置一直保持到用户指定了 NOUNLOAD 时为止。该选项只用于磁带设备。

RESTART

无效。为了和 SQL Server 的早期版本兼容,此版本接受此选项。

STATS [ = percentage ]

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

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

< file_or_filegroup >

指定包含在数据库备份中的文件或文件组的逻辑名。可以指定多个文件或文件组。

COPY_ONLY

指定此备份不影响正常的备份序列。仅复制不会影响数据库的全部备份和还原过程。

可以创建数据或事务日志(在完整恢复模式或大容量日志恢复模式下)的仅复制备份。使用 COPY_ONLY 选项执行的数据备份不能用作差异基准。随后执行的差异备份将仅复制备份视为不存在。使用 COPY_ONLY 选项执行的日志备份不会截断事务日志。

注意:
使用 DIFFERENTIAL 选项指定时,COPY_ONLY 不起作用。

 

 

FILE ={ logical_file_name | @ logical_file_name_var }

给一个或多个包含在数据库备份中的文件命名。

FILEGROUP = { logical_filegroup_name | @ logical_filegroup_name_var }

给一个或多个包含在数据库备份中的文件组命名。在简单恢复模式下,只允许对只读文件组执行文件组备份。

注意:
如果数据库的大小和性能要求使得进行完整数据库备份不切实际,则备份一个文件。

 

 

重要事项:
在完整恢复模式或大容量日志恢复模式下,使用文件和文件组备份恢复数据库时,还需要从一个或多个日志备份(使用 BACKUP LOG 创建)中还原事务日志。

 

 

READ_WRITE_FILEGROUPS

指定部分备份,包括主文件组和所有具有读写权限的辅助文件组。创建部分备份时需要此关键字。

READ_WRITE_FILEGROUPS 始终包括主文件组。如果数据库是只读的,则 READ_WRITE_FILEGROUPS 仅包括主文件组。有关部分备份的详细信息,请参阅部分备份

重要事项:
显式列出读写文件组(不使用 READ_WRITE_FILEGROUPS)来创建一个文件备份,而不是部分备份。

 

 

f

表示可以指定多个文件和文件组的占位符。不限制文件或文件组的数量。

LOG

指定仅备份事务日志。该日志是从上一次成功执行的 LOG 备份到当前日志的末尾。备份日志之后,可能会截断活动事务、事务复制、数据库镜像或第三方应用程序不再需要的空间。

注意:
如果备份日志看来并没有截断大部分的日志,则有可能在日志中存在一个旧的打开的事务。可以使用 DBCC SQLPERF (LOGSPACE) 监视日志空间。有关详细信息,请参阅管理事务日志空间

 

 

NO_TRUNCATE

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

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

如果不使用 NO_TRUNCATE 选项,则数据库必须联机。

如果数据库处于 OFFLINE 或 EMERGENCY 状态,则即使使用 NO_TRUNCATE,也不允许进行 BACKUP。

NO_LOG | TRUNCATE_ONLY

执行检查点。

在简单恢复模式下,执行检查点将在不备份日志的情况下删除日志的不活动部分,并通过放弃活动日志以外的部分截断日志。此选项会释放空间,但是存在可能丢失数据的风险。使用 NO_LOG 或 TRUNCATE_ONLY 截断日志后,在日志的截断部分中记录的更改不可恢复。因此,为了进行恢复,使用这些选项中的任一个后,必须立即执行 BACKUP DATABASE 以执行完整或差异数据库备份。建议您不要使用这些选项中的任一个。

注意:
在 SQL Server 的未来版本中将删除该选项。应避免使用该选项进行新的开发工作,并计划修改当前使用它的应用程序。

 

 

因为并不保存日志备份,所以没有必要指定备份设备。NO_LOG 和 TRUNCATE_ONLY 是同义的。

注意:
尽管可用此选项手动截断事务日志,但是极力建议您不要这样做,因为这会将日志链断开。在下一次完整备份或差异数据库备份之前,将无法为数据库提供媒体故障保护。只在非常特殊的情况下才手动截断日志,并立即创建数据备份。

 

 

注意:
如果不想进行日志备份,请将数据库设置为简单恢复模式。

 

 

<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl152788f13,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl15img,"; </script> 备注备注

可以将数据库或日志备份追加到任何磁盘或磁带设备上,从而使得数据库和它的事务日志能存储在一个物理位置中。

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

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

有关备份术语、备份设备以及管理备份的信息,请参阅管理备份

并发

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

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

  • 文件管理操作,如含有 ADD FILE 或 REMOVE FILE 选项的 ALTER DATABASE 语句。
  • 收缩数据库或文件操作。这包括自动收缩操作。

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

备份格式

用于备份或还原操作的所有媒体都使用称为 Microsoft® 磁带格式 (MTF) 的标准备份格式。

当且仅当下列任何一项为真时,BACKUP 才格式化媒体:

  • 指定了 FORMAT 选项。
  • 媒体为空。
  • 操作正在写入延续卷。

备份类型

SQL Server 支持的备份类型包括:

  • 完整数据库备份,该操作将备份包括部分事务日志在内的整个数据库(这样数据库便可恢复)。
    有关详细信息,请参阅完整数据库备份
  • 完整数据库备份之间执行的差异数据库备份。
    差异数据库备份只记录自上次数据库备份后更改的数据。有关详细信息,请参阅差异数据库备份
  • 部分备份。
    部分备份类似于完整数据库备份,但只能包含主文件组和所有的读写文件组。或者,通过在 BACKUP 命令中列出只读文件,从而将它们包括在部分备份中。
    若要指定部分备份,请使用 READ_WRITE_FILEGROUPS 选项,例如:
    BACKUP DATABASE AdventureWorks READ_WRITE_FILEGROUPS TO <backup_device>
    有关详细信息,请参阅部分备份
  • 在部分备份之后执行的部分差异备份。
    部分差异备份只包含在主文件组和所有读写文件组中更改的数据。有关详细信息,请参阅差异部分备份
  • 文件和文件组备份。
    文件组备份与文件备份的作用相同。文件组备份是文件组中所有文件的单个备份,相当于在创建备份时显式列出文件组中的所有文件。可以还原文件组备份中的个别文件,也可以将所有文件作为一个整体还原。
    注意:
    在 SQL Server 2005 中,文件备份和文件组备份不再局限于完整模式数据库或大容量日志模式数据库。但是,对于简单模型数据库而言,文件备份和文件组备份实质上局限于只读辅助文件组。尽管您可以在简单模式数据库中创建一个读写文件组的文件备份,但却不能在还原中使用该备份,除非将文件组设置为只读,然后执行差异文件备份。

     

     

    当时间约束使得完整数据库备份不切实际时,请备份数据库文件或文件组,而不是备份完整数据库。若要备份一个文件而不是整个数据库时,请建立过程以确保数据库中所有的文件按规则备份。
    对于完整模式数据库或大容量日志模式数据库,还必须执行事务日志备份。在还原一个文件备份后,使用事务日志将文件内容前滚,从而使其与数据库其余部分一致。有关详细信息,请参阅完整文件备份
  • 在文件备份或文件组备份之后执行的差异文件备份。
    文件差异备份只包含在指定文件或文件组中更改的数据。有关详细信息,请参阅差异文件备份
  • 事务日志备份(仅用于完整恢复模式或大容量日志恢复模式)。
    日志备份序列提供了连续的事务信息链,可支持从数据库备份、差异备份或文件备份中快速恢复。有关详细信息,请参阅使用事务日志备份
    重要事项:
    当数据库恢复模式设置为简单恢复模式时,将无法使用 BACKUP LOG 语句。

     

     

  • 仅复制备份
    SQL Server 2005 引入了对于创建仅复制备份的支持,此备份不影响正常的备份序列。因此,与其他备份不同,仅复制备份不会影响数据库的全部备份和还原过程。您可以为任何类型的备份创建仅复制备份。
    有关详细信息,请参阅仅复制备份(简单恢复模式)仅复制备份(完整恢复模式)

备份全文数据

在 SQL Server 2005 中执行完整数据库备份期间,全文数据将与其他数据库数据一起备份。备份操作将全文目录视为文件。例如,可以使用 FILE= clause 来选择目录,以对其单独备份。(每个全文目录的逻辑文件名都具有以下格式:sysft_<catalog name>。)

在备份过程中,目录处于只读模式,因此在备份完成之前将挂起“爬网”活动(创建和维护全文索引的过程)。

SKIP、NOSKIP、INIT 和 NOINIT 间的交互

下表说明 { INIT | NOINIT } 和 { NOSKIP | SKIP } 子句间是如何交互的。

注意:
如果磁带媒体为空或磁盘备份文件不存在,则所有这些交互将写入媒体标头并继续进行。如果媒体不为空并缺少有效的媒体标头,则这些操作的反馈将指出这是无效的 MTF 媒体并中止备份。

 

 

  INIT NOINIT

SKIP

如果卷中包含有效的 1 媒体标头,则验证媒体密码并覆盖媒体上的全部备份集,仅保留媒体标头。

如果媒体为空,则使用给定的 MEDIANAME、MEDIAPASSWORD 和 MEDIADESCRIPTION(如果有)生成一个媒体标头。

如果卷中包含有效的媒体标头,则验证媒体密码、追加备份集,并保留所有现有备份集。

NOSKIP

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

  • 验证媒体密码。2
  • 如果指定了 MEDIANAME,则验证给定的媒体名称是否匹配媒体标头的媒体名称。
  • 验证媒体上没有未过期的备份集。
    如果有,则中止备份。

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

如果卷中不含有效的媒体标头,则使用给定的 MEDIANAME、MEDIAPASSWORD 和 MEDIADESCRIPTION(如果有)生成一个媒体标头。

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

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

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

2 用户必须属于适当的固定数据库或服务器角色,并提供执行备份操作所需的正确媒体密码。

注意:
为保持向后兼容性,在 BACKUP 语句的语法中可使用 DUMP 关键字替代 BACKUP 关键字。另外,可使用 TRANSACTION 关键字替代 LOG 关键字。

 

 

备份历史记录表

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

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

兼容性注意事项

注意:
由 SQL Server 的最近版本创建的备份将无法在 SQL Server 的早期版本中还原。

 

 

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

条带集(有时称为多簇媒体集)中使用的备份设备必须始终在具有相同设备数的条带集中使用(除非媒体在某个时刻使用 FORMAT 重新初始化)。“条带集 ”是一个磁盘文件系统,在该系统上,数据分为若干个块,并在磁盘数组中的所有磁盘上按照固定顺序排列。条带集属于独立磁盘冗余阵列 (RAID) 级别 0 (RAID 0)(有关详细信息,请参阅 RAID 级别和 SQL Server)。

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

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

镜像媒体集中的媒体簇

TO 子句中指定的每个备份设备都定义了一个单独的媒体簇。例如,如果 TO 子句列出三个设备,则 BACKUP 将数据写入三个媒体簇。

有关镜像媒体集中媒体簇的说明,请参阅使用镜像备份媒体集

对于镜像媒体集,每个 MIRROR TO 子句列出的设备数量(以及类型)都必须与 TO 子句列出的相同。当针对每个镜像服务器列出多个设备时,这些设备的顺序将决定每个设备的媒体簇。将给定媒体簇备份到它在每个镜像服务器中对应的设备上。因此,每次使用媒体集时,都必须按照同一顺序列出这些设备。

例如,考虑分别针对三个设备使用 TO 子句和 MIRROR TO 子句。以下示例将用于这些设备上的第一个备份,因此使用 WITH FORMAT 子句。(若要将备份追加到这些设备,请省略 WITH FORMAT 子句。)

BACKUP DATABASE AdventureWorks
TO DISK='C:/AdventureWorks1a.bak', DISK='C:/AdventureWorks2a.bak', 
DISK='C:/AdventureWorks3a.bak'
MIRROR TO DISK='C:/AdventureWorks1b.bak', DISK='C:/AdventureWorks2b.bak', 
DISK='C:/AdventureWorks3b.bak'
WITH FORMAT
重要事项:
此示例旨在允许您在本地系统上对其进行测试。实际上,在同一个驱动器上备份到多个设备会降低性能。

 

 

此媒体集示例将创建三个媒体簇。在每个设备列表中,第二个设备都('C:/AdventureWorks2a.bak''C:/AdventureWorks2b.bak')对应于第二个媒体簇。

<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl346c93562,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl34img,"; </script> 权限权限

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 不检查文件访问权。备份设备物理文件的这些问题可能直到为备份或还原而访问物理资源时才会出现。

<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl36578f9f7,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl36img,"; </script> 示例示例

本部分包含以下示例:

  • A. 备份整个 AdventureWorks 数据库
  • B. 备份数据库和日志
  • C. 创建和备份到单簇镜像媒体集
  • C. 创建和备份到多簇镜像媒体集
  • E. 备份到现有镜像媒体集

A. 备份整个 AdventureWorks 数据库

注意:
AdventureWorks 数据库仅供举例说明。

 

 

此示例创建用于放置 AdventureWorks 数据库的完整备份的逻辑备份设备 AdvWorksData

-- Create a logical backup device for data backups of AdventureWorks.
USE master
GO
EXEC sp_addumpdevice 'disk', 'AdvWorksData', 
'C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/BACKUP/AdvWorksData.bak'

-- Back up the full AdventureWorks database.
BACKUP DATABASE AdventureWorks 
   TO AdvWorksData

B. 备份数据库和日志

此示例创建了完整数据库备份和日志备份。AdventureWorks 示例数据库默认使用简单恢复模式。若要创建 AdventureWorks 数据库的日志备份,必须在完整数据库备份之前将该数据库更改为使用完整恢复模式。将数据库备份到称为 AdvWorksData 的逻辑备份设备上,在更新活动执行一段时间后,将日志备份到称为 AdvWorksLog 的逻辑备份设备上。

注意:
创建逻辑备份设备需要一次完成。

 

 

-- To permit log backups, before the full database backup, alter the database 
-- to use the full recovery model.
USE master;
GO
ALTER DATABASE AdventureWorks
   SET RECOVERY FULL

-- If the AdvWorksData device does not exist yet, create it. 
USE master
GO
EXEC sp_addumpdevice 'disk', 'AdvWorksData', 
'C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/BACKUP/AdvWorksData.bak'

-- Create a logical backup device, AdvWorksLog.
USE master
GO
EXEC sp_addumpdevice 'disk', 'AdvWorksLog', 
'C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/BACKUP/AdvWorksLog.bak'

-- Back up the full AdventureWorks database.
BACKUP DATABASE AdventureWorks TO AdvWorksData

-- Back up the AdventureWorks log.
BACKUP LOG AdventureWorks
   TO AdvWorksLog
注意:
对于生产数据库,需要定期更新日志。应当经常进行日志更新,以提供足够的保护来防止数据丢失。

 

 

C. 创建和备份到单簇镜像媒体集

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

BACKUP DATABASE AdventureWorks
TO TAPE = '//./tape0'
MIRROR TO TAPE = '//./tape1'
MIRROR TO TAPE = '//./tape2'
MIRROR TO TAPE = '//./tape3'
WITH
   FORMAT,
   MEDIANAME = 'AdventureWorksSet0'

C. 创建和备份到多簇镜像媒体集

此示例将创建镜像媒体集,其中每个镜像包含两个媒体簇。然后将 AdventureWorks 数据库备份到这两个镜像中。

BACKUP DATABASE AdventureWorks
TO TAPE = '//./tape0', TAPE = '//./tape1'
MIRROR TO TAPE = '//./tape2', TAPE = '//./tape3'
WITH
   FORMAT,
   MEDIANAME = 'AdventureWorksSet1'

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

此示例将备份集追加到在前面的示例中创建的媒体集上。

BACKUP LOG AdventureWorks
TO TAPE = '//./tape0', TAPE = '//./tape1'
MIRROR TO TAPE = '//./tape2', TAPE = '//./tape3'
WITH 
   NOINIT,
   MEDIANAME = 'AdventureWorksSet1'
注意:
为清楚起见,此处显示默认的 NOINIT。

 

 

<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl59618dc6a,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl59img,"; </script> 更改历史记录更改历史记录

版本 历史记录

2005 年 12 月 5 日 

已更改的内容:
  • 阐明了 NO_LOG 和 TRUNCATE_ONLY 选项的说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值