《数据库系统概论》课程学习(10)——第十章 数据库恢复技术

事务

事务的特性、事务故障及种类

事务的特性

  • 原子性:即事务中的操作要么都做,要么都有不做;
  • 一致性:即事务的结果必须使数据库从一致性状态变到一致性状态;
  • 隔离性:即并发执行各个事务之间不能互相干扰;
  • 持续性:即事务一旦提交,它对数据库中数据的改变就应该是永久性的。

事务故障:是指事务在运行至正常终止点前被终止。

常见故障大致可分为:

  • 1、事务内务故障:是指事务本身存在问题。如运算溢出、并发事务死锁、违反了某些完整性限制等。可以通过事务程序发现并处理;也可能是非预期的,需要DBMS或DBA来处理。
  • 2、系统故障:是指诸如CPU故障、操作系统故障、DBMS代码错误、系统断电等,系统需要重新启动。
  • 3、介质故障:是指数据库的物理存储介质出现问题,如磁盘损坏、外界强磁干扰等。
  • 4、计算机病毒:是指利用非正规程序更新数据库数据。
  • 5、自然灾害等:可视为介质故障。

故障示例

数据转储

数据恢复最常用的技术就是利用备份和日志

转储:指DBA将整个数据库文件复制到磁带或另一磁盘上保存起来的过程。

  • 备用的数据称为后备副本或后援副本。
  • 转储十分耗费时间和资源,不能频繁进行。DBA应确定适当的转储周期。
  • 静态转储:即系统中无运行事务时开始,转储期间不允许数据库更新。
  • 动态转储:即转储和用户事务并发执行,转储期间允许数据库更新。
  • 海量转储:即每次转储数据库的全部内容。
  • 增量转储:即每次只转储上一次转储后更新过的数据。
  • DBA应该制定适合的转储方式。

问题:若只有备份数据,当数据库数据发生灾难后,能恢复到什么程度呢?

日志及日志格式

日志的作用和登记

事务内部故障的恢复

恢复方法:利用日志文件撤消此事务已对数据库进行的修改。

事务故障的恢复由DBMS自动完成,一般不需要用户干预

具体过程:

  • 1、反向扫描文件日志(即从后向前扫描),查找该事务的更新操作;
  • 2、对该事务的更新操作执行逆操作;
  • 3、继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理;
  • 4、如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。

系统故障的恢复

系统故障造成数据库不一致状态的原因:

  • 未完成的事务对数据库的更新可能已写入数据库;
  • 已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。

系统故障的恢复是由系统重新启动时DBMS自动完成,一般不需要用户干预

恢复方法:

  • 1、正向扫描日志文件(即从头扫描)。① 将既有事务开始,又有事务结束标志的已提交事务放至重做队列;② 将只有事务开始,而无事务结束标志的事务放至撤销队列。
  • 2、对撤销队列中的事务进行撤销处理,即将日志记录中“更新前的值”写入数据库。
  • 3、对重做队列中的事务进行重做处理,即将日志记录中“更新后的值”写入数据库。

问题:这种恢复策略有什么问题吗?

具有检查点的恢复技术

利用检查点的恢复策略图示

利用检查点的恢复策略

此时,维护日志文件的方法是周期性地执行下列操作:

  • 1、将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上;
  • 2、在日志文件中写入一个检查点记录;
  • 3、将当前数据缓冲区的所有数据记录写入磁盘的数据库中;
  • 4、把检查点记录在日志文件中的地址写入一个重新开始文件。

利用检查点的恢复策略:

  • 1、从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录;
  • 2、由该检查点记录得到检查点建立时刻所有正在执行的事务清单A_LIST;
  • 3、建立两个事务队列:UNDO_LIST队列和REDO_LIST队列;
  • 4、将A_LIST暂时放入UNDO_LIST队列,REDO队列暂为空;
  • 5、从检查点开始正向扫描日志文件,直到日志文件结束,如有新开始的事务Ti,则将Ti暂时放入UNDO_LIST队列;如有已经提交的事务Tj,把Tj从UNDO_LIST队列移到REDO_LIST队列;
  • 6、对UNDO_LIST队列中的每个事务执行撤销操作;
  • 7、对REDO_LIST队列中的每个事务执行重做操作。

介质故障的恢复

介质故障的恢复需要DBA介入。

  • DBA需重装转储的数据库副本和有关的各日志文件副本;
  • 然后执行恢复命令,具体的由DBMS完成。

恢复方法:

1、 装入最新的后备数据库副本。

  • 对静态转储的数据库副本,装入后数据库即处于一致性状态;
  • 对动态转储的数据库副本,还须装入转储开始时刻的日志文件副本。

2、 装入相应的日志文件副本,重做已完成的事务。

数据库镜像

数据库镜像的其它应用

SQL Server中显示定义事务

SQL Server事务的提交与回滚

SQL Server数据库备份

SQL Server数据库备份示例

完整备份MYDB数据库,备份文件命名为MYDB_FULL_110325_1402.bak。

begin transaction ins_13 with mark 'insert 13'
insert into student(sno,sname) values('13', 'aaa')
save transaction ins_point_14
insert into student(sno,sname) values('14', 'bbb')
commit transaction ins_13

异备份MYDB数据库,备份文件命名为MYDB_DIFF_110325_1408.bak。

begin transaction ins_17 with mark 'insert 17' 
insert into student(sno,sname) values('17', 'ccc')
commit transaction ins_17

备份MYDB数据库日志,备份文件命名为MYDB_LOG_110325_1412.bak。

insert into student(sno,sname) values('18', 'ddd') 

SQL Server数据库还原

一般只有在数据库存储介质损坏,更换了新存储介质时才需要还原数据库

  • 1、若数据库正在进行使用,则不可进行还原;
  • 2、还原之前必须要进行事务日志的备份;
  • 3、还原数据库时必须严格按照备份的时间顺序进行;
  • 4、可将数据库还原至任意的状态点。这里的状态点可以由时间来指定,也可以由日志备份中的事务来指定,即还原至某一事务点之前的状态;
  • 5、若需将数据库直接还原至故障点,则利用全部备份直接还原即可。

若需将数据库还原至某时间点或某事务点处的状态,一般方法如下:

  • 1、开始还原时不必指定相应的日志文件,且在“选项”的“恢复状态”中选择“不对数据库执行任何操作,不回滚未提交的事务。可以还原其他事务日志”,然后进行还原。之后,数据库处于“正在还原”状态;
  • 2、然后再进行日志还原,需要相应的日志备份文件,指定还原的“时间点”或“选择事务点”,进行日志还原。

SQL Server日志内容的查看

SQL Server本身并没有提供该功能,需要使用第三方工具来完成

推荐一个 Log Explorer 工具。

主要应用:

  • 1、若出现了某个误更新操作,且不清楚了该误操作的全部数据内容,可通过查看日志了解,并恢复数据;
  • 2、了解数据库都做了哪些更新操作;
  • 3、主动恢复数据库中某些更新数据,而不需要进行还原,也不需要暂停数据库的使用,甚至也没有时间顺序的要求。这一点是数据库还原功能无法做到的。

设置 SQL Server 备份计划

创建维护计划有两种:使用向导,也可以使用设计图面自行创建维护计划。

  • 向导是创建基本维护计划的最佳方法;
  • 使用设计图面创建计划允许您使用增强的工作流;
  • 该功能需要启动SQL Server代理服务;
  • 用户通过Windows身份验证进行连接;
  • 在对象资源管理器中,选择“管理”。

例如:可制定每天定期对MYDB数据库进行差异备份和日志备份的维护计划。

SQL Server 数据库镜像

SQL Server 镜像相关概念

  • 镜像包含一个数据库的两个副本,两个副本通常驻留在不同的计算机上。 在任何给定的时间,客户端当前都只能使用一个数据库副本。此副本称为“主体数据库”。
  • 客户端对主体数据库进行的更新被镜像到数据库的另一副本,该副本称为“镜像数据库”。
  • 主体数据库和镜像数据库必须驻留在独立的服务器实例上。
  • 两个服务器实例在“数据库镜像会话”中作为“伙伴”进行通信和协作。
  • 两个伙伴在会话中扮演互补的角色:“主体角色”和“镜像角色”。
  • 在某一时刻,都是一个伙伴扮演主体角色,另一个伙伴扮演镜像角色。
  • 拥有主体角色的伙伴称为“主体服务器”,其数据库副本为当前的主体数据库。
  • 拥有镜像角色的伙伴称为“镜像服务器”,其数据库副本为当前的镜像数据库。

SQL Server 镜像结构

SQL Server 镜像原理

在正常工作时,数据库中的每一次更新都记录日志,并存放在内存中的数据库日志缓冲区。当主服务器将主数据库的日志缓冲区写入磁盘的同时,也同步将这些日志发送到镜像服务器。镜像服务器将日志记录,放入镜像数据库的日志缓冲区,然后将它们写到磁盘。接着镜像服务器会重新执行日志记录,从而复制了发生在主数据库上的数据改变。镜像服务器数据库,平时是不能访问的,一旦主服务器数据库出现故障,手动或自动快速转移到镜像服务器,将其转换为主服务器,替代原来有故障的服务器。

问题:你从这里分析出什么了?

SQL Server 镜像运行模式

高可用模式:正常工作时,至少有两台数据库服务器构成伙伴,实现同步事务写入,一旦主服务器发生故障,在很短时间内,将自动转移到镜像数据库,并进行故障恢复。这种操作模式,要用到见证服务器。见证服务器能启动自动故障转移,当主服务器突然出现故障,如果镜像服务器通过见证服务器确认了主服务器的故障,那么它就自动承担主服务器角色,并且和见证服务器构成伙伴,并在几秒钟之内就可以向用户提供数据库服务。

高保护模式:这种操作模式也支持两台服务器上同步事务写入,由于没有见证服务器,主服务器发生故障,一台镜像服务器不能形成伙伴,故不能实现自动故障转移。

高性能模式:这种操作模式下,两台服务器上的日志传递方式是异步的,因此在性能上有所提高。镜像服务器不能保证在任何时刻,都将主服务器事务日志的内容写到镜像服务器上。由于没有见证服务器,故不能实现自动故障转移。

SQL Server 镜像相关要求

  • 对于SQL Server2005必须安装SQLServer2005SP2-KB921896-x86-CHS.exe 补丁;
  • 每个服务器计算机名中必须配有DNS后缀;(我的电脑→属性→计算机名→更改→其他)
  • 每台服务器上SQL Server实例在外围应用配置器中的“远程连接”中开放允许通过TCP/IP和named pipes访问数据库;(开始→Microsoft SQL Server 2005→配置工具→SQL Server外围应用配置器)
  • 若主体服务器与镜像服务器在同一台计算机上,则主体数据库、镜像数据库以及见证服务器必须运行在不同的SQL Server实例上;
  • 在每个SQL Server实例中执行 dbcc traceon(1400,-1);
  • 主体数据库的恢复模式必须使用完整模式;
  • 主体数据库与镜像数据库必须同名。

SQL Server 镜像一般过程

1、在主体服务器上创建主体数据库,并将其进行完整备份。

2、利用该备份文件在镜像服务器中进行恢复,形成镜像数据库。

  • 恢复时必须使用NORECOVERY参数;
  • 主体数据库和镜像数据库必须同名;
  • 若在同一台计算机上配置镜像,恢复时要注意修改镜像数据库路径。

3、在主体服务器上对主体数据库进行镜像。

  • 即右键单击主体数据库,选择“任务”,再选择“镜像”;
  • 在出现的“数据库属性”对话框中选择“配置安全性”;
  • 按提示逐步完成即可。

注意:每次镜像时(包括重新镜像)都必须首先保证主体数据库和镜像数据库数据的一致后,才可以开始镜像

SQL Server 镜像的验证

SQL Server 镜像数据库强行还原

发布了593 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_34573534/article/details/105148729
今日推荐