数据库的备份与还原
数据库的备份和还原是维护数据库的安全想和完整性的重要组成部分,是保证数据库安全的两项密不可分的重要方法。用户的错误操作和蓄意破坏,病毒的攻击或其它不可抗拒的力量,都有可能造成数据库的破坏和丢失。通过数据库的备份和还原,可以恢复数据库的正常使用。
数据库备份概念与备份类型
备份是指制作数据库的副本,将数据库中的部分或全部内容复制到其他的存储介质(如磁盘)上保存起来的过程,以便在数据库遭到破坏时能够修复数据库
备份类型:
1、完整备份
完整备份是任何备份策略中都要求完成的第一种备份类型。备份过程可以通过SSMS和T-SQL命令方式
2、差异备份
当数据量十分庞大时,执行一次完成备份需要耗费非常多时间和空间,因此完整备份不能频繁进行,创建了数据库的完整备份以后,如果数据库从上次备份以来只修改了很少的数据时,比较适合使用差异备份。
3、事务日志备份
如果已经执行了完整备份和差异备份,但是如果没有执行事务日志备份,则数据库可能无法正常工作。 尽管事务日志备份依赖完整备份,但它并不备份数据库本身。这种类型的备份只记录事务日志的适当部分,明确地说,就是备份自从上一个事务以来已经发生了变化的部分。
使用事务日志备份,可以将数据库恢复到故障点或特定的时间点。一般情况下,事务日志备份比完整备份和差异备份使用的资源少。因此,可以更频繁地创建事务日志备份,减少数据丢失的风险。
3、文件和文件组备份
现在,有越来越多的公司拥有了TB级的数据库,这些数据库称为超大型数据库。对于超大型数据库,如果每次都执行完整数据备份不切实际,应当执行数据库文件或文件组备份。
文件组是一种将数据库存放在多个文件上的方法,并允许控制数据库对象(比如表或视图)存储到文件组当中的哪些文件上。利用文件组备份,每次可以备份这些文件当中的一个或多个文件,而不是同时备份整个数据库。
备份设备是用来存储数据库、事务日志或者文件和文件组备份的存储介质,在执行备份数据之前,需要创建备份设备。
1.使用SQL Server Management Studio管理器创建备份设备
使用Microsoft SQL Server Management Studio管理器创建备份设备
的操作步骤如下:
(1) 在【对象资源管理器】中,单击服务器名称以展开服务器树。
(2) 展开【服务器对象】节点,右键单击【备份设备】选项。
(3) 从弹出的菜单中选择【新建备份设备】命令,打开【备份设备】窗口。
(4) 在【备份设备】窗口,输入设备名称并且指定被备份文件的完整路径。
5)单击【确定】按钮,完成备份设备的创建。
2.使用系统存储过程SP_ADDUMPDEVICE创建备份设备
使用系统存储过程SP_ADDUMPDEVICE来添加磁盘和磁带设备。
SP_ADDUMPDEVICE [ @devtype = ]‘device_type’,
[ @logicalname = ]‘logical_name' ,
[ @physicalname = ]‘hysical_name’ [, [ @cntrltype = ]
controller_type |[ @devstatus = ]‘device_status’ } ]
上述语法中的各参数的含义如下:
[ @devtype = ]‘device_type’ :该参数指备份设备的类型。类
型可以是disk、tape和pipe。其中,disk用于指硬盘文件作为备份
设备;tape用于指Microsoft Windows支持的任何磁带设备。pipe
是指使用命名管道备份设备。
[ @logicalname = ]‘logical_name’ :该参数指在BACKUP和
RESTORE语句中使用的备份设备的逻辑名称。logical_name的数据
类型为sysname,无默认值,且不能为NULL。
[ @physicalname = ]‘physical_name’ :该参数指备份设备的
物理名称。物理名称必须遵从操作系统文件名规则或者网络设备的
通用命名约定,并且必须包含完整路径。无默认值,且不能为NULL。
[ @cntrltype = ]‘controller_type’ :如果cntrltype的值是
2,则表示是磁盘;如果cntrltype值是5,则表示是磁带。
[ @devstatus = ]‘device_status’ :devicestatus如果是
noskip,表示读ANSI磁带头,如果是skip,表示跳过ANSI磁带头。
【例】创建一个名称为Test的备份设备
EXEC SP_ADDUMPDEVICE 'disk','Test','D:\test.bak'
当数据库备份设备创建完成后,根据做好的备份策略,进入数据库备份阶段
T-SQL方式
1、恢复模式
首先从数据库【恢复模式】说起,因为数据库如果恢复模式设置不正确,会导致数据无法还原。
恢复模式有三种:完整恢复模式,大容量日志恢复模式,简单恢复模式
1) 完整恢复模式。为默认恢复模式。它会完整记录下操作数据库的每一个步骤。使用完整恢复模式可以将整个数据库恢复到一个特定的时间点,这个时间点可以是最近一次可用的备份、一个特定的日期和时间或标记的事务。
2)大容量日志恢复模式。它是对完整恢复模式的补充。简单地说就是要对大容量操作进行最小日志记录,节省日志文件的空间(如导入数据、批量更新、SELECT INTO等操作时)。比如一次在数据库中插入数十万条记录时,在完整恢复模式下每一个插入记录的动作都会记录在日志中,使日志文件变得非常大,在大容量日志恢复模式下,只记录必要的操作,不记录所有日志,这样一来,可以大大提高数据库的性能,但是由于日志不完整,一旦出现问题,数据将可能无法恢复。因此,一般只有在需要进行大量数据操作时才将恢复模式改为大容量日志恢复模式,数据处理完毕之后,马上将恢复模式改回完整恢复模式。
3)简单恢复模式。在该模式下,数据库会自动把不活动的日志删除,因此简化了备份的还原,但因为没有事务日志备份,所以不能恢复到失败的时间点。通常,此模式只用于对数据库数据安全要求不太高的数据库。并且在该模式下,数据库只能做完整和差异备份。
2. 数据库备份模式
四种备份:完全备份,差异备份,事务日志备份,文件和文件组备份
1)完整备份:备份整个数据库的所有内容,包括事务日志。该备份类型需要比较大的存储空间来存储备份文件,备份时间也比较长,在还原数据时,也只要还原一个备份文件。
2) 差异备份:差异备份是完整备份的补充,只备份上次完整备份后更改的数据。相对于完整备份分来说,差异备份的数据量比完整数据备份小,备份的速度也比完整备份要快。因此,差异备份通常作为常用的备份方式。
3) 事务日志备份:事务日志备份只备份事务日志里的内容。事务日志记录了上一次完整备份或事务日志备份后数据库的所有变动过程。事务日志记录的是某一段时间内的数据库变动情况,因此在进行事务日志备份之前,必须要进行完整备份。
4) 文件和文件组备份。如果在创建数据库时,为数据库创建了多个数据库文件或文件组,可以使用该备份方式。