目录出版者的话专家指导委员会中文版序译者序译者简介序前言第一部分 事务处理基础第1章 概述 1
1.1 历史回顾 1
1.2 什么是事务处理系统 2
1.2.1 最终用户对事务处理系统的认识 4
1.2.2 管理员/操作员对事务处理系统的认识 6
1.2.3 应用设计者对事务处理系统的认识 8
1.2.4 从资源管理器角度对事务处理系统的认识 12
1.2.5 TP系统的核心服务 15
1.3 事务处理系统特征列表 16
1.3.1 应用开发特征 16
1.3.2 中心库特征 16
1.3.3 TP监控器的特征 20
1.3.4 数据通信特征 21
1.3.5 数据库特征 24
1.3.8 特征小结 29
1.3.7 教育和测试特征 29
1.3.6 操作特征 29
1.4 小结 30
1.5 历史评注 30
习题 32
答案 32
第2章 计算机系统基本术语 33
2.1 引言 33
2.2 基本硬件 33
2.2.1 存储器 35
2.2.2 处理器 41
2.2.3 通信硬件 42
2.2.4 硬件结构 43
2.3 基本软件——地址空间、进程、会话 45
2.3.1 地址空间 45
2.3.2 进程、保护域和线程 46
2.3.3 消息和会话 47
2.4 一般系统问题 48
2.4.1 客户和服务器 49
2.4.2 命名 50
2.4.3 认证 51
2.4.4 授权 52
2.4.5 调度和性能 52
2.4.6 小结 54
2.5 文件 54
2.5.1 文件操作 54
2.5.2 文件组织 55
2.5.3 分布式文件系统 56
2.5.4 SQL 56
2.6 软件性能 57
2.7.1 可移植性标准和互操作性标准 58
2.7.2 API和FAP 58
2.7 事务处理标准 58
2.7.3 LU6.2,一个事实标准 60
2.7.4 具有X/Open DTP的OSI-TP——正式标准 60
2.8 小结 62
习题 62
答案 64
第二部分 容错基础知识第3章 容错 67
3.1 引言 67
3.1.1 简单概率概述 67
3.1.2 容错的外部观点 68
3.2 定义 71
3.2.1 故障、失败、可用性、可靠性 71
3.2.2 故障避免和容错的分类 72
3.2.3 修复、失败即停、模块性、递归设计 72
3.3 实验研究 72
3.3.2 传统系统研究 73
3.3.1 断供是非常少见的事件 73
3.3.3 容错系统研究 74
3.4 典型模块失败率 76
3.5 容错的硬件措施 79
3.5.1 n工基本思想:怎样建立失败即停的模块 79
3.5.2 n工中的失败即停表决器与失败表决型表决器 80
3.5.3 n工与修复产生高可用性 81
3.5.4 表决器问题 83
3.5.5 小结 84
3.6 软件问题 85
3.6.1 N版本程序设计和软件容错 85
3.6.2 事务和软件容错 86
3.6.3 小结 87
3.7 故障模型和软件故障屏蔽 87
3.7.1 模型概览 88
3.7.2 建立高可用的存储 89
3.7.3 高可用的进程 94
3.7.4 基于会话和进程对的可靠消息 102
3.7.5 进程-消息-存储模型的小结 109
3.8 一般原理 110
3.9 一个警戒性的故事——系统错觉 110
3.10 小结 112
3.11 历史评注 112
习题 113
答案 115
第三部分 面向事务的计算第4章 事务模型 117
4.1 引言 117
4.2 原子操作和扁平事务 118
4.2.1 将写磁盘作为原子操作 118
4.2.2 操作类型分类 120
4.2.3 扁平事务 121
4.2.4 扁平事务的局限性 125
4.3 控制区域 127
4.3.1 控制区域的定义 128
4.3.2 控制区域的动态行为 129
4.3.3 小结 131
4.4 一种解释事务模型的符号表示法 132
4.4.1 描述事务模型哪些是必需的 132
4.4.2 符号表示法的构成元素 134
4.4.3 用一套简单的规则定义事务模型 135
4.5 带保存点的扁平事务 136
4.5.1 关于保存点 137
4.5.2 开发保存点模型下的规则 138
4.5.3 持久性保存点 139
4.6 链事务 140
4.7.1 嵌套结构的定义 142
4.7 嵌套事务 142
4.7.2 嵌套事务的使用 145
4.7.3 通过保存点模仿嵌套事务 146
4.8 分布事务 147
4.9 多级别事务 148
4.9.1 补偿事务的角色 149
4.9.2 多级别事务的使用 150
4.10 开放嵌套事务 153
4.11 长事务 153
4.11.1 事务处理上下文 154
4.11.2 小批量 157
4.11.3 saga 158
4.12 特殊事务模型 159
4.13 小结 161
4.14 历史评注 161
习题 164
答案 167
第5章 事务处理监控器:概述 172
5.1 引言 172
5.2 事务系统中的TP监控器的角色 172
5.2.1 面向事务的计算方式 173
5.2.2 事务处理服务 178
5.2.3 事务处理系统进程结构 180
5.2.4 小结 184
5.3 TP监控器的结构 185
53.1 TP监控器组件 185
5.3.2 事务服务的组件 188
5.3.3 TP监控器对于资源管理器接口的支持 190
5.4 事务型远程过程调用:基本思想 191
5.4.1 远程过程调用中的参与者 191
5.4.2 远程过程调用句柄的地址空间结构 192
5.4.3 远程过程调用的动态过程 193
5.4.4 小结 195
5.5 事务编程风格的例子 196
5.5.1 基本的处理循环逻辑 196
5.5.2 与事务有关的资源管理器:一个简单的例子 197
5.5.3 与事务有关的资源管理器:一个复杂的例子 202
5.5.4 使用持久保存点 203
5.6 专门术语的介绍 204
5.7 历史评注 205
习题 206
答案 207
第6章 事务处理监控器 209
6.1 介绍 209
6.2 事务型远程过程调用 211
6.2.1 资源管理器的接口 212
6.2.2 资源管理器对事务的支持 213
6.2.3 资源管理器和TP监控器之间的接口 215
6.2.4 资源管理器调用与资源管理器会话 217
6.2.5 小结 223
6.3 TP监控器的功能原理 223
63.1 TPOS的中心数据结构 224
6.3.2 TP监控器拥有的数据结构 228
6.3.3 TRPC路径的概览 233
6.3.4 中止竞争的TRPC 238
6.3.5 小结 238
6.4 管理请求和响应队列 239
6.4.1 映射资源管理器调用的短期队列 240
6.4.2 用于异步事务处理的永久性请求队列 242
6.4.3 小结 249
6.5 TP监控器的其他任务 250
6.5.1 负载平衡 250
6.5.2 认证和授权 255
6.5.3 重启处理 259
6.6 小结 261
6.7 历史评注 262
习题 264
答案 265
第四部分 并发控制第7章 隔离性的概念 269
7.1 引言 269
7.2 隔离性的引入 269
7.3 隔离性的依赖模型 271
7.3.1 静态分配与动态分配 272
7.3.2 事务依赖 272
7.3.3 三种有害的依赖 273
7.3.4 隔离性的形式化模型 274
7.4 隔离性:应用程序员的观点 274
7.5 隔离性定理 275
7.5.2 规范事务和两阶段事务 276
7.5.1 操作与事务 276
7.5.3 事务的调度 277
7.5.4 合法的调度和锁的相容性 277
7.5.5 版本、依赖、依赖图 278
7.5.6 等价的和隔离的调度:BEFORE、AFTER和虫洞 279
7.5.7 虫洞事务不具有隔离性 280
7.5.8 定义小结 281
7.5.9 隔离定理的小结 285
7.6 隔离性的级别 286
7.6.1 隔离性级别的定理 286
7.6.2 SQL与隔离级别 287
7.6.3 低隔离级别的优缺点 288
7.6.4 特殊的SQL隔离——跳读锁和通知锁 290
7.7 幻像和谓词锁 291
7.8 粒度锁 292
7.8.1 基于树的封锁和意向锁类型 293
7.8.2 更新型锁 295
7.8.3 粒度锁小结 296
7.8.4 码区间封锁 296
7.8.5 动态码区间锁:前码和后码封锁 297
7.8.6 码区间锁需要DAG封锁 299
7.8.7 DAG封锁协议 300
7.8.8 基于DAG的粒度封锁的形式化定义 301
7.9 封锁的启发式算法 302
7.10 嵌套事务封锁 304
7.11 调度与死锁 305
7.11.1 护卫现象 305
7.11.2 死锁避免与检测 306
7.11.3 等待图和死锁检测 307
7.11.4 分布式死锁 308
7.11.5 死锁的概率 309
7.12.1 字段调用 310
7.12 奇特方法 310
7.12.2 契约封锁和其他字段调用改进 312
7.12.3 乐观和时间戳封锁 314
7.12.4 时间域寻址 314
7.13 小结 316
7.14 历史评注 317
习题 318
答案 320
第8章 锁的实现 323
8.1 引言 323
8.1.1 关于本章 323
8.1.2 锁管理程序中并行的必要性 323
8.1.3 资源管理器和锁管理程序的地址空间 324
8.2 原子机指令 325
8.3 信号量 326
8.3.1 排他型信号量 327
8.3.2 蟹行:遍历共享数据结构 329
8.3.3 共享信号量 329
8.3.4 分配共享存储 332
8.3.5 信号量和异常 333
8.4 锁管理程序 334
8.4.1 锁名 334
8.4.2 锁队列和调度 335
8.4.3 锁长度和锁计数 337
8.4.4 锁管理程序接口和数据结构 338
8.4.5 锁管理程序的内部逻辑 339
8.4.6 锁升级和类属解锁、通知锁 344
8.4.7 事务保存点、提交和回滚 345
8.4.8 系统重启时的封锁 346
8.5 死锁检测 347
8.4.11 锁管理程序小结 347
8.4.10 锁管理程序配置和复杂性 347
8.4.9 长生事务 347
8.6 并行事务和并行嵌套事务封锁 349
8.7 小结 350
8.8 历史评注 350
习题 351
答案 353
第五部分 恢 复第9章 日志管理程序 357
9.1 引言 357
9.1.1 日志的使用 357
9.1.2 日志管理程序概述 357
9.1.3 日志管理程序和其他服务的关系 358
9.1.4 为什么需要日志管理程序 359
9.2 日志表 360
9.2.1 映射日志表到文件 360
9.2.2 日志序号 361
9.3 日志的公共接口 362
9.3.1 日志表的存取授权 362
9.3.2 读日志表 363
9.3.3 写日志表 364
9.3.4 小结 364
9.4 日志读写的实现细节 365
9.4.1 读日志 366
9.4.2 日志锚点 366
9.4.3 与事务相关的锚点 367
9.4.4 日志插入 367
9.4.5 分配和刷新日志的守护进程 368
9.4.6 谨慎写:串行写和乒乓写 369
9.4.7 成组提交、批量式、集装式 370
9.4.8 WADS写入 370
9.5 日志重启逻辑 371
9.4.10 小结 371
9.4.9 多日志的事务管理器 371
9.5.1 保存事务管理器的锚点 372
9.5.2 准备重启:日志锚点的谨慎写 372
9.5.3 在重启时找到锚点和日志尾 373
9.6 日志归档 374
9.6.1 应当有多少联机日志表 374
9.6.2 用于回滚、重启、归档的底线 374
9.6.3 动态日志:副拷贝和正向拷贝 375
9.6.4 不影响并发事务的日志归档 376
9.6.5 电子转存和变化累积 376
9.6.6 处理日志管理程序——归档环路 377
9.7 客户-服务器体系结构的日志系统 378
9.8 小结 378
习题 379
9.9 历史评注 379
答案 381
第10章 事务管理器概念 384
10.1 引言 384
10.2 事务管理器的接口 384
10.2.1 事务的应用接口 385
10.2.2 事务的资源管理器接口 388
10.2.3 事务管理器的功能 389
10.3 事务型资源管理器概念 391
10.3.1 DO-UNDO-REDO协议 391
10.3.2 日志表和日志记录 392
10.3.3 通信会话恢复 393
10.3.4 值日志 396
10.3.5 逻辑日志 397
10.3.6 物理-逻辑日志 399
10.3.7 物理-逻辑日志规则:FIX、WAL和Force-Log-at-Commit 400
10.3.8 补偿日志记录 407
10.3.9 物理-逻辑REDO的幂等性 408
10.3.10 小结 409
10.4 两阶段提交:使计算具有原子性 409
10.4.1 集中式系统中的两阶段提交 410
10.4.2 分布式事务和两阶段提交 414
10.5 小结 418
10.6 历史评注 419
习题 420
答案 422
第11章 事务管理器结构 426
11.1 引言 426
11.2 正常处理 426
11.2.1 事务标识符 426
11.2.2 事务管理器的数据结构 427
11.2.3 MyTrid()、Status_Transaction()、Leave_Transaction()和Resume_Transaction() 430
11.2.4 保存点日志记录 431
11.2.5 Begin_Work() 432
11.2.6 局部Commit_Work() 432
11.2.7 远程Commit_Work():Prepare()和Commit() 435
11.2.8 Save_Work()和Read_context() 437
11.2.9 Rollback_Work() 438
11.3 检查点 440
11.3.1 清晰检查点 441
11.3.2 模糊检查点 442
11.3.3 事务管理器检查点 443
11.4 系统重启 444
11.4.1 重启时的事务状态 445
11.4.2 事务管理器的重启逻辑 445
11.4.3 资源管理器重启逻辑,Identify() 448
11.4.6 两检查点方法:一种不同的策略 450
11.4.5 独立的资源管理器 450
11.4.4 重启设计小结 450
11.4.7 重启为什么能奏效 452
11.4.8 分布式事务解决方法:重启时两阶段提交 453
11.4.9 加速重启 453
11.4.10 其他重启问题 454
11.5 资源管理器的失败与重启 454
11.6 归档恢复 455
11.7 配置事务管理器 456
11.8 小结 457
习题 457
答案 458
12.2 异构型提交协调者 460
12.2.1 封闭式与开放式事务管理器 460
12.1 引言 460
第12章 高级事务管理器主题 460
12.2.2 封闭式事务管理器的互操作性 461
12.2.3 编写开放式事务管理器的网关 463
12.2.4 事务网关小结 465
12.3 高可用性(非阻塞型)提交协调者 465
12.4 提交转移 467
12.5 两阶段提交的优化 469
12.5.1 只读提交优化 470
12.5.2 惰性提交优化 471
12.5.3 线性提交优化 471
12.6 远程场地的灾难恢复 471
12.6.1 系统对接管 473
12.6.2 接管时的会话切换 474
12.6.3 配置选项:一级安全、二级安全和极其安全 475
12.6.4 失败后的追赶处理 477
12.6.5 系统对设计小结 477
12.8 历史评注 478
12.7 小结 478
习题 479
答案 480
第六部分 事务型文件系统:一个资源管理器实例第13章 文件和缓冲区管理 483
13.1 引言 483
13.2 文件系统作为事务永久存储的基础 484
13.2.1 外存与主存 484
13.2.2 本书使用的外部存储模型 488
13.2.3 事务型文件和数据库管理器中的抽象层次 490
13.3 介质和文件管理 492
13.3.1 基本文件系统的对象和操作 492
13.3.2 磁盘空间管理 495
13.3.3 低层文件系统的目录管理 502
13.4.1 数据库缓冲区的工作原理 504
13.4 缓冲区管理 504
13.4.2 缓冲区管理器的实现问题 511
13.4.3 从缓冲区角度的写日志和恢复 519
13.4.4 缓冲区管理器性能优化 524
13.5 特殊问题 530
13.5.1 副文件 531
13.5.2 单级存储器 537
13.6 小结 541
13.7 历史评注 542
习题 544
答案 546
第14章 面向元组的文件系统 549
14.1 引言 549
14.2 元组到页面的映射 549
14.2.1 页面的内部组织 550
14.2.2 文件中空闲区的管理 554
14.2.3 元组标识 556
14.3 物理元组管理 562
14.3.1 属性值的物理表示 562
14.3.2 短元组的物理表示 564
14.3.3 元组属性值表示的特殊问题 573
14 3.4 长元组的物理表示 575
14.3.5 复杂元组和超长属性的物理表示 578
14.4 文件组织 581
14.4.1 管理型操作 582
14.4.2 扫描操作在不同文件组织上的抽象视图 584
14.4.3 顺序存取文件 589
14.4.4 系统顺序文件 594
14.4.5 相对文件 596
14.4.6 码顺序文件和散列文件 598
14.4.7 小结 598
14.5.1 聚簇文件 599
14.5 特殊问题 599
14.5.2 划分文件 600
14.5.3 使用事务来维护文件系统 601
14.54 目前数据库系统中的面向元组的文件系统 601
14.6 小结 602
习题 602
答案 604
第15章 存取路径 606
15.1 引言 606
15.2 实现关联存取路径的技术 607
15.3 通过散列文件进行关联存取 609
15.3.1 将码值折叠成数值型数据类型 610
15.3.2 评价散列函数的准则 611
15.3.3 散列文件的溢出处理 616
15.3.4 散列文件中页面的局部管理 618
15.3.5 散列关联存取的小结 619
15.4 B树 620
15.4.1 B树:基本思想 621
15.4.2 B树的性能方面 628
15.4.3 对B树的同步:面向页的观点 632
15.4.4 对B树的同步:面向元组的观点 634
15.4.5 B树的恢复操作 636
15.5 B树某些操作的实现样例 639
15.5.1 声明所有程序用到的数据结构 639
15.5.2 B树readkey()操作的实现 641
15.5.3 B树上的码区间封锁 642
15.5.4 B树插入操作的实现:简单实例 644
15.5.5 B树插入操作的实现:分裂实例 645
15.5.6 小结 647
15.6 特殊问题 647
15.6.1 可扩展散列 648
15.6.2 网格文件 652
15.6.3 hB树 656
15.7 小结 661
15.8 历史评注 661
习题 664
答案 666
第七部分 系统概览第16章 TP系统概览 669
16.1 引言 669
16.2 IMS 669
16.2.1 硬件和操作系统环境 670
16.2.2 工作流模型 671
16.2.3 程序隔离 674
16.2.4 主存数据库和字段调用 674
16.2.5 数据共享 675
16.2.6 改善的可用性与双工系统 675
16.2.8 IMS的最新演进 677
16.3 CICS和LU6.2 677
16.2.7 DB2 677
16.3.1 CICS概述 678
16.3.2 CICS服务 679
16.3.3 CICS工作流 680
16.3.4 CICS分布式事务处理 681
16.3.5 LU6.2 682
16.4 Guardian 90 684
16.4.1 Guardian:操作系统及硬件 685
16.4.2 Pathway、终端上下文和服务器类管理 686
16.4.3 事务管理 687
16.4.4 其他有意义的特性 692
16.5 DECdta 693
16.5.1 ACMS事务处理的三球工作流模型 693
16.5.2 ACMS服务 696
16.5.3 ACMS小结 697
16.5.4 VMS的事务管理支持 698
16.5.5 DECdta小结 701
16.5.6 可靠的事务路由器 701
16.6 X/Open DTP、OSI-TP、CCR 703
16.6.1 局部情况 704
16.6.2 分布式情况:服务和服务器 705
16.6.3 小结 706
16.7 其他系统 706
16.7.1 通用事务管理器 706
16.7.2 ADABASTPF 707
16.7.3 Encina 708
16.7.4 Tuxedo 710
16.8 小结 711
第八部分附录附录A 参考文献 713
附录B 数据结构和接口 731
附录C 词汇表 738
索引 774