Sql server数据库备份的三个恢复模型

来源:百度文库 编辑:神马文学网 时间:2024/04/29 06:59:43
  • Sql server数据库备份的三个恢复模型
  •  

    在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期间内截短(在SQL Server内存缓冲写道磁盘时),他是自动发生的,但也能手动执行。这也就是SIMPLE恢复模型不支持时间点(point-in-time)恢复的原因。在FULL和BULK_LOGGED恢复模型下,当交易记录被备份时,交易记录被截短,除非你明确指出不进行截短。

    为了备份交易记录,使用BACKUP LOG命令。其基本语法和BACKUP命令非常相似:

    BACKUP LOG { database } TO

    下面是怎么把交易记录备份到一个名为LogBackupDevice的逻辑设备上的例子:

    BACKUP TRANSACTION Northwind TO LogBackupDevice

    如果你不希望截短交易记录,使用NO_TRUNCATE选项,如下所示:

    BACKUP TRANSACTION Northwind TO LogBackupDevice WITH NO_TRUNCATE

    只是基本知识

    尽管我在本文中仅仅概述了数据库恢复的基本知识,你还是能通过这些技巧来找到正确的方向。那么,为了避免不必要的(丢失数据造成的)恐慌,你要做到每周备份主数据库,每天备份msdb。