Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9265916
  • 博文数量: 299
  • 博客积分: 9955
  • 博客等级: 中将
  • 技术积分: 4177
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-27 20:59
文章分类
文章存档

2015年(1)

2012年(2)

2011年(9)

2010年(47)

2009年(108)

2008年(132)

我的朋友

分类: Mysql/postgreSQL

2009-10-02 11:50:03

第11学时恢复数据
在通常情况下,数据库管理员不希望恢复数据库。这不是因为实际的恢复过程困难,而
是因为通常有许多与恢复数据库有关的其他压力。在数据库被恢复的过程中,任何用户都无
法使用该数据库,而且通常是因为该数据库中出现某种故障才需要恢复它。最好希望不必去
执行数据库恢复,但是也应该熟悉一下恢复过程的步骤和限制。你要意识到你的数据库难免
将会在某些地方出故障。
本学时的要点包括:
• 恢复概述
• 自动恢复
• 恢复数据库
• 恢复用户数据库
• 恢复系统数据库
11.1 恢复概述
确实会有两种不同的情况迫使你去执行一个数据库的恢复。执行数据库恢复的主要理由
是因为数据库或数据损坏。这损失可能是因为用户删除了数据库里的关键数据,或数据库文
件的实际损坏,以及服务器里硬盘驱动器丢失等情况。第二个理由可能是因维护任务或者数
据的远程处理从一个服务器向另一个服务器拷贝数据库。
恢复数据库是加载备份并应用事务日志重建数据库的过程。在应用事务日志之后,数据
库将恢复到上一次事务日志备份之前的状态。
在因为存储介质的损坏而导致数据库所在的文件损坏时,你只有替换硬盘然后再恢复数
据了。如果是因为恶意或无意地插入、更新或删除而导致数据的损坏或错误,可以简单地将
数据库恢复到损坏前的状态。
在恢复过程中,用户不能使用那些正被恢复的数据库。当数据库被恢复的时候,数据库
中所有数据将被恢复的数据替换掉。
当恢复事务日志备份时,你必须牢记一些关键因素。第一是在被恢复时,事务日志必须
按它们生成时的同样的次序加载。当该日志备份时, SQL Server在它们的文件上放置了时间
戳。在启动恢复进程时, SQL Server将检查时间戳,判断顺序是否正确。事务日志中的变动
将重新执行,所有其他的事务回滚。
事务日志能被恢复到指定的时间和日期。这被称为时间点修复。在该时间点后提交的所
有事务都被回滚。时间点修复仅应用于事务日志备份,且不能用于全数据库恢复或增量恢复。
在SQL Server 7.0中, 实际的数据库恢复处理已经有很大改进。最大的改进是当恢复数据
库时,不用采取与先前创建该数据库时相同的步骤去重建数据库。在SQL Server的早期版本
中,如果你有一个已经创建并随后扩大了几次的数据库,在恢复之前就不得不执行那些相同
的步骤。如果不这么做,最终你的数据库将损坏。在SQL Server 7.0中,你所必须做的只是恢
复备份,数据库将会替你创建好。
数据库恢复类型
到了真正要去恢复数据库的时候,你将有一些选项要选择。这些选项取决于你制作的数
据库备份的类型。下列是那些你能选用的恢复类型:
• 全数据库备份—全数据库备份是整个数据库的一个拷贝。该备份拷贝在一个文件里。
• 事务日志备份—事务日志备份包含了事务日志的拷贝,它包括数据库里所发生的每个
数据改动前后的映像。
• 增量数据库备份—增量数据库备份包含了自上次全数据库备份以来数据库中所有变化
的拷贝。
恢复进程依赖于数据库备份的类型不同而有所变化。通常,将先开始恢复最近的全数据
库备份,然后可恢复事务日志备份或增量备份。
11.2 自动恢复
在我们进一步探索恢复用户备份之前,我们需要讨论SQL Server的自动修复功能。自动
修复发生在每次SQL Server启动时,设计它是为了检查数据库是否有需要进行修复的地方。
正如我们前面提到的,不是所有对数据库的改变都在它们发生时就写入数据库。已经改
变的数据将被存储在缓存里,并且只在进行检查点处理时才被写入磁盘,该处理过程大约每
6 0秒发生一次。在检查点执行前如果系统崩溃或掉电,自动修复进程将检查事务日志以确保
所有事务全部完成或全不完成。
当一个事务开始时,并且在一些实际数据被修改前,向事务日志写入一行显示该事务已
经开始。所有发生的变化便登记在事务日志里。当事务完成了,终止事务行写入日志。起始
和终止记录显示SQL Server是如何界定事务的开始和结束的。
自动修复处理遍历每个数据库的事务日志,寻找事务的起始和终止记录,并与数据库中
的数据进行比较。在系统崩溃时未提交的事务被取消或回滚。当事务的起始和终止记录都在
事务日志里找到时,事务重新执行或前滚。
自动修复处理从m a s t e r数据库开始,然后到m o d e l数据库。当SQL Server创建新数据库时,
m o d e l数据库被用作模板。在m o d e l数据库修复后,自动修复处理清除t e m p d b数据库里的所有
对象。t e m p d b数据库是SQL Server格式化查询结果、创建临时表以及用于其他临时工作存储
需要的地方。接下来, m s d b数据库被修复,然后p u b s数据库被修复。m s d b数据库是S Q L
S e r v e r存储有关调度任务和这些任务完成信息的地方。p u b s数据库是用于试验和测试的小数据
库。如果服务器被设置成一个分发服务器,分发数据库紧跟着被修复。在系统数据库修复后,
用户数据库也被修复。在系统数据库修复后用户能登录服务器,但是他们在用户数据库没完
全修复之前还不能使用它们。
自动修复处理不能被关闭,但是有两个影响自动修复的配置选项。在自动修复处理过程中,
那些正在修复中的数据库的名称在SQL Enterprise Manager中变灰,旁边显示“ R e c o v e r i n g”
字样。修复标志选项决定了SQL Server在自动修复处理期间显示什么信息。修复间隔选项控制
SQL Server应该在修复数据库上花费的最多时间。在这里设置的值被SQL Server用于决定检查
点处理的频率。这些选项能用SQL Enterprise Manager或s p c o n f i g u r e存储过程来设置。
9 8 SQL Server 7 24学时教程
下载
11.3 恢复数据库
正如我们前面讲到的,当需要恢复一个数据库时,你必须按照它们生成的次序来恢复。
第一步是恢复最新的数据库备份。在恢复了这个全数据库备份以后,第二步将是按照它们生
成的次序恢复事务日志备份。如果也做了增量备份,可以恢复它来替代事务日志备份。重要
的是要记住恢复事务日志备份必须按照它们生成的先后次序进行。
备份的考虑事项
当你恢复数据库时,你应该考虑下列一些情况:
• 如果包含数据库本身的硬盘坏了,此时SQL Server仍在运行,可以使用N O T R U N C AT E
选项来备份该数据库的事务日志。这样无需SQL Server找到该数据库本身即可生成一个
事务日志的拷贝。接下来,在那个硬盘被替换以后,可以恢复数据库以及从前面备份处
理中得到的那个事务日志。
• 如果包含一个特定数据库事务日志的硬盘坏了, SQL Server将停止任何用户在该数据库
上的任何数据修改。为重建事务日志,所要做的是停下来重启SQL Server,这将使S Q L
S e r v e r重建一个新事务日志。
• 当试图恢复一个数据库时,该数据库不能被使用。
• 恢复完成后,在数据库备份时活动的且未完成的事务将回滚。已完成但未被写出的事务
将在恢复完成后前滚。
• 事务日志必须按照它们生成的先后次序恢复到服务器上。例如,你在子夜进行了全数据
库备份,之后每小时进行一次事务日志备份,那么你将不得不先恢复全数据库备份,再
恢复每个事务日志备份。如果因为覆盖了文件或坏的磁带而导致丢失事务日志备份,你
将被迫在该处停下来。
• 当进行恢复操作时,如果该数据库未出现,则诸如R E A D O N LY等大多数数据库选项将
被重置。
• 当恢复一个服务器上当前不存在的数据库时,必须选择“ Restore as Database”选项,
并且为新的数据库提供名称。这个我们稍后再详细讲。
• 当恢复一个数据库到与该数据库备份时不同的服务器上时,必须确保这两台服务器有相
同的字符集和排序规则。
• 可以恢复数据库文件到与它们的初始位置不同的地方。为此,必须选择“ R e s t o r e
Database Files As”选项并为该文件键入新的路径和名称。这个我们稍后再详细讲。
• 如果数据库恢复操作在能够完成之前停止了,你可以在它停下的地方使用R E S TA RT命
令继续恢复操作。
• 当SQL Server启动并因为硬件问题或文件损坏而无法访问数据库时,它将标记数据库为
挂起状态。这意味着没有用户可以访问数据库。大多数情况下,你将不得不删除数据库
并从备份中恢复。
11.4 恢复用户数据库
现在你知道了恢复数据库背后的一些理论,现在是看一下实际操作的时候了。恢复S Q L
S e r v e r数据库有两种主要的方法。这里你将学到的一种是通过SQL Enterprise Manager来做。
第11学时恢复数据9 9
下载
另一种方法是在SQL Query Analyzer中使用R E S TORE DATA B A S E命令。关于该方法的更多信
息请在SQL Server Books Online中搜索“R E S TORE DATA B A S E”。通过以下步骤,你可以在
SQL Enterprise Manager中恢复一个用户数据库:
1) 打开SQL Enterprise Manager并连接到你要创建该工作的服务器。
2) 点击数据库文件夹旁边的加号( + )。在你要恢复的数据库上按鼠标右键,选取“ A l l
Ta s k s”,接着点击“Restore Database”选项。此时,选取“ N o r t h w i n d”数据库。打开R e s t o r e
d a t a b a s e对话框的“ G e n e r a l”分页,如图11 - 1所示。
3) 从“G e n e r a l”分页,可以删除要恢复的数据库以及你有的任何选项。在该屏上你有的
主要选项是执行时间点恢复。要执行它,点击Point in time restore选项旁边的按钮。它允许你
选择时间点恢复要恢复到的日期和时间。
4) 从如图11 - 2所示的“O p t i o n s”分页,你可以选择恢复启动后SQL Server将要执行的选项,
还有用于数据库文件的可选的新路径和名称。如果试图移动数据库文件到不同的硬盘驱动器,
那么恢复数据库文件到非原始位置的其他地方有时会非常管用。
1 0 0 SQL Server 7 24学时教程
下载
图11-1 Restore database
对话框的“G e n e r a l”
分页
图11-2 Restore database
对话框的“O p t i o n s”
分页
5) 当你完成了这些选项,点击“ O K”按钮恢复数据库。这就开始恢复处理。你可以跟踪
恢复进度,如图11 - 3所示。
6) 当恢复完成后, SQL Server弹出一个对话框,告诉你恢复已经完成并且数据库可以使
用了。
现在你知道了如何恢复一个用户数据库,你还应该明白如何恢复系统数据库(假如它们也
损坏了)。
11.5 恢复系统数据库
除了m a s t e r数据库以外,恢复系统数据库的过程和恢复用户数据库非常相似。如果m a s t e r
数据库丢失了,你将无法启动SQL Server来恢复其他任何数据库。对于其他任何系统数据库,
你将能够按照我们前面刚刚讲到的恢复步骤同样处理。如果m a s t e r数据库损坏了,有两种选择:
第一种是已经备份了m a s t e r数据库,如果你确实做了备份,这实在是件好事。如果没有备份
m a s t e r数据库,只好选择重建m a s t e r数据库并重建数据库里的数据了。
11.5.1 恢复master数据库
正如前面提到的,当m a s t e r数据库丢失或损坏时, SQL Server将无法启动。为此,只好重
建一个新的m a s t e r数据库,接着从你的备份中恢复m a s t e r数据库。以下步骤教你新建一个
m a s t e r数据库。要记住所有其他系统数据库(包括m o d e l、m s d b以及分发数据库)也都要重建。
1) 从SQL Server安装光盘或从M S S Q L安装目录的B I N N子目录启动SQL Server安装程序。
安装程序启动后,点击“ C o n t i n u e”按钮。
2) 当重建过程开始时,选择你初次安装时用的字符集、排序规则和统一编码校验。如果
不选择与你初次安装服务器时相同的排序规则,将无法恢复m a s t e r数据库。还必须要确保你配
置的新的m a s t e r数据库和原先的m a s t e r数据库大小一样。
3) 当SQL Server 完成重建m a s t e r数据库后,它启动M S S Q L S e r v e r服务,打开S Q L
Enterprise Manager,使用无口令的s a帐号连接到服务器。
4) 添加备份设备,该设备要和你上次备份m a s t e r数据库的设备所在的位置、名称、类型
一致。
5) 从最近一次备份中恢复m a s t e r数据库。当m a s t e r数据库恢复后,你必须终止并重启S Q L
S e r v e r。
6) 重新应用自最新一次备份以来所发生的任何改变。
7) 恢复m s d b数据库或者重建你的所有任务和报警。你必须做这些工作,因为重建m a s t e r
数据库的处理破坏并重建了m s d b数据库。
第11学时恢复数据1 0 1
下载
图11-3 恢复过程中可以跟踪
恢复进度
11.5.2 修复master数据库
如果没有一个m a s t e r数据库的好的拷贝,或干脆什么拷贝也没有,将不得不用修复m a s t e r
数据库来替代恢复它。该处理比恢复要复杂。在该处理过程中,将重建m a s t e r数据库并重新关
联所有的用户数据库。在重建m a s t e r数据库之后,必须重建所有用户登录、数据库选项以及备
份设备。通常,要为可能出现这种情况而保留好资料,可以是脚本文件形式,也可以是打印
出的文档形式。如果你没有这些资料,唯一的选择只能是根据记忆来重建这些信息了,尽管
这不是最佳的选择。以下步骤教你修复服务器上的m a s t e r数据库以及所有用户数据库:
1) 运行SQL Server安装程序并按照前面所讲的方法重建m a s t e r数据库。
2) 重建所有的备份设备。
3) 恢复m o d e l、m s d b以及分发数据库。
4) 使用s p a t t a c h d b系统存储过程重新关联你的所有用户数据库。关于s p a t t a c h d b系统
存储过程的更多信息,请在SQL Server Books Online中搜索“s p a t t a c h d b”。
5) 使用SQL Enterprise Manager重新给数据库用户分配服务器登录I D。
6) 重置数据库选项,诸如Select Into/Bulk Copy。
7) 重新输入你所有的SQL Server设置信息,包括S Q L邮件的设置、安全性的设置以及内
存的设置。
11.6 课时小结
在本学时中,我们学习了恢复数据库。首先,我们学习了所有实际恢复处理的需求。接
着,我们学习了自动修复处理。然后,我们学习了恢复用户数据库。最后,我们学习了恢复
和修复m a s t e r数据库。
11.7 专家答疑
问题:在SQL Server早期的版本中,可以修复数据库中的单个表。在SQL Server 7.0中能
做到吗?
解答:SQL Server 7.0不允许你恢复单个表,你必须恢复整个数据库。
问题:在我已经备份了数据库之后,恢复数据库之前我还应该做些什么?
解答:你应该试着恢复该数据库到另外一个服务器或数据库上以保证你的备份确实可以
工作。
11.8 课外作业
这些思考题和练习题是供你加深理解用的。答案可以在附录“答案”中找到。
11.8.1 思考题
1) 恢复数据库的意思是什么?
2) 当恢复数据库的时候,用户们可以使用这些正在恢复的数据库吗?
3) 当恢复事务日志时,最主要的限制是什么?
4) 在实际恢复数据库以前必须采取与先前创建该数据库相同的方式去重建该数据库吗?
1 0 2 SQL Server 7 24学时教程
下载
5) 什么是自动修复?
6) 在数据库恢复之后,对于数据库中未完成的事务将发生什么?
7) 在恢复m a s t e r数据库之前,必须做什么来让SQL Server启动?
11.8.2 练习题
从你在第1 0学时“实施备份”中所做的备份里恢复出N o r t h w i n d数据库以及它的事务日志。
阅读(483) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~