Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构.pdf

Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构.pdf
 

书籍描述

编辑推荐
《Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构(第2版)》是公认的Oracle数据库权威指南,凝聚了世界顶尖的Oracle专家Thomas Kyte数十年的宝贵经验和真知灼见。书中深入分析了Oracle数据库体系结构。包括文件、内存结构以及构成Oracle数据库和实例的底层进程,利用具体示例讨论了一些重要的数据库主题。如锁定、并发控制、事务等。同时分析了数据库中的物理结构,如表、索引和数据类型,并介绍采用哪些技术能最优地使用这些物理结构。《Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构(第2版)》在上一版的基础上做了大量增补,以涵盖11g最受关注的多项特性,尤其针对数据加密进行了详细的阐释。
无论你是开发人员还是DBA,要创建和管理稳定、高质量的Oracle系统,归根结底都需要理解Oracle数据库的体系结构。

名人推荐
“《Oracle Database 9i/10g/11g编程艺术》能够帮助你发挥OracIe技术的最大能量……毋庸置疑,这是最重要的Oracle图书之一,绝对值得拥有。”
  ——Ken Jacobs.OracIe公司产品策略部(服务器技术)副总裁。公认的“DBA博士”
“《Oracle Database 9i/10g/11g编程艺术》真是一本绝妙的书,包含大量关于Oracle技术的真知灼见。”
  ——Sean Hull。Heavyweight Internet集团

作者简介
作者:(美国)凯特(Thomas Kyte) 译者:苏金国 王小振 等

Thomas Kyte,Oracle公司核心技术集团副总裁。从5.1.1 c版本开始使用Oracle,自7.0.9 版本发布就一直任职于Oracle公司,帮助Oracle数据库用户设计和构建系统,或者对系统进行重构和调优。此前曾是一位系统集成师,主要为美国军方和政府部门的客户构建大规模的异构数据库和应用。长期主持Oracle Magazine“Ask Tom”专栏,热心回答困扰全世界OracIe开发人员和DBA的各种问题。除本书外,还著有广受好评的《Oracle专家高级编程》和《Oracle高效设计》。

目录
第1章 开发成功的OraGIe应用
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 sGA和后台进程
2.3 连接Oracle
2.3.1 专用服务器
2.3.2 共享服务器
2.3.3 TCP/IP连接的基本原理
2.4 小结

第3章 文件
3.1 参数文件
3.1.1 什么是参数
3.1.2 遗留的inlt.0ra参数文件
3.1.3 服务器参数文件
3.1.4 参数文件小结
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和U(3}A小结
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.2.9 自动内存管理
4.3 小结

第5章 OracIe进程
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.4 小结

第7章 并发与多版本控制
7.1 什么是并发控制
7.2 事务隔离级别
7.2.1 READUNCOMMITTED
7.2.2 READCOMMITTED
7.2.3 REPEATABLEREAD
7.2.4 SERIALIZABLE
7.2.5 READ0NLY
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 COHHIT的WRITE扩展
8.3.2 非分布式PL/SQL代码块中的COMMIT
8.4 完整性约束和事务
8.4.1 EMMEDIATE约束
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与und0
9.1 什么是red0
9.2 什么是und0-
9.3 red0和und0如何协作
9.4 提交和回滚处理
9.4.1 COMMIT做什么:
9.4.2 ROLLBACK做什么
9.5 分析red0
9.5.1 测量redo
9.5.2 能关掉重做日志生成程序吗
9.5.3 为什么不能分配一个新日志
9.5.4 块清除
9.5.5 日志竞争
9.5.6 临时表和red0/undo
9.6 分析undo
9.6.1 什么操作会生成最多和最少的undo9.6.2ORA.01555:snapshottoo0ld错误
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和HAXTRANS
10.3 堆组织表
10.4 索引组织表
10.5索引聚簇表
10.6 散列聚簇表
10.7 有序散列聚簇表
10.8 嵌套表
10.8.1 嵌套表语法
10.8.2 嵌套表存储
10.8.3 嵌套表小结
10.9 临时表
10.10 对象表
10.11 小结

第11章 索引
11.1 Oracle索引概述
11.2B 树索引
11.2.1 索引键压缩
11.2.2 反向键索引
11.2.3 降序索引
11.2.4 什么情况下应该使用B树索引
11.2.5 B树小结
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 实现有选择的唯一性
11.4.5 关于0RA-01743的警告
11.4.6 基于函数的索引小结
11.5 应用域索引
11.6 关于索引的常见问题和神话
11.6.1 视图能使用索引吗
11.6.2 Null和索引能协作吗
11.6.3 外键是否应该加索引
11.6.4 为什么没有使用我的索引
11.6.5 神话:索引中从不重用空间
11.6.6 神话:最有差别的元素应该在最前面
11.7 小结

第12章 数据类型
12.1 0racle数据类型概述
12.2 字符和二进制串类型
12.2.1 NLS概述
12.2.2 字符串
12.3 二进制串:RAW类型
12.4 数值类型
12.4.1 NUHBER类型的语法和用法
12.4.2 BINARYFLOAT/BINARYDOUBLE类型的语法和用法
12.4.3 非固有数值类型
12.4.4 性能考虑
12.5 LONG类型
12.5 1LONG和LONGRAW类型的限制
12.5.2 处理遗留的LONG类型
12.6 DATE、TIMESTAHP和INTERVAL类型
12.6.1 格式
12.6.2 DATE类型
12.6.3 TIHESTAHP类型
12.6.4 INTERVAL类型
12.7 LOB类型
12.7.1 内部LOB
12.7.2 BFILE
12.8 ROWID/UROWID类型
12.9 小结

第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.3 索引分区
13.3.1 局部索引与全局索引
13.3.2 局部索引
13.3 .3 全局索引
13.4 再论分区和性能
13.5 审计和段空间压缩
13.6 小结:

第14章 并行执行
14.1 何时使用并行执行
14.2 OracleExadata
14.3 并行查询
14.4 并行DML
14.5 并行DDI
14.5.1 并行DDL和使用外部表的
数据加载
14.5.2 并行DDL和区段截断
14.6 并行恢复
14.7 过程并行化
14.7.1 并行管道函数
14.7.2 DIY并行化
14.7.3 老式DIY并行化
14.8 小结

第15章 数据加载和卸载
15.1 SQLLDR
15.1.1 用SQLLDR加载数据的常见问题
15.1.2 SQLLDR警告
15.1.3 SQILLDR小结
15.2 外部表
15.2.1 建立外部表
15.2.2 处理错误
15.2.3 使用外部表加载不同的文件
15.2.4 多用户问题
15.2.5 外部表小结
15.3 平面文件卸载
15.4 数据泵卸载
15.5 小结

第16章 数据加密
16.1 加密类型
16.1.1 动态数据
16.1.2 静态数据
16.1.3 手动应用加密
16.1.4 Oracle钱央
16.1.5 透明列级加密
16.1.6 透明表空间加密
16.2 加密不是访问控制
16.3 实现手动应用加密
16.3.1 避免使用手动方法的原因
16.3.2 手动方法的性能影响
16.3.3 何时使用手动方法
16.4 实现列级加密
16.4.1 如何使用列级加密
16.4.2 列级加密的数据存储
16.4.3 测量列级加密的性能影响
16.4.4 影响大小
16.4.5 列级加密的限制
16.5 实现表空间加密
16.5.1 如何使用表空间加密
16.5.2 表空间加密的数据存储
16.5.3 测量表空间加密的性能影响
16.6 决定采用哪种加密技术
16.7 小结
索引

序言
第一次接触到OracleRDBMS是在1988年,也可能是1987年。那一天,经理在我的办公桌上放下一个小盒子,对我说了几句话,大致意思是:“这是一个刚刚进入国内的新产品,名叫Oracle。你先试用几个星期,看看它适合做些什么。”
那个版本可能是5.0.2 2,当时学习Oracle可比现在简单多了。全套的印刷手册(包括Forms2.0和SQL,*Report等)可以放在一个小小的公文包里,createtable语句的文档只有大约3页而已。
如果查看11.2 SQL参考手册的PDF文件,会发现从16-6页开始,直到16-79页全都是createtab]e语句的文档,总共有74页。我最后一次查看9i手册时,总页数已经超过了20000页。我想,对于10g和11g,文档的总页数应该不会低于这个数字。
由于5.0.2 2只有3本相当薄的手册,所以没过多久我就全面了解了Oracle能够做些什么以及如何高效地完成工作。那时没有太多选择余地,所以出错的机会也不多。不过如今Oracle内核已经“深埋”在不计其数的选项和特性之下,这使得Oracle的学习困难重重,该如何下手呢?更糟糕的是,着手学习时,我们真正需要了解的细节并不是一目了然的,它往往被其他大量信息所“掩盖”,当然了解这些信息本身并不是坏事,但它们对于入门来说并不是至关重要的。答案很简单。第1步:阅读概念手册,对内容有个大致了解。第2步:读’tomKyte的这本书,通过边学习边试验,从一个初次尝试“select‘helloworld’fromdual”的“菜鸟”转变成Oracle高手,有朝一日也能自信满满地说出一些“高深”言论,比如:“出于某个原因,我们应该使用一个分区IOT,将这些列放在这个表的溢出区中。”
Tom的这本书集三点于一身:一种轻松交流的风格,使读者能够更容易地了解技术细节,在知道“怎样做”的同时还能理解“为什么这样做”;一种结构化的“叙事方式”,你会看到,相关描述都针对同一个目标,而不是把支离破碎的技巧简单地汇集在一起;一组精心组织的示范说明,让你了解Oracle的工作原理,还会教你怎样做以及怎样思考。
仅以索引为例。索引有许多种,首先需要简要介绍这些不同类型。例如,如果对树索引的具体工作原理有所认识,会很有好处,这样我们才能更好地了解这种索引的优缺点。然后可以转向基于函数的索引,也就是“尚不存在的数据”的索引。

文摘
插图:

Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构

对于开发数据库软件,我有一套很简单的哲学,这是我多年以来一直信守的准则。口如果可能,尽量利用一条SQL语句完成工作。无论你是否相信,这几乎总是行之有效的方法。口如果无法用一条SQL语句完成,就通过PL/SQL实现。(不过,尽可能少用PL/SQL)要知道,代码越多,bug越多l代码越少,bug越少。
口如果在PL/SQL中也无法做到,可以试试使用Java存储过程来实现。不过,有了OracleDatabase9f及以上版本后,如今需要这样做的可能性极小。
口如果用Java还办不到,那就在c外部例程中实现。如果速度要求很高,或者要使用采用c编写的第三方API,就常常使用这种做法。
口如果在c外部例程中还无法实现,就该好好想想有没有必要做这个工作了。
在这本书中,你会看到我是怎样将上述思想付诸实践的。我会使用PL/sQL和PL/sQL中的对象类型来完成SQIL本身办不到的事情。PL/SQL发展至今已经有很长时间了,它经历了长达二十多年的调整和优化。实际上,OracleDatabase10g编译器本身就首次重写为一个优化编译器。你会发现,没有哪种语言能像PL/SQL这样与sQL如此紧密地耦合,也没有哪种语言得到如此优化,可以与SQL更好地交互。在PL/sQL中使用sQL是一件相当自然的事情,而在几乎所有其他语言(从VisualBasic到Java)中,使用SQL都很麻烦。对于这些语言来说,使用SQL绝对没有“自然”的感觉,它不是这些语言本身的扩展。如果PL/SQL还无法做到(这在当前数据库版本中相当少见),我们会使用Java。有时,如果c是唯一的选择,或者需要C才能提供的高速度,我们也会用c来完成工作。随着本地Java编译(nativeJavacompilation)的闪亮登场(可以把Java.字节码转换为具体平台上特定于操作系统的对象码),你会发现,在许多情况下,Java.与C的运行速度相差无几。所以,需要用到c的情况越来越少。
1.2 黑盒方法
根据我个人的第一手经验(这表示,在学习软件开发时我自己也曾犯过错误),我对基于数据库的软件开发为什么如此频繁地遭遇失败有一些看法。先来澄清一下,这里提到的这些项目可能一般不算失败,但是启用和部署所需的时间比原计划多出许多,原因是需要大幅重写,重新建立体系结构,或者需要充分调优。我个人把这些延迟的项目称为“失败”,因为它们原本可以按时完成(甚至可以更快完成)。

内容简介
《Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构(第2版)》是一本关于Oracle Database 9i、10g和11g数据库体系结构的权威图书,涵盖了所有重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及数据加密等,并利用具体的例子来全面介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用这个特性来开发软件,以及有关的常见陷阱。
《Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构(第2版)》面向所有Oracle数据库应用开发人员和DBA。

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多