在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 <backup device>
下面是如何把交易记录备份到一个名为LogBackupDevice的逻辑设备上的例子:
BACKUP TRANSACTION Northwind TO LogBackupDevice
如果你不希望截短交易记录,使用NO_TRUNCATE选项,如下所示:
BACKUP TRANSACTION Northwind TO LogBackupDevice WITH NO_TRUNCATE

只是基本知识

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

职场 SQL Server

0

分享

微博 QQ 微信

收藏

下一篇:爱与喜欢的区别
zhuzhongwei

14篇文章,1W+人气,0粉丝

转载于:https://blog.51cto.com/zhuzhongwei/47114

SQL Server备份的三个恢复模型相关推荐

  1. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式...

    SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式 这篇文章主要介绍了SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式,需 ...

  2. SQL Server数据库的三种恢复模式

    SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式. sql server数据库提供了三种恢复模式:完整,简单和大容量日志,这些模式决定了sql server如何 ...

  3. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式

    这篇文章主要介绍了SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式,需要的朋友可以参考下 如何图形界面下修改恢复模式 找到你想修改的数据库 右键 > 属性 ...

  4. SQL数据库恢复后出现对象名无效(SQL Server备份还原时造成孤立用户的解决方案

    SQL数据库恢复后出现对象名无效(SQL Server备份还原时造成孤立用户的解决方案) 2011-04-18 09:38 以碰到这个烦人的问题,恢复的时候自带了个用户,但怎么也删除不掉,select ...

  5. oracle ola_Ola HallengrenSQL Server维护解决方案–安装和SQL Server备份解决方案

    oracle ola Database administrators tend to use various scripts or applications, to make the daily SQ ...

  6. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇 http://www.cnblogs.com/lyhabc/p/4678330.html 第二篇 http: ...

  7. php删除sql server 2008,MSSQL_SQL Server2008 数据库误删除数据的恢复方法分享,SQL Server中误删除数据的恢复本 - phpStudy...

    SQL Server2008 数据库误删除数据的恢复方法分享 SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的 ...

  8. SQL Server数据库没有LDF 的恢复

    SQL Server数据库没有LDF 的恢复 由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了. 如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_a ...

  9. SQL点滴12—SQL Server备份还原数据库中的小把戏

    原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息"is formatted to support  1 media fami ...

最新文章

  1. 怎么将两个list集合按照条件合成一个list
  2. oracle变态错误解决:ORA-00604: 递归 SQL 级别 2 出现错误
  3. Mysql 5.5 源码安装
  4. Radare - 逆向工程框架
  5. jMeter CSV Data set config 的 sharing mode 和 Thread group loop 配合使用
  6. 计算机管理ap,如何设置AC功能管理无线AP
  7. c语言int a什么意思,问一下吧里大神 int a = a; 这么定义是什么意思?
  8. mysql库与oracle库的区别_开源数据库Oracle与MySQL的SQL语法区别
  9. STL vector的迭代器的熟练运用及lower_bound和upper_bound的使用
  10. 2013B题碎纸片拼接
  11. testbench实例 vhdl_FPGA仿真 test bench实例(VHDL)
  12. 格兰杰因果检验_R实现
  13. VS技巧 使用Visual Studio Icon Patcher将2010的图片注入到2012中
  14. 会议论文有影响因子吗_会议论文和期刊论文的区别
  15. 手把手教你安装黑苹果之openCore-0.6.3 EFI制作全过程,非常详细
  16. Shell判断路径是否存在
  17. 用FPGA产生正弦信号
  18. 知乎300万人围观:我为公司挣了17万,工资只有8千块,该辞职吗?
  19. Axure RP 9母版使用说明【教程二】
  20. PAKDD2020:阿里巴巴算法大赛中的得与失

热门文章

  1. dgl库之高级用法dgl.DGLGraph.update_all
  2. anaconda pip install torch报错,安装失败
  3. 使用Android Studio的时候如何查看开发文档,API文档,doc文档,SDK文档
  4. 当世界模型被用于sim2real:机器人通过视觉想象和交互尝试来学习
  5. 欢迎参加“城市大脑与应急管理”专家研讨会
  6. 这5个数学猜想最早在30年前提出,如今AI证明它们都错了
  7. 宇宙是一个无始无终的循环?
  8. Nature重磅发现:神经活动影响人类寿命!
  9. 汽车与智能家居互联时代 语音控制很关键
  10. 2018人工智能前沿报告:深度学习的应用和价值