# 第二章
PPT15,元组的连串 中,数据怎么处理,上面只是说明了列的属性
PPT27 元组和连串怎么和笛卡尔积的表示相同
# 课本名词
# 数据库恢复技术
事务处理(transaction processing)
事务处理技术主要包括数据库恢复技术和并发控制技术
事务
begin transaction; | |
commit; | |
rollback; |
原子性、一致性、隔离性、持续性(永久性) acid
一致性状态、不一致的状态
事务是恢复和并发控制的基本单位
恢复子系统是数据库管理系统的一个重要组成部分
故障的种类:
- 事物内部的故障(预期和非预期,主要是非预期),
- 事务没有到达 commit 或者 rollback
- 事务撤销(UNDO)
- 系统故障(软故障 soft crash)
- 系统停止运转、重新启动
- 撤销和重做(REDO)
- 介质故障(硬故障)
- 计算机病毒
各类故障对数据库的影响:
- 数据库本身被破坏
- 数据库没有被破坏,但是数据可能不正确
恢复的基本原理:冗余
建立冗余数据:
- 数据转储
- 后备副本(backup)/ 后援副本
- 静态转储和动态转储(状态)
- 日志文件(log file)
- 海量转储和增量转储(方式)
- 登记日志文件(logging)
- 记录事务对数据库的更新操作
- 格式:以记录为单位、以数据块为单位
- 日志记录
- 日志文件的作用
- 事务 / 系统故障恢复
- 动态转储
- 静态转储
- 原则:
- 登记的次序为并发事务执行的时间次序
- 先写日志文件、后写数据库
恢复策略:
- 事务故障(撤销 UNDO)
- 反向扫描
- 逆操作
- 系统故障
- 正向扫描,得重做队列(REDO-LIST)和撤销队列(UNDO-LIST)
- 反向扫描,撤销队列,撤销
- 正向扫描,重做队列,重做
- 介质故障
- 重装数据库,重做已完成的事务(REDO+UNDO)
具有检查点的恢复技术
日志文件中增加检查点(checkpoint)记录、另外增加一个重新开始文件
P300,同一个事务可以执行多次,但是事务的标识一样么?应该是不一样的,这样才有最近一个日志记录
一个事务对应几条日志记录?
动态维护日志文件的方法:
- 写日志记录
- 写检查点记录
- 写数据记录
- 写重新开始文件
日志文件,一个事务的开始、操作和结束并不是连续地写在一起的
一段事务的 sql 语句多次执行,算作一个事务还是不同的事务,标识怎么样呢?
系统使用检查点方法进行恢复的步骤
- 重新开始文件、最后一个检查点记录(地址)
- 正在执行的事务清单 ACTIVE-LIST
- 正向扫描,UNDO-LIST,REDO-LIST
- 执行 UNDO-LIST,REDO-LIST
数据库镜像(mirror)
数据库管理系统自动保证镜像数据与主数据库的一致性
# 并发控制
多用户数据库系统
事务的串行执行
交叉并发方法(interleaved concurrendy):单处理机的并行
多处理机:同时并发方式
事务是并发控制的基本单位
并发操作带来的数据不一致包括:
- 丢失修改
- 不可重复(这里断句)读(三种情况,幻影现象)
- 读 “脏” 数据
并发控制机制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰。
并发控制的主要技术:
- 封锁 locking
- 时间戳 timestamp
- 乐观控制法 optimistic scheduler
- 多版本并发控制 multi-version concurrency control, MVCC
基本的封锁类型:
- 排他锁 exclusive locks X 锁 写锁
- 共享锁 share locks S 锁
封锁协议 locking protocol
一级封锁协议,X 锁,防止丢失修改,不能保证可重复读和不读脏数据(加锁之前其他事务读取的数据和释放锁时的数据不一样)
二级封锁协议:S 锁,防止丢失修改,防止读脏数据(并不是 S 锁单独作用,修改的一方加 X 锁 -- 先执行,读的一方加 S 锁 -- 后执行,防止读脏数据),不能保证可重复读