第16章 备份与恢复 基 本 概 念 16.1 备份数据库 16.2 恢复数据库 16.3
为了防止因软硬件故障而导致数据丢失或数据库的崩溃,数据备份和恢复工作就成了一项不容忽视的系统管理工作。
备份就是制作数据库结构、对象和数据的拷贝,以便在数据库遭到破坏的时候能够还原和恢复数据。恢复是指从一个或多个备份中还原数据,并在还原最后一个备份后恢复数据库的操作。
16.1 基 本 概 念 16.1.1 备份的作用 通过适当的备份,可以将数据库从多种故障中恢复,包括: 16.1 基 本 概 念 16.1.1 备份的作用 通过适当的备份,可以将数据库从多种故障中恢复,包括: 存储媒体损坏,例如存放数据库数据的硬盘损坏; 用户操作错误(例如,偶然或恶意地修改或删除数据);
硬件故障(例如,磁盘驱动器损坏或服务器报废); 自然灾难。
16.1.2 恢复模式 恢复模式是一个数据库属性,它用于控制数据库备份和还原操作的基本行为。例如,恢复模式控制了将事务记录在日志中的方式、事务日志是否需要备份以及可用的还原操作。
1.恢复模式的优点 (1)简化了恢复计划; (2)简化了备份和恢复过程; (3)明确了系统操作要求之间的权衡; (4)明确了可用性和恢复要求之间的权衡。
2.恢复模式的分类 在SQL Server 2005中,可以选择3种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。 (1)简单恢复模式 此模式简略地记录大多数事务,所记录的信息只是为了确保在系统崩溃或还原数据备份之后数据库的一致性。
(2)完整恢复模式 此模式完整地记录了所有的事务,并保留所有的事务日志记录,直到将它们备份。
(3)大容量日志恢复模式 此模式简略地记录大多数大容量操作(例如索引创建和大容量加载),完整地记录其他事务。大容量日志恢复模式提高了大容量操作的性能,常用作完整恢复模式的补充。
16.1.3 备份类型 SQL Server 2005在数据库的备份和恢复方面进行了一些改进,引入了一些新的功能。它支持以下多种备份类型。
1.完整备份 完整备份(以前称为数据库备份)将备份整个数据库,包括事务日志部分(以便可以恢复整个备份)。完整备份代表备份完成时的数据库。
2.完整差异备份 “完整差异备份”仅记录自上次完整备份后更改过的数据。 完整差异备份基于以前的完整备份,因此,这样的完整备份称为“基准备份”。差异备份仅记录自基准备份后更改过的数据。
3.部分备份 部分备份与完整备份相似,但部分备份并不包含所有文件组。部分备份包含主文件组、每个读写文件组以及任何指定的只读文件中的所有数据。
4.部分差异备份 部分差异备份仅记录文件组中自上次部分备份后更改的数据,这样的部分备份称为差异备份的“基准备份”。
5.文件和文件组备份 可以分别备份和还原数据库中的文件。使用文件备份使用户可以仅还原已损坏的文件,而不必还原数据库的其余部分,从而提高恢复速度。
6.文件差异备份 创建文件或文件组的完整备份后,可以基于该完整备份创建一系列的差异备份。 文件差异备份只捕获自上一次文件备份以来更改的数据。
7.事务日志备份 事务日志备份仅用于完整恢复模式或大容量日志恢复模式。
16.2 备份数据库 16.2.1 备份设备 1.磁盘设备 2.磁带设备 3.物理和逻辑设备 16.2 备份数据库 16.2.1 备份设备 备份或还原操作中使用的磁带机或磁盘驱动器称为“备份设备”。 1.磁盘设备 2.磁带设备 3.物理和逻辑设备
SQL Server Database Engine使用物理设备名称或逻辑设备名称标识备份设备。 物理备份设备是操作系统用来标识备份设备的名称,如C:\Backups\Accounting\Full.bak。
逻辑备份设备是用户定义的别名,用来标识物理备份设备。逻辑设备名称永久性地存储在SQL Server内的系统表中。
16.2.2 使用SQL Server Management Studio备份数据库 (1)启动SQL Server Management Studio工具,在“对象资源管理器”中展开Database Engine实例。
(2)在需要进行备份操作的数据库名上右击,选择快捷菜单中的“Tasks”→“Back Up…” 。
(3)在“Back Up Database”对话框中,“Database”列表框用来选择要备份的数据库;“Recovery model”列表框查看为所选数据库显示的恢复模式(FULL、SIMPLE或BULK_LOGGED);“Back Up Type”列表框显示要对指定数据库执行的备份的类型。
“Backup component”选择要备份的数据库组件。 在“Backup set”中,“Name”指定备份集名称,系统将根据数据库名称和备份类型自动建议一个默认名称。
“Description”文本框中,可以输入备份集的说明。 “Backup set will expire”用来指定备份集过期时间。 “Destination”选择媒体之一,作为要备份到的目标。其中,“Disk”表示备份到磁盘;“Tape”表示备份到磁带,如果服务器没有相连的磁带设备,此选项将不可用。
“Back Up Database”对话框如图16-5所示,单击“OK”按钮,将完成数据库的备份操作。
图16-5 “Back Up Database”对话框
16.2.3 使用T-SQL语句备份数据库 BACKUP命令用来对指定数据库进行完整备份、完整差异备份、文件和文件组备份、文件差异备份、部分备份、部分差异备份、事务日志备份。
1.完整备份和完整差异备份 其语法格式如下: BACKUP DATABASE database_name TO < backup_device > [ ,...n ] [ WITH [ DESCRIPTION ='text'] [ [ , ] DIFFERENTIAL ] [ [ , ] EXPIREDATE = date | RETAINDAYS =days ] [ [ , ] { INIT | NOINIT } ] [ [ , ] NAME = backup_set_name ] ]
其中,<backup_device> ::= { { logical_backup_device_name } | {DISK|TAPE}={ 'physical_backup_device_name' } }
(2)< backup_device > 各参数的含义如下。 (1)database_name 备份事务日志、部分数据库或完整的数据库时所用的源数据库。 (2)< backup_device > 指定用于备份操作的逻辑备份设备或物理备份设备。
(3)DESCRIPTION ='text' (4)DIFFERENTIAL 指定说明备份集的文本字符串。 指定数据库备份或文件备份应该只包含上次完整备份后更改的数据库或文件部分。
(5)EXPIREDATE=date (6)RETAINDAYS=days 指定备份集到期和允许被覆盖的日期。 指定必须经过多少天才可以覆盖该备份媒体集。
(9)NAME=backup_set_name (7)INIT 指定应覆盖该设备上所有现有的备份集。 (8)NOINIT 表示备份集将追加到指定的媒体集上,以保留现有的备份集。NOINIT是默认设置。 (9)NAME=backup_set_name 指定备份集的名称。
2.文件和文件组备份 其语法格式如下: BACKUP DATABASE database_name <file_or_filegroup> [ ,...f ] TO <backup_device> [ ,...n ] [ WITH [ DESCRIPTION = 'text' ] [ [ , ] DIFFERENTIAL ] [ [ , ] EXPIREDATE =date| RETAINDAYS = days] [ [ , ] { INIT | NOINIT } ] [ [ , ] NAME = backup_set_name ] ]
其中, <file_or_filegroup> :: = { FILE = logical_file_name | FILEGROUP = logical_filegroup_name | READ_WRITE_FILEGROUPS}
3.事务日志备份 其语法格式如下: BACKUP LOG database_name { TO <backup_device> [ ,...n ] [ WITH [ DESCRIPTION = 'text' ]
[ [ , ] EXPIREDATE = date | RETAINDAYS = days ] [ [ , ] { INIT | NOINIT } ] [ [ , ] NAME = backup_set_name ] [ [ , ] NO_TRUNCATE ] [ [ , ] { NORECOVERY | STANDBY = standby_file_name } ] ] }
16.3.1 使用SQL Server Management Studio恢复数据库 16.3 恢复数据库 16.3.1 使用SQL Server Management Studio恢复数据库 利用SQL Server Management Studio工具,可以方便地完成恢复数据库的操作。 (1)启动SQL Server Management Studio工具,在“对象资源管理器”中展开Database Engine实例。
(2)在数据库名上右击,选择快捷菜单中的“Tasks”→“Restore”→“Database…” 。
(3)弹出“Restore Database”对话框。其中,“Destination for restore”用于指定还原的目标,在“To database”列表框中,为还原操作选择现有数据库的名称或键入新数据库名称。在“Select the backup sets to restore”中,选择用于还原的备份集,“Type”列显示备份集的类型。
(4)选择对话框中的“Options”,可以查看和修改还原选项。
16.3.2 使用T-SQL语句恢复数据库 1.完整还原 RESTORE命令用于对备份数据库进行恢复。 完整还原的语法格式如下: RESTORE DATABASE database_name [ FROM <backup_device> [ ,...n ] ] [ WITH
[ FILE = file_number ] [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] [ ,...n ] [ [ , ] { RECOVERY | NORECOVERY | STANDBY = {standby_file_name } } ] [ [ , ] REPLACE ] ]
<backup_device> ::= { { logical_backup_device_name } | { DISK | TAPE } = { 'physical_backup_device_name' } }
2.部分还原 部分还原的语法格式如下: RESTORE DATABASE database_name <files_or_filegroups> [ FROM <backup_device> [ ,...n ] ] [ WITH PARTIAL
[ FILE = file_number ] [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] [ ,...n ] [ [ , ] NORECOVERY ] [ [ , ] REPLACE ] ]
<backup_device> ::= { { logical_backup_device_name } | { DISK | TAPE } = { 'physical_backup_device_name' } } <files_or_filegroups> ::= { FILE = logical_file_name | FILEGROUP = logical_filegroup_name }
3.文件还原或页面还原 文件还原或页面还原的语法格式如下: RESTORE DATABASE database_name <file_or_filegroup > [ ,...f ] [ FROM <backup_device> [ ,...n ] ] [ WITH [ FILE = file_number ]
[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] [ [ , ] NORECOVERY ] [ [ , ] REPLACE ] ]
<backup_device> ::= { { logical_backup_device_name } | { DISK | TAPE } = { 'physical_backup_device_name' } } <file_or_filegroup> ::= { FILE = logical_file_name | FILEGROUP = logical_filegroup_name }
4.事务日志还原 事务日志还原的语法格式如下: RESTORE LOG database_name [ <file_or_filegroup> [ ,...f ] ] [ FROM <backup_device> [ ,...n ] ] [ WITH [ FILE = file_number ]
[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] [ [ , ] { RECOVERY | NORECOVERY | STANDBY = standby_file_name }] [ [ , ] REPLACE ] ]
<backup_device> ::= { { logical_backup_device_name } | { DISK | TAPE } = { 'physical_backup_device_name' } } <file_or_filegroup> ::= { FILE = logical_file_name | FILEGROUP = logical_filegroup_name }