如何备份文件和文件组 (Transact-SQL)
当数据库大小和性能要求使完整数据库备份显得不切实际,则可以创建文件备份。“文件备份”包含一个或多个文件(或文件组)中的所有数据。有关文件备份的详细信息,请参阅完整文件备份和差异文件备份。
重要提示 |
---|
在简单恢复模式下,读/写文件必须一同备份。这将确保数据库可以还原到一致的时间点。不要逐个指定读/写文件或文件组,而应使用 READ_WRITE_FILEGROUPS 选项。此选项将所有读/写文件组备份到数据库中。通过指定 READ_WRITE_FILEGROUPS 创建的备份称为“部分备份”。有关详细信息,请参阅部分备份。 |
备份文件和文件组
若要创建文件或文件组备份,请使用 BACKUP DATABASE <file_or_filegroup> 语句。此语句至少必须指定以下各项:
数据库名称。
FILE 或 FILEGROUP 子句(为每个文件或文件组分别指定)。
将写入完整备份的备份设备。
用于文件备份的基本 Transact-SQL 语法如下:
BACKUP DATABASE database
{ FILE **=**logical_file_name | FILEGROUP **=**logical_filegroup_name } [ ,...f ]
TO backup_device [ ,...n ]
[ WITH with_options [ ,...o ] ] ;
选项
说明
database
备份事务日志、部分数据库或完整的数据库时所用的源数据库。
FILE =logical_file_name
指定要包含在文件备份中的文件的逻辑名称。
FILEGROUP =logical_filegroup_name
指定要包含在文件备份中的文件组的逻辑名称。在简单恢复模式下,只允许对只读文件组执行文件组备份。
[ ,...f ]
表示可以指定多个文件和文件组的占位符。不限制文件或文件组的数量。
backup_device [ ,...n ]
指定一个列表,它包含 1 至 64 个用于备份操作的备份设备。您可以指定物理备份设备,也可以指定对应的逻辑备份设备(如果已定义)。要指定物理备份设备,请使用 DISK 或 TAPE 选项:
{ DISK | TAPE } =physical_backup_device_name
有关详细信息,请参阅备份设备。
WITH with_options [ ,...o ]
您也可以指定一个或多个附加选项,如 DIFFERENTIAL。
注意差异文件备份需要以完整文件备份为基础。有关详细信息,请参阅差异文件备份。在完整恢复模式下,还必须备份事务日志。若要使用一整套文件的完整备份来还原数据库,您还必须拥有足够的日志备份,以便涵盖从第一个文件备份开始的所有文件备份。有关详细信息,请参阅如何创建事务日志备份 (Transact-SQL)。
示例
下面的示例备份了 Sales 数据库的辅助文件组的一个或多个文件。此数据库使用完整恢复模式并且包含以下辅助文件组:
名为 SalesGroup1 的文件组,它包含文件 SGrp1Fi1 和 SGrp1Fi2。
名为 SalesGroup2 的文件组,它包含文件 SGrp2Fi1 和 SGrp2Fi2。
注意 |
---|
在完整恢复模式下,需要定期日志备份以截断日志,这样才能将数据库还原到特定时间点。 |
A. 为两个文件创建文件备份
下面的示例仅为 SalesGroup1 文件组的 SGrp1Fi2 文件和 SalesGroup2 文件组的 SGrp2Fi2 文件创建差异文件备份。
--Backup the files in the SalesGroup1 secondary filegroup.
BACKUP DATABASE Sales
FILE = 'SGrp1Fi2',
FILE = 'SGrp2Fi2'
TO DISK = 'G:\SQL Server Backups\Sales\SalesGroup1.bck'
GO
B. 为两个辅助文件组创建完整文件备份
下面的示例为两个辅助文件组中的所有文件创建完整文件备份。
--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
FILEGROUP = 'SalesGroup1',
FILEGROUP = 'SalesGroup2'
TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck'
GO
C. 为两个辅助文件组创建差异文件备份
下面的示例为两个辅助文件组中的所有文件创建差异文件备份。
--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
FILEGROUP = 'SalesGroup1',
FILEGROUP = 'SalesGroup2'
TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck'
GO
WITH
DIFFERENTIAL,
GO