DM 数据库事务管理机制是其核心功能之一,旨在确保数据库操作的一致性、原子性、隔离性和持久性,支持多版本并发控制和闪回功能,并提供多种隔离级别和锁模式,满足不同应用场景的需求。
事务的基本概念和特性
事务是指一系列操作序列,这些操作要么全部完成,要么全部不做,不可分割。事务的四大特性:
· 原子性:确保事务中的所有操作要么全部完成,要么全部不做,不可分割。
· 一致性:确保事务执行前后,数据库保持一致性状态。
· 隔离性:确保事务之间相互隔离,互不影响。
· 持久性:确保一旦事务提交,对数据库的修改就是永久性的。
事务的提交和回滚
· 提交:将事务对数据库的修改永久化,并将事务标记为完成。
· 回滚:撤销事务对数据库的修改,恢复到事务开始前的状态。
· 保存点:允许事务部分回滚到某个标记点,保留之前操作的结果。
事务模式
· 自动提交模式:每条 SQL 语句执行后自动提交,适用于简单操作。
· 手动提交模式:用户手动控制事务的开始和结束,适用于复杂操作。
· 隐式提交:遇到 DDL 语句时自动提交前一个事务,确保数据字典的一致性。
事务锁定
· 锁模式:共享锁、排他锁、意向共享锁、意向排他锁,控制对数据的访问权限。
· 锁粒度:TID 锁(行级)、对象锁(数据字典和表锁),控制锁的范围。
· 显式锁定表:用户可以手动锁定表对象,限制其他事务的操作,例如进行批量更新。
多版本控制
DM 数据库采用行级多版本控制机制,通过物理记录和回滚记录实现,消除了行锁对系统资源的消耗,提高了并发性能。
· 物理记录:包含 TID 和 RPTR 字段,记录修改事务号和回滚记录地址。
· 回滚记录:包含 TID 和 RPTR 字段,记录回滚事务号和上一个版本回滚记录地址。
· 可见性原则:根据事务隔离级别和活动事务表判断数据可见性。
· 历史数据获取:通过 RPTR 指针回溯历史版本,找到对当前事务可见的版本。
· 回滚段自动清理:定期清理不再需要的回滚记录,释放空间。
事务隔离级别
DM 数据库支持三种事务隔离级别,控制事务之间的隔离程度:
· 读未提交:允许脏读、不可重复读和幻读,并发性能最高,但数据一致性最低。
· 读提交:默认隔离级别,不允许脏读,但允许不可重复读和幻读,兼顾并发性能和数据一致性。
· 串行化:最严格的隔离级别,不允许脏读、不可重复读和幻读,数据一致性最高,但并发性能最低。
· 只读事务:只能访问数据,不能修改数据,不会改变事务原有的隔离级别。
锁等待与死锁检测
· 阻塞:一个事务等待另一个事务释放锁。
· 死锁:多个事务互相等待对方的锁,形成循环等待。
· 死锁检测:DM 数据库检测到死锁时,会牺牲一个事务,释放其持有的锁,避免死锁。
闪回
闪回技术通过回滚段存储的 UNDO 记录还原历史数据,实现闪回查询,帮助用户恢复误操作导致的数据丢失,并可用于数据变化分析。
XA 事务
XA 事务是跨多个资源管理器的分布式事务,DM 数据库支持 XA 编程接口和 DBMS_XA 包两种方式,满足分布式应用场景的需求。
DM 数据库事务管理机制功能丰富,能够满足各种应用场景的需求,确保数据一致性、并发性和安全性。通过多版本控制、多种隔离级别和锁模式,DM 数据库在保证数据一致性的同时,提高了并发性能,并提供了闪回功能,帮助用户应对数据丢失等意外情况。