理次要是为防止非法登录者或非授权用户对SQL Server 数据库或数据形成破坏,但在有些情况下这种安全管理机制显得力不从心。例如合法用户不小心对数据库数据做了不正确的操作或者保存数据库文件的磁盘遭到损坏或者运转SQL Server 的服务器因某种不可预见
的事情而导致崩溃。所以我们需求提出另外的方案即数据库的备份和恢复来处理这种问题。本章的次要目的就是引见备份、恢复的含
义,数据库备份的品种以及备份设备等基本的概念,以及如何创建备份和恢复数据库,使读者对其有全面的了解和认识,能够自主制定本人的备份和恢复计划。
15.1.1 备份和恢复 备份和恢复组件是SQL Server 的重要组成部分。备份就是指对SQL Server 数据库或事务日志进行拷贝,数据库备份记录了在进行备份这一操作时数据库中所无数据的形状,如果数据库因不测而损坏,这些备份文件将在数据库恢复时被用来恢复数据库。
由于SQL Server 支持在线,备份所以通常情况下可一边进行备份,一边进行其它操作,但是,在备份过程中不允许执行以下操作:
创建或删除数据库文件; 创建索引; 执行非日志操作; 自动或手工缩小数据库或数据库文件大小。 如果以上各种操作正在进行当中,且预备进行备份则备份,处理将被终止;如果在备份过程中,打算执行以上任何操作,则操作将失败而备份继续进行。
恢复就是把蒙受破坏或丢失数据或出现错误的数据库恢复到原来的正常形状,这一形状是由备份决定的,但是为了维护数据库的分歧性,在备份中未完成的事务并不进行恢复。
进行备份和恢复的任务次要是由数据库管理员来完成的。实际上数据库管理员日常比较重要、比较频繁的任务就是对数据库进行备份和恢复。
留意:如果在备份或恢复过程中发生中缀,则可以重新从中缀点开始执行备份或恢复。这在备份一个大型数据库时极有价值。
15.1.2 数据库备份的类型
在SQL Server 2000 中有四种备份类型,分别为; - 数据库备份(Database Backups)
- 事务日志备份(Transaction Log Backup)
- 差异备份(Differential Database Backups)
- 文件和文件组备份(File and File Group Backup)
下面我们将详细引见其所表述的内容,并涉及到一些使用时留意事项。
1 数据库备份(Database Backups)
数据库备份是指对数据库的完整备份,包括所有的数据以及数据库对象。实际上备份数据库过程就是首先将事务日志写到磁盘上,
然后依据事务创建相反的数据库和数据库对象以及拷贝数据的过程。由于是对数据库的完全备份,所以这种备份类型不只速度较慢,
而且将占用大量磁盘空间。正由于如此,在进行数据库备份时,常将其安排在晚间,由于此时整个数据库系统几乎不进行其它事务操作,从而可以提高数据库备份的速度。
在对数据库进行完全备份时,所有未完成的事务或者发生在备份过程中的事务都不会被备份。如果您使用数据库备份类型,
则从开始备份到开始恢复这段时间内发生的任何针对数据库的修正将无法恢复。所以我们总是在一定的要求或条件下才使用这种备份类型,比如: - 数据不是非常重要,虽然在备份之后恢复之前数据被修正,但这种修正是可以忍耐的;
- 通过批处理或其它方法,在数据库恢复之后可以很容易地重新实如今数据损坏前发生的修正;
- 数据库变化的频率不大。
在进行数据库备份时,如果您在备份完成之后又进行了事务日志备份,则在数据库备份过程中发生的事务将被备份:但若只进行数据库备份,常将数据库选项“trunc.log onchkpt” 设置为true, 这样每次在运转到检查点(checkpoint) 时,都会将事务日志截断。
留意:如果对数据分歧性要求较高(将数据库恢复到发生损坏的刻),则不应使用数据库备份。
2 事务日志备份(Transaction Log Backup)
事务日志备份是指对数据库发生的事务进行备份,包括从上次进行事务日志备份、差异备份和数据库完全备份之后,所有曾经完成的事务。在以下情况下我们常选择事务日志备份。 - 不允许在最近一次数据库备份之后发生数据丢失或损坏景象;
- 存储备份文件的磁盘空间很小或者留给进行备份操作的时间无限,例如兆字节级的数据库需求很大的磁盘空间和备份时间;
- 预备把数据库恢复到发生失败的前一点;
- 数据库变化较为频繁。
由于事务日志备份仅对数据库事务日志进行备份,所以其需求的磁盘空间和备份时间都比数据库备份(备份数据和事务)少得多,这是它的优点所在。正是基于此,我们在备份时常采用这样的策略,即每天进行一次数据库备份,而以一个或几个小时的频率备份事务日志。这样利用事务日志备份,我们就可以将数据库恢复到任意一个创建事务日志备份的时辰。
但是,创建事务日志备份却绝对比较复杂。由于在使用事务日志对数据库进行恢复操作时,还必须有一个完整的数据库备份,而且事务日志备份恢复时必需要按一定的顺序进行。比如在上周末对数据库进行了完整的数据库备份,在从周一到本周末的每一天都进行一次事务日志备份,那么若要打算对数据库进行恢复,则首先恢复数据库备份,然后按照顺序恢复从周一到本周末的事务日志备份。
有些时侯数据库事务日志会被中缀,例如数据库中执行了非日志操作(如创建索引、创建或删除数据库文件、自动或手工缩小数据库文件大小),此时应该立即创建数据库或差异备份,然后再进行事务日志备份。以前进行的事务日志备份也没有必要了。
3 差异备份(Differential Database Backups)
差异备份是指将最近一次数据库备份以来发生的数据变化备份起,来因此差异备份实际上是一种增量数据库备份。与完整数据库备份相比,差异备份由于备份的数据量较小,所以备份和恢复所用的时间较短。通过添加差异备份的备份次数,可以降低丢失数据的风险,将数据库恢复至进行最后一次差异备份的时辰,但是它无法像事务日志备份那样提供到失败点的无数据损失备份。
但在实际中为了最大限制地减少数据库恢复时间以及降低数据损失数量,我们常一同使用数据库备份、事务日志备份和差异备份,而采用的备份方案是这样的; - 首先有规律地进行数据库备份,比如每晚进行备份;
- 其次以较小的时间间隔进行差异备份,比如三个小时或四个小时;
- 最后在相临的两次差异备份之间进行事务日志备份,可以每二十或三十分钟一次。
这样在进行恢复时,我们可先恢复最近一次的数据库备份,接着进行差异备份,最后进行事务日志备份的恢复。
但是,在更多的情况下我们希望数据库能恢复到数据库失败那一时辰,那么我们该怎样做呢?下面的方法也许会有大协助。 - 首先如果能够访问数据库事务日志文件则应备份当前正处于活动形状的事务日志;
- 其次恢复最近一次数据库备份;
- 接着恢复最近一次差异备份;
- 最后按顺序恢复自差异备份以来进行的事务日志备份。
当然,如果无法备份当前数据库正在进行的事务,则只能把数据库恢复到最后一次事务日志备份的形状,而不是数据库失败点。
4 文件和文件组备份(File and File Group Backup)
文件或文件组备份是指对数据库文件或文件夹进行备份,但其不像完整的数据库备份那样同时也进行事务日志备份。使用该备份方法可提高数据库恢复的速度,由于其仅对遭到破坏的文件或文件组进行恢复。
但是在使用文件或文件组进