SQL Server 灾难恢复
概述:
保护好数据,防止数据丢失是数据库管理员需要面临的最关键的问题之一。虽然系统中采取了各种措施来保障数据库的完整性和安全性,但是各种软硬件故障、病毒和误操作等事件的发生,仍会影响甚至破坏数据库,造成数据丢失。数据库管理系统提供了数据库备份和恢复的功能可以将数据库从错误的状态恢复到某一种正确的状态。
备份需要遵循两个简单规则:
一是尽早并且经常备份;
另一条规则就是,不要只备份到相同磁盘的一个文件中,应该确保在完全分离的位置(最好是远离工作场所)还有一个副本,以确保备份安全。
数据库备份就是创建完整数据库的副本,并将所有的数据项都复制到备份集,以便在数据库遭到破坏时能够恢复数据库。
数据库备份操作及对象
在备份数据库的时候,SQL Server 会执行如下操作。
l 将数据库所有的数据页写到备份介质上。
l 记录最早的事务日志记录的序列号。
l 把所有的错误日志记录写到备份介质上。
在SQL Server 系统中,只有获得许可的角色才可以备份数据,分别是以下几种。
l 固定的服务器角色sysadmin。
l 固定的数据库角色db_owner。
l 固定的数据库角色db_backupoperator。
当然,管理员也可以授权某些用户来执行备份工作。
SQL备份类型:
SQL Server2008 提供了4 种数据库备份类型:
(1)、完整数据库备份
完整数据库备份就是备份整个数据库。他备份数据库文件、这些文件的地址以及事务日志的某些部分(从备份开始时所记录的日志顺序号到备份结束时的日志顺序号)。这是任何备份策略中都要求完成的第一种备份类型,因为其他所有备份类型都依赖于完整备份。换句话说,如果没有执行完整备份,就无法执行差异备份和事务日志备份。虽然从单独一个完全数据库备份就可以恢复数据库,但是完全数据库与差异备份和日志备份相比,在备份的过程中需要花费更多的空间和时间,所以完全数据库备份不需要频繁的进行,如果只使用完全数据库备份,那么进行数据恢复时只能恢复到最后一次完全数据库备份时的状态,该状态之后的所有改变都将丢失。
(2)、差异数据库备份
差异备份是指将从最近一次完全数据库备份以后发生改变的数据。如果在完整备份后将某个文件添加至数据库,则下一个差异备份会包括该新文件。这样可以方便地备份数据库,而无须了解各个文件。例如,如果在星期一执行了完整备份,并在星期二执行了差异备份,那么该差异备份将记录自星期一的完整备份以来已发生的所有修改。而星期三的另一个差异备份将记录自星期一的完整备份以来已发生的所有修改。差异备份每做一次就会变得更大一些,但仍然比完整备份小,因此差异备份比完整备份快。
(3)、事务日志备份
尽管事务日志备份依赖于完整备份,但他并不备份数据库本身。这种类型的备份只记录事务日志的适当部分,明确地说,自从上一个事务以来已经发生了变化的部分。事务日志备份比完整数据库节省时间和空间,而且利用事务日志进行恢复时,可以指定恢复到某一个事务,比如可以将其恢复到某个破坏性操作执行的前一个事务,完整备份和差异备份则不能做到。但是与完整数据库备份和差异备份相比,用日志备份恢复数据库要花费较长的时间,这是因为日志备份仅仅存放日志信息,恢复时需要按照日志重新插入、修改或删除数据。所以,通常情况下,事务日志备份经常与完整备份和差异备份结合使用,比如,每周进行一次完整备份,每天进行一次差异备份,每小时进行一次日志备份。这样,最多只会丢失一个小时的数据。
(4)、文件组备份
当一个数据库很大时,对整个数据库进行备份可能会花很多的时间,这时可以采用文件和文件组备份,即对数据库中的部分文件或文件组进行备份。文件组是一种将数据库存放在多个文件上的方法,并允许控制数据库对象(比如表或视图)存储到这些文件当中的哪些文件上。这样,数据库就不会受到只存储在单个硬盘上的限制,而是可以分散到许多硬盘上,因而可以变得非常大。利用文件组备份,每次可以备份这些文件当中的一个或多个文件,而不是同时备份整个数据库。文件组还可以用来加快数据访问的速度,因为文件组允许将表存放在一个文件上,而将对应的索引存放在另一个文件上。尽管这么做可以加快数据访问的速度,但也会减慢备份
过程,因为必须将表和索引作为一个单元来备份。
注:为了使恢复的文件与数据库的其余部分保持一致,执行文件和文件组备份之后,必须执行事务日志备份。
SQL恢复方式:
SQL Server2008 包括3 种恢复模型,其中每种恢复模型都能够在数据库发生故障的时候恢复相关的数据。不同的恢复模型在SQL Server 备份、恢复的方式和性能方面存在差异,而且,采用不同的恢复模型对于避免数据损失的程度也不同。每个数据库必须选择三种恢复模型中的一种以确定备份数据库的备份方式。
(1)、简单恢复模型
对于小型数据库不经常更新数据的数据库,一般使用简单恢复模型。使用简单恢复模型可以将数据库恢复到上一次的备份。简单还原模型的优点在于日志的存储空间较小,能够提高磁盘的可用空间,而且也是最容易实现的模型。但是,使用简单恢复模型无法将数据库还原到故障点或特定的即时点。如果要还原到这些即时点,则必须使用完全恢复模型或大容量日志记录恢复模型。
(2)、完全恢复模型
当从被损坏的媒体中完全恢复数据有着最高优先级时,可以使用完全恢复模型。该模型使用数据库的复制和所有日志信息来还原数据库。SQL Server 可以记录数据库的所有更改,包括大容量操作和创建索引。如果日志文件本身没有损坏,则除了发生故障时正在进行的事务,SQL Server 可以还原所有的数据。
在完全恢复模型中,所有的事务都被记录下来,所以可以将数据库还原到任意时间点。SQL Server 2005 支持将命名标记插入到事务日志中的功能,可以将数据库还原到这个特定的标记。记录事务标记要占用日志空间,所以应该只对那些在数据库恢复策略中扮演重要角色的事务使用事务标记。该模型的主要问题是日志文件较大以及由此产生的较大的从存储量和性能开销。
(3)、大容量日志记录恢复模型
与完全恢复模型相似,大容量日志记录恢复模型使用数据库和日志备份来恢复数据库。该模型对某些大规模或者大容量数据操作(比如INSERT INTO、CREATE INDEX、大批量装载数据、处理大批量数据)时提供最佳性能和最少的日志使用空间。在这种模型下,日志只记录多个操作的最终结果,而并非存储操作的过程细节,所以日志尺寸更小,大批量操作的速度也更快。如果事务日志没有受到破坏,除了故障期间发生的事务以外,SQL Server能够还原全部数据,但是,由于使用最小日志的方式记录事务,所以不能恢复数据库到特定即时点。
注:在大容量日志恢复模式下,备份包含大容量日志操作的日志需要访问数据库中的所有数据文件。如果数据文件不可访问,则无法备份最后的事务日志,而且该日志中所有已提交的操作都会丢失。