# 第二章

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,同一个事务可以执行多次,但是事务的标识一样么?应该是不一样的,这样才有最近一个日志记录

一个事务对应几条日志记录?

动态维护日志文件的方法:

  1. 写日志记录
  2. 写检查点记录
  3. 写数据记录
  4. 写重新开始文件

日志文件,一个事务的开始、操作和结束并不是连续地写在一起的

一段事务的 sql 语句多次执行,算作一个事务还是不同的事务,标识怎么样呢?

系统使用检查点方法进行恢复的步骤

  1. 重新开始文件、最后一个检查点记录(地址)
  2. 正在执行的事务清单 ACTIVE-LIST
  3. 正向扫描,UNDO-LIST,REDO-LIST
  4. 执行 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 锁 -- 后执行,防止读脏数据),不能保证可重复读