Javatpoint标志
Javatpoint标志

数据库管理系统中的恢复和原子性

介绍

使用DBMS(数据库管理系统)可以快速有效地监控、存储和更改数据。数据库具有原子性、一致性、隔离性和持久性等特性。系统保存数据和对数据所做更改的能力定义了它的持久性。数据库可能由于以下任何一种原因而失败:

  • 系统故障是由于系统中的硬件或软件问题造成的。
  • 当处理数据更新的某个进程无法完成时,就会出现事务失败。
  • 由于系统无法读取磁盘,可能会发生磁盘崩溃。
  • 物理损失包括停电或自然灾害等问题。
  • 数据库中的数据必须能够恢复到系统故障之前的状态,即使数据库系统故障也是如此。在这种情况下,使用DBMS中的数据库恢复过程来检索数据。

数据库管理系统中的恢复过程保证了数据库的原子性和持久性。如果系统在事务进行到一半时崩溃,并且丢失了所有数据,那么它就不被认为是持久的。如果在事务期间只更新数据的一部分,则不认为它是原子的。DBMS中的数据恢复过程确保数据始终是可恢复的,以保护持久性属性,并保留其状态,以保护原子属性。下面列出的过程用于从DBMS中恢复数据。

  • 基于日志的恢复。
  • 通过延迟更新进行恢复
  • 通过即时更新立即恢复

DBMS的原子性属性保护了数据状态。如果执行了数据修改,则必须完全完成操作,或者必须保持数据的状态,就好像操作从未发生过一样。这种特性可能会受到事务导致的DBMS故障的影响,但是DBMS恢复方法可以保护它。

什么是基于日志的恢复?

每个DBMS都有自己的系统日志,记录每个系统活动,并包括用于事件计时的时间戳。数据库为错误、查询和其他数据库更新等操作管理多个日志文件。日志保存的文件格式如下:

  • 结构[开始交易,T]表示事务T执行的开始。
  • [写项目,T, X,旧值,新值]表示事务T将变量X的值从旧值更改为新值。
  • [阅读项目,T, X]表示事务T读取X的值。
  • (提交,T)表示对数据的修改已经提交给数据库,事务不能再更新。提交数据库后不会出现任何错误。
  • (中止,T)表示事务T已被取消。

我们可以利用这些日志来查看事务期间数据的状态如何变化,并将其恢复到以前或新的状态。

undo操作可以检查[写项,T, X,旧值,新值]操作,恢复数据状态为旧数据。将数据的先前状态恢复到由于系统故障而丢失的新状态的唯一方法是执行[commit, T]操作。

考虑以下一系列事务:t1、t2、t3和t4。在第四个事务之后系统崩溃;但是,仍然可以在事务t1期间将数据检索到检查点建立之前的状态。

在将事务的所有记录写入日志后,将创建一个检查点,将所有日志从本地存储传输到永久存储,以供将来使用。

什么是认输更新方法?

在事务进入其最后阶段或在提交操作期间之前,不会使用让步更新机制更改数据。按照这个过程,数据被更新并永久地放在主存中。

在发生故障时,在整个过程中保存的日志用于确定故障的精确时刻。我们从中受益,因为即使系统在提交步骤之前崩溃,数据库的数据也不会被更改,并且状态得到了管理。如果系统在提交阶段之后失败,我们可以快速地在新阶段重做更改,而不是撤消过程。

许多数据库自动配置日志记录,但我们也可以手动配置它们。在MySQL终端配置登录MySQL数据库。

  • 创建一个变量来保存必须保存日志的日志文件(.log)的路径,
  • 配置日志文件格式。
  • 应该启用数据库的常规日志记录功能。
  • 系统现在监视所有数据库活动,并将其记录在general.log文件中。此设置保存在一般日志文件变量中,可以使用以下命令查看:

快速更新方法需要什么?

在快速更新策略中,在事务到达提交阶段之前并发地更新数据。一旦数据发生变化,日志也会被记录下来。

如果事务失败并且数据处于部分状态,则可以执行数据恢复活动。我们还可以使用SQL指令标记事务的状态,并将数据恢复到该状态。要完成此操作,请运行以下命令:

  • SAVEPOINT命令用于保存事务中数据的当前状态。该命令的语法为:
  • ROLLBACK命令将数据状态恢复到命令提供的保存点。该命令的语法是:

延迟更新和即时更新的区别是什么?

在DBMS中用于保存事务日志文件的数据库恢复方法包括延迟更新和快速更新。

使用延迟更新,一旦事务完成,数据库的数据状态不会立即改变;相反,更改被记录在日志文件中,并且一旦提交完成,数据库的状态就会更新。

在立即更新的每个事务中,数据库都直接更新,并且还保留了详细说明新旧值的日志文件。

延迟更新 立即更新
在事务期间不会立即应用对数据的更改。 事务一旦发生,就会在数据库中进行修改。
日志文件包含将要进行的更改。 日志文件包含更改以及新值和旧值。
这种方法使用缓冲和缓存。 此技术中使用了影子分页。
当系统出现故障时,恢复数据所需的时间会变长。 在事务期间,会执行大量的I/O活动来管理日志。
进行回滚时,将删除日志文件,并且不会对数据库进行任何更改。 执行回滚时,使用日志文件记录将数据恢复到以前的状态。

备份技术

备份是保存在另一个位置的数据库当前状态的副本。在系统因自然灾害或物理损害而被破坏时,这种备份是有益的。可以使用这些备份将数据库恢复到备份时的状态。备份技术有很多,包括以下几种:

  • 即时备份是保存在硬盘驱动器或其他存储设备中的副本。当磁盘出现故障或出现技术错误时,我们可以使用此信息来检索数据。
  • 归档备份是保存在大型存储系统或不同位置的云中数据库的副本。在自然灾害影响系统的情况下,使用这些工具来检索数据。

什么是事务日志?

事务日志用于跟踪更新了数据库中数据的所有事务。下面的方法用于从事务日志中恢复数据。

恢复管理器扫描所有日志文件,查找具有启动事务阶段但没有提交阶段的事务。

使用rollback命令和日志将上述事务回滚到以前的状态。

使用commit命令的事务对数据库进行了修改,这些修改被记录在日志中。这些修改也可以使用撤销功能来撤销。

什么是影子寻呼?

  • 在影子分页中,一个数据库被分成n多个页面,每个页面代表一个固定大小的磁盘内存。
  • 类似地,影子页(原始数据库的副本)也会被创建。
  • 在事务开始时将数据库状态复制到影子页。
  • 在事务期间,只会更改原始数据库,而不会更改影子页。
  • 当事务到达提交步骤时,对影子页进行更新。这样做的目的是,如果硬盘的第i部分发生变化,那么第i个影子页也会发生变化。
  • 如果系统发生故障,则在比较数据库的真实页面和影子页面后执行恢复过程。

在缓存/缓冲方法的逻辑内存中是一个称为DBMS缓冲区的缓冲区集合。在整个过程中,所有日志都保存在缓冲区中,一旦事务到达提交阶段,主日志文件就会更新。

原子性:

用于确保数据库事务完整性的一组思想被称为ACID模型,它代表数据库管理系统中的原子性、一致性、隔离性和持久性。

原子性主要是通过复杂的进程实现的,比如日志记录或日志记录,或者通过操作系统调用。

在数据库管理系统中,原子事务被定义为一系列不可分割且不可简化的数据库操作,其中要么发生一切,要么不发生任何事情。

原子性保证可以防止不完整的数据库更改,这可能会导致比简单地拒绝整个系列更多的问题。因此,没有其他数据库客户机能够查看该事务。在某个时刻,它还没有发生,但在另一个时刻,它已经完全发生了(或者如果事务正在进行中被取消,则不会发生任何更改)。

原子性的例子:

我们已经研究了原子性在关系数据库中的含义。让我们看一些示例,以便更好地理解原子性的概念。

例1:在线订票系统中的原子性:

以在线订票系统为例,订票可以由两个独立的行为组成,这两个行为结合起来构成交易:第一个是支付机票,第二个是为刚刚付款的人预订座位。根据业务逻辑,这两个不同且独立的操作必须同时发生。如果一个发展而没有另一个,就会出现问题。例如,系统可能会为两个不同的消费者保留相同的座位。

例2:发生在银行的交易(贷记或借记)。

如果Marino有一个50美元的账户a,他想付给Amanda 20美元,Amanda有一个50美元的账户B。账户B中已经有200美元的余额。当你向账户B存入20美元时,总共是220美元。

现在已经安排了两个程序。首先,马里诺想要发送的20美元将从他的账户A中借记,并贷记到账户B,即阿曼达的账户。初始借记事务成功,但随后的贷记过程失败。

结果,马里诺的账户a的价值下降到30美元,而阿曼达的账户价值保持不变,为200美元。

数据库管理系统中的恢复和原子性

因此,这不是原子事务。结果,马里诺的账户a的价值下降到30美元,而阿曼达的账户价值保持不变,为200美元。

结论:

  • 数据库系统中的故障可能是事务、系统或磁盘出现问题的结果。
  • DBMS中的恢复过程用于在数据的新状态丢失或系统中所有数据丢失时恢复数据。
  • 日志在数据库中用于保留操作记录,这些日志用于从数据库检索数据。
  • 日志具有一致的结构,从启动事务开始,以提交结束。
  • 不同的事务更新机制(如延迟即时更新)在不同的时间更新数据。为了恢复数据,将对这些修改进行不同的处理。
  • 为了确保所有数据库数据可以随时更改回来,使用检查点保存数据库的当前状态。
  • 数据库的当前状态由SAVEPOINT命令捕获,ROLLBACK TO命令将数据库返回到该点。
  • 备份用于保存数据的副本,以便在发生自然灾害时检索它。
  • 影子分页方法比较磁盘内存的两个副本来恢复数据。
  • 为了维护原子性,数据库管理系统中的所有事务性语句必须在所有条件下成功或失败,包括断电、故障和崩溃。
  • 例如,在汇款交易中,借记和贷记必须同时发生,或者根本不发生。
  • 完成原子事务的情况或环境决定了它的特征。
  • 确保原子性的数据库系统必须能够在为数据库供电的电源、软件或操作系统出现故障时继续工作。






Youtube 视频加入我们的Youtube频道:现在加入

反馈


帮助别人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


b .技术/马华






Baidu
map