2018年8月31日20:43:41评论1.6K1
摘要
Ask Tom!数据库技术大佬经典畅销书新版凝聚专家数十年的宝贵经验和真知灼见公认的Oracle数据库指南针对Oracle 12c阐述云架构之美Oracle中国架构师和研发人员倾心翻译不止于技,更传授道,值得你一读再读本书深入分析了Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库和实例的底层进程,利用具体示例讨论了一些重要的数据库主题,同时分析了数据库中的物理结构,如表、索引和数据类型,并介绍采用哪些技术能使用这些物理结构。新版在前两版的基础上,增加了针对Oracle Database 12c诸多特性的介绍。新增内容重点关注12c的云架构,以及可插拔式数据库的应用。
Oracle编程艺术 深入理解数据库体系结构(第3版) 内容简介
本书是一本关于Oracle数据库体系结构的图书,涵盖了所有重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及数据加密等,并利用具体的例子来全面介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用这个特性来开发软件,以及有关的常见陷阱。本书的读者对象是数据库开发人员。
Oracle编程艺术 深入理解数据库体系结构(第3版) 目录
第1章 开发成功的Oracle应用
1.1 我的方法
1.2 黑盒方法
1.3 开发数据库应用的正确(和不正确)方法
1.3.1 了解Oracle体系结构
1.3.2 理解并发控制
1.3.3 多版本控制
1.3.4 数据库独立性
1.3.5 怎么能让应用运行得更快
1.3.6 DBA与开发人员的关系
1.4 小结
第2章 体系结构概述
2.1 定义数据库和实例
2.2 连接Oracle
2.2.1 专用服务器
2.2.2 共享服务器
2.2.3 TCP/IP连接的基本原理
2.3 可插拔式数据库
2.3.1 降低资源用量
2.3.2 降低维护开销
2.4 可插拔式数据库的不同之处
2.5 小结
第3章 文件
3.1 参数文件
3.1.1 什么是参数
3.1.2 init.ora参数文件
3.1.3 服务器参数文件
3.2 跟踪文件
3.2.1 计划内的、由用户请求所产生的跟踪文件
3.2.2 针对内部错误生成的跟踪文件
3.2.3 跟踪文件小结
3.3 警告文件
3.4 数据文件
3.4.1 简要回顾文件系统机制
3.4.2 Oracle数据库中的存储层次体系
3.4.3 字典管理和本地管理的表空间
3.5 临时文件
3.6 控制文件
3.7 重做日志文件
3.7.1 在线重做日志
3.7.2 归档重做日志
3.8 密码文件
3.9 修改跟踪文件
3.10 闪回日志
3.10.1 闪回数据库
3.10.2 快速恢复区
3.11 DMP文件(EXP/IMP文件)
3.12 数据泵文件
3.13 平面文件
3.14 小结
第4章 内存结构
4.1 进程全局区和用户全局区
4.1.1 手动PGA内存管理
4.1.2 自动PGA内存管理
4.1.3 如何选择手动和自动内存管理
4.1.4 PGA和UGA小结
4.2 系统全局区
4.2.1 固定SGA区
4.2.2 重做缓冲区
4.2.3 块缓冲区缓存
4.2.4 共享池
4.2.5 大池
4.2.6 Java池
4.2.7 流池
4.2.8 SGA内存管理
4.3 小结
第5章 Oracle进程
5.1 服务器进程
5.1.1 专用服务器连接
5.1.2 共享服务器连接
5.1.3 数据库常驻连接池
5.1.4 连接与会话
5.1.5 专用服务器、共享服务器和数据库常驻连接池
5.1.6 专用/共享服务器小结
5.2 后台进程
5.2.1 特定任务后台进程
5.2.2 工具后台进程
5.3 从属进程
5.3.1 I/O从属进程
5.3.2 Pnnn:并行查询执行服务器
5.4 小结
第6章 锁和闩
6.1 什么是锁
6.2 锁的问题
6.2.1 丢失更新
6.2.2 悲观锁
6.2.3 乐观锁
6.2.4 乐观锁还是悲观锁
6.2.5 阻塞
6.2.6 死锁
6.2.7 锁升级
6.3 锁类型
6.3.1 DML锁
6.3.2 DDL锁
6.3.3 闩
6.3.4 互斥锁
6.3.5 手动锁定和用户定义锁
6.4 小结
第7章 并发与多版本控制
7.1 什么是并发控制
7.2 事务隔离级别
7.2.1 READ UNCOMMITTED
7.2.2 READ COMMITTED
7.2.3 REPEATABLE READ
7.2.4 S ERIALIZABLE
7.2.5 READ ONLY
7.3 多版本读一致性的含义
7.3.1 数据仓库中一种常见但有问题的方法
7.3.2 解释热表上超出期望的I/O
7.4 写一致性
7.4.1 一致读和当前读
7.4.2 查看重启动
7.4.3 为什么重启动对我们很重要
7.5 小结
第8章 事务
8.1 事务控制语句
8.2 原子性
8.2.1 语句级原子性
8.2.2 过程级原子性
8.2.3 事务级原子性
8.2.4 DDL与原子性
8.3 持久性
8.3.1 COMMIT的WRITE扩展
8.3.2 非分布式PL/SQL代码块中的COMMIT
8.4 完整性约束和事务
8.4.1 IMMEDIATE约束
8.4.2 DEFERRABLE约束和级联更新
8.5 不好的事务习惯
8.5.1 在循环中提交
8.5.2 使用自动提交
8.6 分布式事务
8.7 自治事务
8.7.1 自治事务如何工作
8.7.2 何时使用自治事务
8.8 小结
第9章 redo与undo
9.1 什么是redo
9.2 什么是undo
9.3 redo和undo如何协作
9.4 提交和回滚处理
9.4.1 COMMIT做什么
9.4.2 ROLLBACK做什么
9.5 分析redo
9.5.1 测量redo
9.5.2 能关掉重做日志的生成吗
9.5.3 为什么我拿不到日志空间
9.5.4 块清除
9.5.5 日志竞争
9.5.6 临时表和redo/undo
9.6 分析undo
9.6.1 什么操作会生成最多和最少的undo
9.6.2 ORA-01555: snapshot too old错误
9.7 小结
第10章 数据库表
10.1 表类型
10.2 术语
10.2.1 段
10.2.2 段空间管理
10.2.3 高水位线
10.2.4 FREELIST
10.2.5 PCTFREE和PCTUSED
10.2.6 LOGGING和NOLOGGING
10.2.7 INITRANS和MAXTRANS
10.3 堆组织表
10.4 索引组织表
10.5 索引聚簇表
10.6 散列聚簇表
10.7 有序散列聚簇表
10.8 嵌套表
10.8.1 嵌套表语法
10.8.2 嵌套表存储
10.8.3 嵌套表小结
10.9 临时表
10.9.1 12c之前的统计信息
10.9.2 12c之后的统计信息
10.9.3 临时表小结
10.10 对象表
10.11 小结
第11章 索引
11.1 Oracle索引概述
11.2 B*Tree索引
11.2.1 索引键压缩
11.2.2 反向键索引
11.2.3 降序索引
11.2.4 什么情况下应该使用B*Tree索引
11.2.5 B*Tree小结
11.3 位图索引
11.3.1 什么情况下应该使用位图索引
11.3.2 位图联结索引
11.3.3 位图索引小结
11.4 基于函数的索引
11.4.1 一个简单的例子
11.4.2 只对部分行建立索引
11.4.3 实现有选择的唯一性
11.4.4 关于ORA-01743的警告
11.4.5 基于函数的索引小结
11.5 应用域索引
11.6 不可见的索引
11.7 同列上的多个索引
11.8 在扩展列上使用索引
11.8.1 使用虚拟列的方法
11.8.2 使用基于函数索引的方法
11.9 关于索引的常见问题和各种传言
11.9.1 视图能使用索引吗
11.9.2 Null和索引能协作吗
11.9.3 外键是否应该加索引
11.9.4 为什么没有使用我的索引
11.9.5 传言:索引中从不重用空间
11.9.6 传言:最有差别的元素应该在最前面
11.10 小结
第12章 数据类型
12.1 Oracle数据类型概述
12.2 字符和二进制串类型
12.2.1 NLS概述
12.2.2 字符串
12.3 二进制串:RAW类型
12.4 扩展的数据类型
12.5 数值类型
12.5.1 NUMBER类型的语法和用法
12.5.2 BINARY FLOAT/BINARY DOUBLE类型的语法和用法
12.5.3 非固有数值类型
12.5.4 性能考虑
12.6 LONG类型
12.6.1 LONG和LONG RAW类型的限制
12.6.2 处理遗留的LONG类型
12.7 DATE、TIMESTAMP和INTERVAL类型
12.7.1 格式
12.7.2 DATE类型
12.7.3 TIMESTAMP类型
12.7.4 INTERVAL类型
12.8 LOB类型
12.8.1 内部LOB
12.8.2 BFILE
12.9 ROWID/UROWID类型
12.10 小结
第13章 分区
13.1 分区概述
13.1.1 提高可用性
13.1.2 减少管理负担
13.1.3 增强语句性能
13.2 表分区机制
13.2.1 区间分区
13.2.2 散列分区
13.2.3 列表分区
13.2.4 间隔分区
13.2.5 引用分区
13.2.6 间隔引用分区
13.2.7 虚拟列分区
13.2.8 组合分区
13.2.9 行移动
13.2.10 表分区机制小结
13.3 索引分区
13.3.1 本地索引与全局索引
13.3.2 本地索引
13.3.3 全局索引
13.4 再论分区和性能
13.5 一些简化维护的特性
13.5.1 多分区管理操作
13.5.2 级联截断
13.5.3 级联交换
13.6 审计和段空间压缩
13.7 小结
第14章 并行执行
14.1 何时使用并行执行
14.2 Oracle Exadata
14.3 并行查询
14.4 并行DML
14.5 并行DDL
14.5.1 并行DDL和使用外部表的数据加载
14.5.2 并行DDL和扩展截断
14.6 过程并行化
14.6.1 并行管道函数
14.6.2 DIY并行化
14.6.3 老式DIY并行化
14.7 小结
第15章 数据加载和卸载
15.1 外部表
15.1.1 建立外部表
15.1.2 处理错误
15.1.3 使用外部表加载不同的文件
15.1.4 多用户问题
15.1.5 预处理
15.1.6 外部表总结
15.2 数据泵卸载
15.3 SQLLDR
15.3.1 用SQLLDR加载数据的常见问题
15.3.2 SQLLDR警告
15.3.3 SQLLDR小结
15.4 平面文件卸载
15.5 小结
Oracle编程艺术 深入理解数据库体系结构(第3版) 精彩文摘
例如,我们可以拿Windows与UNIX/Linux来举个例子。如果你一直是Windows程序员,现在给你一个任务,让你在UNIX/Linux平台上开发新应用,那么很多东西都得从头学起,比如说,内存管理的方式就完全不同;建立服务器进程的方式也有很大差异。在Windows下,你会开发一个单进程多线程的可执行程序。在UNIX/Linux下则不同,你开发的可能不是单个独立的可执行程序;相反,你会采用多个进程协作的方式来实现。它们都是操作系统,能为开发人员提供大致相同的一组服务,如文件管理、内存管理、进程管理、安全性等。不过,这两个操作系统的体系结构却大相径庭。在Windows环境下学到的许多知识到了UNIX/Linux上并不适用(公平地讲,反之亦然)。如果你想在新的平台上也能够成功地开发应用,那你必须把原来的一些习惯丢掉。
在不同操作系统中运行的应用存在上述问题,基于不同数据库运行的应用也存在同样的问题。理解数据库对于成功开发应用至关重要。如果不了解你的数据库能做什么,或者不清楚它怎么做,那么开发项目就会失败。如果你认为应用在SQL Server上能很好地运行,就想当然地认为它在Oracle数据库上也能很好地工作,你可能就会碰钉子。客观地讲,反过来也一样:一个Oracle数据库应用可能开发得很好,可扩展性也很好,但是如果不对体系结构做重大改变,它在SQL Server上不一定能正常运行。Windows和UNIX/Linux都是操作系统,但二者截然不同;同样,Oracle和SQL Server(甚至是任何其他数据库)尽管都是数据库,但二者完全不同。
本文来自我要无比强大投稿,不代表电子书资源网立场,如若转载,请联系原作者获取。