日期:2013-04-06  浏览次数:20592 次

在SQL Server 2000中,有无数种备份数据库的方法。无论你的数据库有多大、改变能否频繁,都有满足你的要求的备份策略。让我们看看几种可以在不同环境下任务的基本备份策略。

  本文假定你有备份数据库的权限。也就是说,你要么是系统管理员,要么是db_owner或者backupadministrator。还有,我们还假定你的操作系统提供了访问备份所需求的资源的权利,例如,访问磁盘或者磁带驱动器。

  从哪儿开始

  在你开始备份一个SQL Server数据库之前,你需求知道该数据库使用了哪个恢复模型。这里有三种不同的恢复模型:FULL、BULK_LOGGED和SIMPLE。

  FULL恢复模型向你提供了最大的恢复灵活性。新数据库默认使用的就是这种恢复模型。利用这种模型,你可以恢复数据库的一部分或者完全恢复。假设买卖记录(transactions log)还没有被破坏,你还可以在失败之前恢复出最后一次的已提交(committed)买卖。在所有的恢复模型中,这种模型使用了最多的买卖记录空间,并轻微影响了SQL Server的功用。

  BULK_LOGGED恢复模型比FULL模型少了一些恢复选项,但是进行批操作(bulk operation)时它不会严重影响功用。在进行某些批操作时,由于它只需记录操作的结果,因此它使用了较少的记录空间。然而,用这种模型,你不能恢复数据库中的特定标记,也不能仅仅恢复数据库的一部分。

  SIMPLE恢复模型是这三种模型中最容易实施的,它所占用的存储空间也最小。然而,你只能恢复出备份结束时辰的数据库。

  为了找出你所用数据库的恢复模型,可以运转下面的命令,该命令应该前往FULL、BULK_LOGGED和SIMPLE这三个值中的某一个:

  SELECT dbpropertyex("database", "recovery")

  为了改变数据库的恢复选项,运转下面的命令:

  ALTER DATABASE database name SET RECOVERY {FULL   SIMPLE   BULK_LOGGED}

  除数据之外,SQL Server备份还包括数据库大纲(schema)和数据库元数据(即数据库文件、文件组和它们的位置)。SQL Server允许在备份时用户仍然使用数据库,所以在备份期间发生的买卖也记录到备份中去了。

  备份数据库

  为了备份数据库,你可以运转BACKUP命令。(你也可以使用SQL Enterprise Manager。)在执行命令之前知道它的语法永远是个好主意。BACKUP命令有许多选项,它的基本语法是:


  BACKUP DATABASE { database_name }

  TO < backup_device >  


  backup_device可以是磁盘或者磁带——或者它也可以是一个用磁盘文件、磁带或者已命名管道表示的逻辑上的备份设备。

  如果你想做一个快速、一次性的备份,那么向下面那样使用磁盘文件:

  BACKUP DATABASE Northwind TO DISK = "c:\backup\Northwind.bak"

  如果你想把数据库备份到另外一台服务器上,可以使用UNC名字:

  BACKUP DATABASE Northwind TO DISK =\\FILESERVER\Shared\Backup\Northwind.bak


如果想进行有规律、有计划的备份,就需求使用逻辑备份设备。一个逻辑备份设备可以保存若干个数据库备份并驻留在磁盘、磁带或者已命名管道上。如果你使用磁带设备,磁带驱动器必须在同一台物理服务器上。已命名管道可以利用第三方备份软件。

  为了创建逻辑备份设备,使用sp_addumpdevice系统保存过程。SQL Enterprise Manager也可以用来创建备份设备。命令行语法如清单A所示。

  清单B给出了一个在磁盘上创建逻辑备份设备的例子。

当备份设备创建完毕,Northwind数据库可以用下面的命令进行备份:

  BACKUP DATABASE Northwind TO DiskBackup

  频繁变动的大数据库的备份

  如今,我曾经演示了如何备份整个数据库。然而,它只允许你恢复备份结束时辰的数据库所保存的数据。如果数据库很大并且频繁变动,由于时间和空间的限制,频繁进行全数据库备份是不理想的。当数据库失败时,可能会形成大量数据丢失。

  在这种情况下,有两种提高可恢复性的途径,这两个途径都要求全数据库备份。而且这两种方法都要求数据库恢复模型为FULL或者BULK_LOGGED。

  第一种方法采用差异数据库备份,它只捕获并保存全数据库备份后改变的数据。由于它的文件较小而且信息简明,用它进行数据恢复的速度非常快。

  下面的例子在一个名为DiffBackupDevice的逻辑备份设备上创建了一个差异备份:

  BACKUP DATABASE Northwind TO DiffBackupDevice WITH DIFFERENTIAL

  第二个提高可恢复性的方法利用买卖记录备份,恢复可以在一个特定的时间点上完成。

  你可能会问这怎样可能。记住,买卖记录的目的就是记录发生在数据库中所有买卖。买卖记录允许COMMIT和ROLLBACK正确任务。为了达到这个功用,该数据的变化前后的数值必须随同操作类型、买卖开始(时间)等一齐被记录下来。

  备份技巧

  利用下面的列出的技巧来确保你不会在每周一次的数据库备份过程中忘记关键步骤。

  每周一次备份主数据库。如果你创建、修正或者停止一个数据库,添加新的SQL Server音讯,添加或者停止连接服务器,或者添加记录设备,那就进行手工备份。

  每天备份一次msdb数据库。它普通非常小,但很重要,由于它包含了所有的SQL Server任务、操作和计划任务。

  只要当你修正它时,才有必要备份模型数据库。

  用SQL Server Agent来安排你的备份任务的时间表。

  如果在你的生产(production)环境中有现成资源,备份生产数据库到本地磁盘或者网络服务器(用同一个开关)。然后,把备份文件/设备拷贝到磁带上。在存在许多硬件毛病(特别是在RAID系统中)的情况下,磁盘常常是完好的(inact)。如果备份文件是在磁盘上,那么恢复时的速度会提高很多。

  备份开发和测试数据库至少要用到SIMPLE恢复模型。

  除了有计划的定时备份外,在进行未记录的(nonlogged)批操作(如,批拷贝)、创建索引、或者改变恢复模型后要备份用户数据库。

  如果你使用的是SIMPLE恢复模型,记住在截短(truncate)买卖记录之后备份你的数据库。

  用文档记录你的恢复步骤。至少要大概记录这些步骤,留意所有的重要文件的位置。

  在截短记录之前,也就是所有的已提交(committed)买卖从记录中清空之前,所有的这些信息都保存在买卖记录中。在SIMPLE恢复模型中,记录在一个CHECKPOINT期间内截短(