使用数据库事务操作大体量数据
1 简介
当一个操作可能影响多个数据操作时,事务的作用就出现了。
数据库事务是指一个逻辑工作单元中执行的一系列操作,要么完全地执行,要么完全地不执行.
它具有如下特征: (原子性、一致性、隔离性、持久性),或称(ACID),由 Andreas Reuter 于 1983 年提出。
它是数据库管理系统(DBMS)中的一个概念,它标识了一组用于保证数据库可靠性的标准属性。
如Mysql其常见级别为:
脏读:读到了还未提交事务的数据。
幻读:两次事务读到的数据不一致。中间有新事务提交。
不可重复读:一次事务中不允许多次读,会发生数据不一致。中间有新事务提交
序列化事务:序列化处理数据事务。 A事务未提交,B事务就等待。 直到失败
2 数据库事务控制功能
2.1 事务控制 ACID
- 原子性 Atomicity
操作序列要么全做,要么全不做。
- 一致性 Consistency
数据库从一个一致性状态变到另一个一致性状态。
在事务开始之前和事务结束之后,数据完整性没有被破坏。
- 隔离性 Isolation
不能被其他事务干扰
防止多个事务并发执行时由于交叉执行而导致数据不一致。
根据事务的隔离程度可分为不同级别。
- 持续性(永久性) Durabbility
分布式架构可以提高持久行。可靠性
一旦提交,永久改变。
事务处理结束后,即使系统故障也不会丢失数据,使用分布式存储方案可以提高持久行。
2.2 并发控制
主要使用锁技术。
2.2.1 排他型封锁 X封锁,写锁
如果某个事务D对数据A(这个A可以为数据项,记录,数据集,整个数据库)实现X封锁,
那么只允许该事务D读取和修改数级A,其他事务要等事务D解除X封锁以后,
才能对数级A实现任何类型的封锁,所以X封锁只允许一个事务独占某个数据,具有排他型。
2.2.2 共享型封锁 S封锁,读锁
X 封锁只允许一个事务独占数据,要求太严格,需要适当放宽,
例如可以允许并发读,但是不允许修改,这就是S封锁的作用。
S封锁的含义是:如果事务T对数据A实现了S封锁,那么云物事务T读取数据A,
但是不能修改数据A,在所有S封锁解除之前不允许任何事务对数据A实现X封锁。
2.2.3 备份
数据库备份安装不同方式可以分为多种,
按备份内容分为:物理备份,逻辑备份。
物理备份是在操作系统层面对数据库文件进行备份,又分为冷备份和热备份。
冷备份是关闭数据库进行备份,
热备份是使用备份软件不关闭数据库进行备份。
物理备份通常将 完全备份,增量备份,差异备份三个方式结合使用。
完全备份: 将数据库内容全部备份,需时较长
增量备份:只备份上次完全,增量和差异备份之后修改的数据
差异备份:备份自上次完全备份后发生变化数据。
逻辑备份是利用DBMS自带的工具软件备份和恢复数据库内容。
2.2.4 故障恢复
2.2.4.1 事务故障的恢复。
事务故障是指事务未允许至正常终止点前被撤销,这时恢复子系统应对此事务做撤销处理。
事务故障的恢复是由系统自动完成的,不需要用户干预。步骤如下:
1 反向扫描文件日志,查找该事务的更新操作
2 对该事务的更新操作执行逆操作
3 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理
4 如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。
2.2.4.2 系统故障的恢复
系统故障发生时,造成数据库不一致状态的原因有两个,一是由于一些未完成的事务对数据库的更新写入数据库。
二是由于一些已经提交的事务对数据库的更新还留在缓冲区没来得及写入数据库。系统故障的恢复是在重新启动时自动完成的,不需要用户干预,步骤如下:
1 正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识计入重做Redo 队列。
同时找出故障发生时尚未完成的事务,将事务标识计入Undo队列
2 对撤销队列的各个事务进行撤销处理:反向扫描日志文件,对每个Undo事务的更新操作执行逆操作。
3 对重做队列的各个事务进行重做处理:正向扫描日志文件,对每个Redo事务重新执行日志文件等级操作。
2.2.4.3 介质故障和病毒破坏的恢复
在发生介质故障和遭病毒破坏时,磁盘的物理数据库被破坏,这时的恢复操作分为三步:
1 装入最新数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。
2 从故障点开始反向读取日志文件,找出已经提交事务标识将其计入重做队列。
3 从起始点开始正向阅读日志文件,根据重做队列的记录,重做已完成事务,将数据库恢复至故障前某一时刻的一致状态。
2.2.5 具有检查点的恢复技术。 检查点记录的内容可包括
1 建立检查点时刻所有正在执行的事务清单
2 这些事务最近一个日志记录的地址。采用检查点恢复步骤如下
3 找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中最后一个检查点记录
4 由该检查点记录得到检查点建立时所有正在执行的事务清单队列 A
5 建立重做队列 R 和撤销队列 U,把A队列放入U队列,R队列为空。
- 点赞
- 收藏
- 关注作者
评论(0)