专栏首页云霄雨霁数据库事务总结

数据库事务总结

食事务基本概念

事务是构成单一逻辑工作单元的操作集合,要么完整的执行,要么完全不执行。在程序中,事务以 BEGIN TRANSTATION语句开始,以COMMIT语句或ROLLBACK语句结束。

事务的ACID性质:

  • A:原子性    一个事务是一个不可分割的逻辑单元
  • C:一致性    数据不会因事物的执行而遭到破坏
  • I:隔离性     多个事务并发执行,保证结果正确
  • D:持久性    事务执行后,他对数据库的更新要永久反映到数据库中

事务的状态变迁图:

活动状态:在事务开始执行后,立即进入“活动状态”。在活动状态事务将执行对数据库的读写操作。

局部提交状态:事务最后一个语句执行完成后,进入局部提交状态。事务执行完了,但对事务的修改很可能还留在内存的系统缓存区中,所以还不能说事务真正结束。

失败状态:处于活动状态的事务还没到达最后一个语句就终止执行,此时就称事务进入失败状态。或者处于局部提交状态的事务遇到故障(如发生干扰,或未能完成对数据库的修改),也进入失败状态。

异常终止状态:处于失败状态的事务,很可能已经对磁盘中的数据进行了一部分的修改。为保证事务的原子性,应该撤销该事务已经对数据库的修改。

提交状态:食物进入局部提交状态后,并发控制系统将检查该事务与并发事务是否发生干扰现象。检查通过后,系统提交操作,将修改内容写到磁盘上。事务成功结束。

数据库恢复:

数据库恢复的具体实现方法如下:

平时做好两件事:转储和建立日志。

  1. 周期地对整个数据库进行复制,转储到另一个磁盘等存储介质中。
  2. 建立日志数据库。记录日志的开始、结束标志,记录事务对数据库的每一次插入、删除和修改后的值,写到日志库中,以便有案可查。

一旦发生故障,分两种情况处理:

  1. 如果数据库遇到灾难性故障,比如磁盘损坏等,这是数据库已经不能再用了,应该装入最近备份的数据库,并利用日志重做已提交的事务。
  2. 如果只是破坏了数据库的一致性,只要利用日志库撤销所有不可靠的修改,再利用日志重做相关日志即可。

故障类型和恢复方法:

1、事务故障

事务故障可分为两种:可预期故障和非预期故障。

  • 可预期故障:即在程序中可以预先估计到的错误。例如:存款余额透支等。这种情况可以在事务代码中添加判断和回滚语句。
  • 非预期故障:例如:运算溢出、数据错误,发生死锁等。这种情况系统直接对事务进行UNDO(撤销)处理。

2、系统故障

引起系统停止运转随之要求重新启动的事件称为系统故障。例如硬件故障、软件错误或掉电等几种情况。系统故障会影响正在运行的所有事务,但不破坏数据库。恢复办法是重新启动,重新启动时需要对非正常终止的事务进行处理,把数据库恢复到正确的状态。

重新启动时,具体处理分两种情况:

  • 对未完成的事务做UNDO(撤销)处理
  • 对已提交事务但更新还停留在缓冲区的事务进行REDO(重做)处理

3、介质故障

在发生介质故障或遭到病毒破坏时,磁盘上的数据库遭到毁灭性的破坏。此时恢复过程如下:

  1. 重装最近转储的后备副本到新的磁盘,使数据库恢复到转储时的一致状态。
  2. 在日志中找出最近转储以后所有提交的事务。
  3. 对这些事务进行REDO处理,将数据库恢复到故障前一刻的一致性状态。

实际中,系统故障称为软故障,介质故障称为硬故障。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库的并发控制总结

    SuperHeroes
  • Java--JDBC总结

    SuperHeroes
  • 排序算法类模板

    SuperHeroes
  • 数据库期末复习---简答题整理

    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

    TrueDei
  • 干货!Hibernate事务and并发问题处理

    1.事务介绍: 1.1.事务的定义: 事务就是指作为单个逻辑工作单元执行的一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性。...

    企鹅号小编
  • 【面经】面试官问我:数据库中事务的隔离级别有哪些?各自有什么特点?然而。。。

    作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了...

    冰河
  • 数据库事务特征、数据库隔离级别,以及各级别数据库加锁情况(含实操)--read uncommitted篇

    1.read uncommited--读未提交前置条件: 1.开启两个 mysql 客户端终端

    用户1081422
  • 数据库事务ACID特性

      原子性是指事务包含的所有操作要么全部执行成功,否则失败回滚,回到未执行事务前的状态。

    用户2038589
  • 数据库事务处理与资源池

    描述:事务只是针对连接连接对象,如果再开一个连接对象,那么那是默认的提交(注意: 事务是会自动提交的)。

    WeiyiGeek
  • java中的lastIndexOf( )函数是什么意思

    String中的lastIndexOf方法,是获取要搜索的字符、字符串最后次出现的位置。

    黑泽君

扫码关注云+社区

领取腾讯云代金券