理解数据库事务的用处

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【5月更文挑战第18天】数据库事务确保数据ACID特性,即原子性、一致性、隔离性和持久性。事务控制通过原子性保证操作全做或全不做,一致性维护数据完整性,隔离性防止并发问题,持久性确保提交后变更永久。事务故障恢复通过逆操作撤销,系统故障恢复在重启时自动重做或撤销事务。介质故障和病毒破坏需结合备份和日志恢复。检查点技术加速恢复,记录检查点时的事务清单和日志地址。

1 简介

数据库事务是指一个逻辑工作单元中执行的一系列操作,要么完全地执行,要么完全地不执行.并发控制使用锁技术,如X封锁(写锁)和S封锁(读锁)。备份分为物理(冷备、热备)和逻辑备份。

question_ans.png

它具有如下特征: (原子性、一致性、隔离性、持久性),或称(ACID),由 Andreas Reuter 于 1983 年提出。

它是数据库管理系统(DBMS)中的一个概念,它标识了一组用于保证数据库可靠性的标准属性。

如Mysql其常见级别为:

脏读:读到了还未提交事务的数据。

幻读:两次事务读到的数据不一致。中间有新事务提交。

不可重复读:一次事务中不允许多次读,会发生数据不一致。中间有新事务提交

序列化事务:序列化处理数据事务。 A事务未提交,B事务就等待。 直到失败

2 数据库事务控制功能

事务控制 ACID

  • 原子性 Atomicity

操作序列要么全做,要么全不做。

  • 一致性 Consistency

数据库从一个一致性状态变到另一个一致性状态。
在事务开始之前和事务结束之后,数据完整性没有被破坏。

  • 隔离性 Isolation

不能被其他事务干扰
防止多个事务并发执行时由于交叉执行而导致数据不一致。
根据事务的隔离程度可分为不同级别。

  • 持续性(永久性) Durabbility

分布式架构可以提高持久行。可靠性

一旦提交,永久改变。
事务处理结束后,即使系统故障也不会丢失数据,使用分布式存储方案可以提高持久行。

3 并发控制

主要使用锁技术。

  • 排他型封锁 X封锁,写锁

如果某个事务D对数据A(这个A可以为数据项,记录,数据集,整个数据库)实现X封锁,

那么只允许该事务D读取和修改数级A,其他事务要等事务D解除X封锁以后,

才能对数级A实现任何类型的封锁,所以X封锁只允许一个事务独占某个数据,具有排他型。

  • 共享型封锁 S封锁,读锁

X 封锁只允许一个事务独占数据,要求太严格,需要适当放宽,

例如可以允许并发读,但是不允许修改,这就是S封锁的作用。

S封锁的含义是:如果事务T对数据A实现了S封锁,那么云物事务T读取数据A,

但是不能修改数据A,在所有S封锁解除之前不允许任何事务对数据A实现X封锁。

4 备份

数据库备份安装不同方式可以分为多种,

按备份内容分为:物理备份,逻辑备份。

物理备份是在操作系统层面对数据库文件进行备份,又分为冷备份和热备份。

            冷备份是关闭数据库进行备份,
            热备份是使用备份软件不关闭数据库进行备份。

物理备份通常将 完全备份,增量备份,差异备份三个方式结合使用。

        完全备份: 将数据库内容全部备份,需时较长
        增量备份:只备份上次完全,增量和差异备份之后修改的数据
        差异备份:备份自上次完全备份后发生变化数据。

逻辑备份是利用DBMS自带的工具软件备份和恢复数据库内容。

5 事务故障的恢复。

事务故障是指事务未允许至正常终止点前被撤销,这时恢复子系统应对此事务做撤销处理。

事务故障的恢复是由系统自动完成的,不需要用户干预。步骤如下:

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

6 系统故障的恢复

系统故障发生时,造成数据库不一致状态的原因有两个,一是由于一些未完成的事务对数据库的更新写入数据库。

二是由于一些已经提交的事务对数据库的更新还留在缓冲区没来得及写入数据库。系统故障的恢复是在重新启动时自动完成的,不需要用户干预,步骤如下:

    1 正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识计入重做Redo 队列。
    同时找出故障发生时尚未完成的事务,将事务标识计入Undo队列
    2 对撤销队列的各个事务进行撤销处理:反向扫描日志文件,对每个Undo事务的更新操作执行逆操作。
    3 对重做队列的各个事务进行重做处理:正向扫描日志文件,对每个Redo事务重新执行日志文件等级操作。

介质故障和病毒破坏的恢复

在发生介质故障和遭病毒破坏时,磁盘的物理数据库被破坏,这时的恢复操作分为三步:

1 装入最新数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。

2 从故障点开始反向读取日志文件,找出已经提交事务标识将其计入重做队列。

3 从起始点开始正向阅读日志文件,根据重做队列的记录,重做已完成事务,将数据库恢复至故障前某一时刻的一致状态。

7 具有检查点的恢复技术。 检查点记录的内容可包括

1 建立检查点时刻所有正在执行的事务清单

2 这些事务最近一个日志记录的地址。采用检查点恢复步骤如下

3 找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中最后一个检查点记录

4 由该检查点记录得到检查点建立时所有正在执行的事务清单队列 A

5 建立重做队列 R 和撤销队列 U,把A队列放入U队列,R队列为空。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
2月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
2天前
|
SQL 存储 Java
数据库———事务及bug的解决
事务的一些概念,并发事务以及并发事务引起的bug,脏读,不可重复读,幻读,数据库中的隔离级别,事务的简单应用
|
4月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
2月前
|
数据库
什么是数据库的事务隔离级别,有什么作用
【10月更文挑战第21】什么是数据库的事务隔离级别,有什么作用
26 3
|
2月前
|
存储 关系型数据库 数据挖掘
什么是数据库的事务隔离级别
【10月更文挑战第21】什么是数据库的事务隔离级别
39 1
|
2月前
|
存储 数据库 数据库管理
数据库事务安全性控制如何实现呢
【10月更文挑战第15天】数据库事务安全性控制如何实现呢
|
2月前
|
存储 数据库 数据库管理
什么是数据库事务安全性控制
【10月更文挑战第15天】什么是数据库事务安全性控制
|
2月前
|
供应链 数据库
数据库事务安全性控制有什么应用场景吗
【10月更文挑战第15天】数据库事务安全性控制有什么应用场景吗