SQLSERVER2005 数据库备份脚本

DECLARE @strPath NVARCHAR(200)
set @strPath = replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
set @strPath = REPLACE(@strPath, ':' , '.')
set @strPath = 'E:\Backup\Mis.Backup\Mis_' + @strPath + '.bak'
BACKUP DATABASE Mis TO DISK = @strPath WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT


语法
 

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

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

不允许在显式或隐式事务中使用 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 包括以下跟踪备份活动的备份历史记录表:

backupfile (Transact-SQL)


backupfilegroup (Transact-SQL)


backupmediafamily (Transact-SQL)


backupmediaset (Transact-SQL)


backupset (Transact-SQL)


执行还原操作时,如果在 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')对应于第二个媒体簇。

参数
DATABASE
指定一个完整数据库备份。如果指定了一个文件和文件组的列表,则仅备份该列表中的文件和文件组。

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


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

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


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) 或任何字符串数据类型(ntext 或 text 数据类型除外)的变量。

{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)


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


smalldatetime


datetime 变量


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

重要事项:  
如果未指定 EXPIREDATE 或 RETAINDAYS,则由 sp_configure 的 media 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
指定:

将页写入备份媒体之前,如果该页显示此信息,则 BACKUP 将对该页进行验证(校验和或页撕裂)。


无论是否存在页校验和,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 结束时显示一个消息,它被用于测量进度。如果省略 percentage,则 SQL Server 在每完成 10% 就显示一条消息。

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

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

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

您可以为任何类型的备份创建仅复制备份。COPY_ONLY 选项的影响随常规备份类型的不同而变化,如下所示:

通过 COPY_ONLY 选项执行的数据备份不能用作差异备份的基准备份。随后执行的差异备份将仅复制备份视为不存在。


差异备份不受 COPY_ONLY 选项的影响。


使用 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 选项,则数据库必须联机。

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

NO_LOG | TRUNCATE_ONLY
通过放弃活动日志以外的所有日志,无需备份复制日志即可删除不活动的日志部分,并截断日志。该选项会释放空间。因为并不保存日志备份,所以没有必要指定备份设备。NO_LOG 和 TRUNCATE_ONLY 是同义的。

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


使用 NO_LOG 或 TRUNCATE_ONLY 截断日志后,记录在日志中的更改不可恢复。为了进行恢复,请立即执行 BACKUP DATABASE 以执行完整备份或完整差异备份。

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

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


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

此外,用户可以为媒体集、备份集或两者指定密码。如果为媒体集定义了密码,则用户还必须提供媒体密码才能执行这些操作。同样,除非在还原命令中指定正确的媒体集密码和备份集密码,否则不能执行还原操作。

在 BACKUP 语句中,定义备份集密码和媒体集密码为可选功能。此密码提供的安全性较低。它旨在防止经过授权的用户和未经授权的用户使用 SQL Server 2005 工具执行不正确的还原操作。但是不能防止通过其他方式或通过替换密码来读取备份数据。同样,密码也不能防止通过 FORMAT 选项覆盖媒体。Microsoft 建议使用强密码。有关强密码的信息,请参阅强密码。

因此,尽管使用密码对防止使用 SQL Server 工具未经授权地访问媒体内容有帮助,但不能防止媒体内容被破坏。密码不能完全防止未经授权地访问媒体内容,原因在于备份集中的数据没有加密,理论上可以被专为此目的创建的程序所检查。对于安全性至关重要的场合,防止未经授权的个人物理访问媒体非常重要。

为不是用相关密码创建的对象指定密码是错误的做法。

BACKUP 使用由 PASSWORD 选项提供的备份集密码创建备份集。另外,通常 BACKUP 在写入媒体之前将验证由 MEDIAPASSWORD 选项提供的媒体密码。BACKUP 不验证媒体密码的唯一情况是格式化媒体时,这将覆盖媒体标头。如果 BACKUP 写入媒体标头,BACKUP 将给 MEDIAPASSWORD 选项中指定的值分配媒体集密码。

有关密码对 SKIP、NOSKIP、INIT 和 NOINIT 选项的影响的信息,请参阅“备注”部分。

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

示例
本部分包含以下示例:

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

原文地址:https://www.cnblogs.com/baishahe/p/1646696.html