下载 >  数据库 >  Oracle > oracle database 10g基础教程.rar

oracle database 10g基础教程.rar

oracle database 10g基础教程.rar
2007-08-01 上传大小:378KB
分享
收藏 举报
Oracle Database 10g基础教程(第二版)示例代码

Oracle Database 10g基础教程(第二版)示例代码,Oracle Database 10g基础教程(第二版)示例代码

立即下载
Oracle Database 10g基础教程(第二版)PPT和示例代码

Oracle Database 10g基础教程(第二版)PPT,Oracle Database 10g基础教程(第二版)示例代码

立即下载
Oracle Database 10g基础教程

Oracle Database 10g基础教程

立即下载
Oracle 10g 基础教程 习题解答

全书共4篇,分为17章。第1篇为基础篇(第1~5章),主要介绍Oracle数据库基础知识。第2篇为体系结构篇(第6~9章),主要介绍Oracle数据库体系结构,包括物理存储结构、逻辑存储结构、实例,以及Oracle数据库的操作模式与数据字典。第3篇为管理篇(第10~14章),主要介绍Oracle数据库的管理知识,包括数据库的启动与关闭、数据库各种对象的管理、数据库安全性管理、数据库的备份与恢复及闪回技术等。第4篇为应用开发篇(第15~17章),主要介绍Oracle数据库应用开发知识。

立即下载
Oracle Database 10g基础教程_电子课件

Oracle Database 10g基础教程_电子课件

立即下载
Oracle Database 10g基础教程(第二版)

Oracle Database 10g基础教程(第二版)

立即下载
Oracle Database 10g基础教程_电子课件.rar

Oracle Database 10g基础教程电子课件

立即下载
Oracle10g示例代码

Oracle Database 10g基础教程(第二版)示例代码

立即下载
Oracle数据库基础教程(清晰版)

Oracle数据库基础教程(清晰版),分享给大家,有需要的下载吧

立即下载
Oracle Database 10g完全参考手册英文版

Oracle Database 10g完全参考手册.rar

立即下载
Oracle Database 10g基础教程 PPT和示例代码

Oracle Database 10g基础教程 第二版 的PPT和示例代码

立即下载
oracle 10g windows database

oracle 10g windows database 比较老的oracle版本,保证可用

立即下载
Oracle 10g基础教程第二版PPT和示例代码

Oracle Database 10g基础教程第二版PPT和示例代码

立即下载
Oracle Database Sql Reference (10G Release 1)11.rar

Oracle Database Sql Reference (10G Release 1).rarOracle Database Sql Reference (10G Release 1).rar

立即下载
Oracle Database 10g Administration Workshop I中文版

Oracle Database 10g Administration Workshop I中文版 pdf格式

立即下载
Oracle Database 11g完全参考手册--详细书签版

CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 特别说明:该版本是目前网络上最全的版本:修正了所有缺页和错页的问题。 Oracle Database 11g完全参考手册 基本信息 原书名: Oracle Database 11g The Complete Reference 原出版社: McGraw-Hill Osborne Media 作者: (美)Kevin Loney 译者: 刘伟琴 张格仙 出版社:清华大学出版社 ISBN:9787302221920 上架时间:2010-5-26 出版日期:2010 年6月 开本:16开 页码:1240 版次:1-1 内容简介   本书全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有新增功能和工具,如何执行功能强大的SQL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象-关系数据库。通过学习本书,您可以了解如何实现最新的安全措施,如何调优数据库性能,如何部署网格计算技术。附录部分内容丰富、便于参照,包括Oracle命令、关键字、功能以及函数等。    作译者 作者   Kevin Loney是Oracle数据库设计、开发、管理和调整方面的国际知名专家。作为金融界的一名企业数据库架构师,2002年他被Oracle Magazine提名为年度顾问。他的畅销书包括《Oracle Database 11g DBA手册》、Oracle Advanced Tuning and Administration和Oracle SQL&PL;/SQL Annotated Archives。他也为业界的多种杂志撰写了很多技术文章。他经常以贵宾身份出席在北美和欧洲举办的Oracle用户大会。 目录 封面 -19 封底 -18 书名 -17 版权 -16 致谢 -15 目录 -13 第Ⅰ部分 关键的数据库概念 1 第1章 Oracle Database 11g 体系结构 3 1.1 数据库和实例 4 1.2 数据库技术 5 1.2.1 存储数据 6 1.2.2 数据保护 8 1.2.3 可编程的结构 8 1.3 选择体系结构和选项 9 第2章 安装Oracle Database 11g 和创建数据库 11 2.1 许可证和安装选项 13 2.2 使用 OUI 安装 Oracle 软件 13 第3章 升级到 Oracle Database 11g 19 3.1 选择升级方法 20 3.2 升级之前的准备 21 3.3 运行升级前信息工具(Pre-Upgrade Information Tool) 22 3.4 使用数据库升级助手(DBUA) 23 3.5 执行手动直接升级 23 3.6 使用 Export 与Import 24 3.6.1 使用哪个 Export 和Import 版本 24 3.6.2 进行升级 25 3.7 使用数据复制法 25 3.8 升级完成之后的工作 26 第4章 规划Oracle 应用程序——方法、风险和标准 27 4.1 协作方法 28 4.2 每个人都有“数据” 29 4.3 熟悉的 Oracle 语言 30 4.3.1 存储信息的表 31 4.3.2 结构化查询语言 31 4.3.3 简单的Oracle 查询 32 4.3.4 为什么称作“关系” 33 4.4 一些通用的、常见的示例 35 4.5 风险所在 36 4.6 新视角的重要性 37 4.6.1 变化的环境 38 4.6.2 代码、缩写和命名标准 38 4.7 如何减少混淆 39 4.7.1 规范化 40 4.7.2 表和列的英文名称 44 4.7.3 数据中的英文单词 46 4.8 名称和数据中的大写 46 4.9 规范化名称 47 4.10 人性化和优秀的设计 47 4.10.1 理解应用程序的任务 48 4.10.2 任务概要 49 4.11 理解数据 51 4.11.1 原子数据模型 52 4.11.2 原子业务模型 53 4.11.3 业务模型 53 4.11.4 数据项 53 4.11.5 查询和报告 53 4.12 关于对象名称的规范化 54 4.12.1 级别-名称完整性 54 4.12.2 外键 55 4.12.3 单数名称 55 4.12.4 简洁 56 4.12.5 对象名辞典 56 4.13 智能键和列值 56 4.14 建议 57 第Ⅱ部分 SQL和SQL*Plus 59 第5章 SQL 中的基本语法 61 5.1 样式 63 5.2 创建 NEWSPAPER 表 63 5.3 用SQL 从表中选择数据 64 5.4 select 、from 、where和order by 67 5.5 逻辑和值 69 5.5.1 单值测试 70 5.5.2 值列表的简单测试 75 5.5.3 组合逻辑 77 5.6 where 的另一个用途:子查询 78 5.6.1 从子查询得到单值 79 5.6.2 从子查询得到值列表 80 5.7 组合表 82 5.8 创建视图 83 5.9 扩展视图 85 第6章 基本的 SQL*Plus报表和命令 87 6.1 构建简单的报表 89 6.1.1 ①remark 90 6.1.2 ②set headsep 92 6.1.3 ③ttitle 和btitle 92 6.1.4 column 92 6.1.5 ⑧break on 93 6.1.6 ⑨compute avg 94 6.1.7 ⑩set linesize 95 6.1.8 set pagesize 95 6.1.9 set newpage 95 6.1.10 ⑩11spool 96 6.1.11 ⑩12/* */ 97 6.1.12 关于列标题的一些说明 97 6.2 其他特性 98 6.2.1 命令行编辑器 98 6.2.2 设置停顿 101 6.2.3 保存 102 6.2.4 存储 102 6.2.5 编辑 102 6.2.6 host 103 6.2.7 添加SQL*Plus命令 104 6.2.8 启动 104 6.3 检查 SQL*Plus环境 104 6.4 构件块 106 第7章 文本信息的收集与更改 107 7.1 数据类型 108 7.2 什么是串 108 7.3 表示法 109 7.4 连接符(||) 110 7.5 剪切和粘贴串 112 7.5.1 RPAD 和LPAD 112 7.5.2 LTRIM、RTRIM和TRIM 113 7.5.3 组合两个函数 114 7.5.4 使用TRIM 函数 116 7.5.5 再次使用填充函数 117 7.5.6 LOWER、UPPER和INITCAP 117 7.5.7 LENGTH 119 7.5.8 SUBSTR 119 7.5.9 INSTR 122 7.5.10 ASCII和CHR 127 7.6 在order by 和where子句中使用串函数 127 7.6.1 SOUNDEX 128 7.6.2 国际语言支持 130 7.6.3 正则表达式支持 130 7.7 小结 130 第8章 正则表达式搜索 131 8.1 搜索串 132 8.2 REGEXP_SUBSTR 135 8.3 REGEXP_INSTR 137 8.4 REGEXP_LIKE 138 8.5 REPLACE 和REGEXP_REPLACE 139 8.6 REGEXP_COUNT 143 第9章 数值处理 145 9.1 三类数值函数 145 9.2 表示法 146 9.3 单值函数 146 9.3.1 加减乘除 147 9.3.2 NULL 147 9.3.3 NVL:空值置换函数 148 9.3.4 ABS :绝对值函数 149 9.3.5 CEIL 149 9.3.6 FLOOR 150 9.3.7 MOD 150 9.3.8 POWER 151 9.3.9 SQRT :求平方根 151 9.3.10 EXP、LN和LOG 151 9.3.11 ROUND和TRUNC 152 9.3.12 SIGN 153 9.3.13 SIN、SINH、COS、COSH、TAN、TANH、ACOS、ATAN、ATAN2 和ASIN 153 9.4 聚集函数 154 9.4.1 组值函数中的NULL 154 9.4.2 单值函数和组值函数的示例 155 9.4.3 AVG、COUNT、MAX、MIM和SUM 156 9.4.4 组值函数和单值函数的组合 156 9.4.5 STDDEV 和VARIANCE 158 9.4.6 组函数中的DISTINCT 159 9.5 列表函数 160 9.6 使用MAX或MIN 函数查找行 161 9.7 优先级和圆括号的应用 163 9.8 小结 164 第10章 日期:过去、现在及日期的差 165 10.1 日期算法 165 10.1.1 SYSDATE 、CURRENT_DATE及SYSTIMESTAMP 166 10.1.2 两个日期的差 167 10.1.3 添加月份 168 10.1.4 减少月份 168 10.1.5 GREATEST 和LEAST 168 10.1.6 NEXT_DAY 170 10.1.7 LAST_DAY 171 10.1.8 MOMTHS_BETWEEN 171 10.1.9 组合日期函数 172 10.2 日期计算中的ROUND和TRUNC 172 10.3 使用TO_DATE 和TO_CHAR设置日期格式 173 10.3.1 最常见的TO_CHAR 错误 178 10.3.2 NEW_TIME :切换时区 178 10.3.3 TO_DATE 计算 179 10.4 where子句中的日期 181 10.5 处理多个世纪 182 10.6 使用 EXTRACT 函数 183 10.7 使用 TIMESTAMP 数据类型 183 第11章 转换函数与变换函数 185 11.1 基本的转换函数 187 11.1.1 数据类型的自动转换 189 11.1.2 关于自动转换的注意事项 192 11.2 特殊的转换函数 192 11.3 变换函数 193 11.3.1 TRANSLATE 193 11.3.2 DECODE 194 11.4 小结 195 第12章 分组函数 197 12.1 group by 和having 的用法 198 12.1.1 添加一个order by 199 12.1.2 执行顺序 200 12.2 分组视图 202 12.3 用别名重命名列 203 12.4 分组视图的功能 204 12.4.1 在视图中使用order by 205 12.4.2 having子句中的逻辑 206 12.4.3 对列和分组函数进行排序 207 12.4.4 连接列 208 12.5 更多分组可能性 208 第13章 当一个查询依赖于另一个查询时 209 13.1 高级子查询 209 13.1.1 相关子查询 210 13.1.2 并列的逻辑测试 211 13.1.3 EXISTS 及其相关子查询的使用 213 13.2 外部连接 214 13.2.1 Oracle 9i以前版本中的外部连接的语法 215 13.2.2 现在的外部连接语法 216 13.2.3 用外部连接代替NOT IN 218 13.2.4 用NOT EXISTS 代替NOT IN 219 13.3 自然连接和内部连接 220 13.4 UNION﹑INTERSECT和MINUS 221 13.4.1 IN 子查询 224 13.4.2 UNION、INTERSECT和MINUS的限制 224 第14章 一些复杂的技术 225 14.1 复杂的分组 225 14.2 使用临时表 227 14.3 使用ROLLUP﹑GROUPING和CUBE 228 14.4 家族树和 connect by 232 14.4.1 排除个体和分支 235 14.4.2 向根遍历 236 14.4.3 基本规则 238 第15章 更改数据:插入﹑更新﹑合并和删除 239 15.1 插入 240 15.1.1 插入时间 240 15.1.2 用select 插入 241 15.1.3 使用APPEND 提示改善插入性能 242 15.2 rollback、commit和autocommit命令 243 15.2.1 使用savepoint 243 15.2.2 隐式提交 245 15.2.3 自动回滚 245 15.3 多表插入 245 15.4 delete命令 249 15.5 update 命令 250 15.5.1 用嵌入式select 进行更新 251 15.5.2 用NULL 更新 252 15.6 使用 merge命令 253 15.7 处理错误 256 第16章 DECODE 和CASE:SQL中的if-then-else 259 16.1 if-then-else 260 16.2 通过 DECODE替换值 263 16.3 DECODE 中的DECODE 264 16.4 DECODE 中的大于和小于 267 16.5 使用 CASE 269 16.6 使用 PIVOT 272 第17章 创建和管理表、视图、索引、群集和序列 275 17.1 创建表 276 17.1.1 字符宽度和数值精度 277 17.1.2 在插入时进行舍入 279 17.1.3 create table的约束 281 17.1.4 指定索引表空间 282 17.1.5 命名约束 283 17.2 删除表 284 17.3 更改表 284 17.3.1 添加或修改列的规则 287 17.3.2 创建只读表 288 17.3.3 更改当前使用的表 288 17.3.4 创建虚拟列 288 17.3.5 删除列 289 17.4 根据一个表创建另一个表 290 17.5 创建索引编排表 292 17.6 创建视图 293 17.6.1 视图的稳定性 293 17.6.2 视图中的order by 294 17.6.3 创建只读视图 295 17.7 索引 295 17.7.1 创建索引 296 17.7.2 实施唯一性 296 17.7.3 创建唯一索引 297 17.7.4 创建位图索引 297 17.7.5 何时创建索引 298 17.7.6 创建不可见索引 299 17.7.7 索引列的变化 299 17.7.8 一个表能使用多少个索引 299 17.7.9 在数据库中放置索引 300 17.7.10 重建索引 300 17.7.11 基于函数的索引 301 17.8 群集 301 17.9 序列 303 第18章 分区 305 18.1 创建分区表 306 18.2 列表分区 308 18.3 创建子分区 309 18.4 创建范围和间隔分区 309 18.5 索引分区 311 18.6 管理分区表 311 第19章 Oracle 基本安全 313 19.1 用户、角色和权限 314 19.1.1 创建用户 314 19.1.2 密码管理 315 19.1.3 标准角色 318 19.1.4 grant 命令的格式 319 19.1.5 撤消权限 320 19.2 可以授予用户何种权限 320 19.2.1 利用connect移动到另一个用户 322 19.2.2 创建同义词 325 19.2.3 使用未授权的权限 325 19.2.4 权限的传递 325 19.2.5 创建角色 327 19.2.6 为角色授权 327 19.2.7 将一个角色授予另一个角色 328 19.2.8 为用户授予角色 328 19.2.9 为角色添加密码 329 19.2.10 删除角色的密码 329 19.2.11 启用和禁用角色 330 19.2.12 撤消角色的权限 331 19.2.13 删除角色 331 19.2.14 给指定的列授予UPDATE权限 331 19.2.15 撤消对象权限 331 19.2.16 用户安全性 332 19.2.17 给公众授予访问权 333 19.3 有限资源的授权 334 第Ⅲ部分 高 级 主 题 335 第20章 高级安全性——虚拟专用数据库 337 20.1 初始配置 338 20.2 创建应用程序上下文 339 20.3 创建登录触发器 341 20.4 创建安全策略 342 20.5 将安全策略应用于表 343 20.6 测试 VPD 343 20.7 如何实现列级别的 VPD 345 20.8 如何禁用 VPD 346 20.9 如何使用策略组 347 第21章 高级安全性:透明数据加密 349 21.1 列的透明数据加密 349 21.1.1 设置 350 21.1.2 RAC 数据库的额外设置 351 21.1.3 钱夹的打开和关闭 351 21.1.4 列的加密和解密 352 21.2 表空间的加密 353 21.2.1 设置 353 21.2.2 创建加密的表空间 354 第22章 使用表空间 355 22.1 表空间与数据库的结构 355 22.1.1 表空间内容 356 22.1.2 表空间中的RECYCLEBIN空间 358 22.1.3 只读表空间 359 22.1.4 无日志表空间 360 22.1.5 临时表空间 360 22.1.6 用于系统管理撤消的表空间 360 22.1.7 大文件表空间 361 22.1.8 加密的表空间 361 22.1.9 支持闪回数据库 361 22.1.10 移动表空间 362 22.2 规划表空间的使用 362 22.2.1 分离活动表与静态表 362 22.2.2 分离索引与表 362 22.2.3 分离大对象与小对象 363 22.2.4 将应用程序表与核心对象分开 363 第23章 用SQL*Loader 加载数据 365 23.1 控制文件 366 23.2 开始加载 367 23.3 逻辑记录与物理记录 370 23.4 控制文件语法注释 371 23.5 管理数据加载 373 23.6 重复数据加载 373 23.7 调整数据加载 374 23.8 直接路径加载 375 23.9 附加功能 377 第24章 使用Data Pump Export和Data Pump Import 379 24.1 创建目录 380 24.2 Data Pump Export选项 380 24.3 启动 Data Pump Export作业 383 24.3.1 停止和重新启动运行的作业 384 24.3.2 从另一个数据库中导出 385 24.3.3 使用EXCLUDE 、INCLUDE和QUERY 385 24.4 Data Pump Import选项 387 24.5 启动 Data Pump Import作业 389 24.5.1 停止和重新启动运行的作业 391 24.5.2 EXCLUDE、INCLUDE和QUERY 391 24.5.3 转换导入的对象 391 24.5.4 生成SQL 392 第25章 访问远程数据 395 25.1 数据库链接 395 25.1.1 数据库链接是如何工作的 396 25.1.2 利用数据库链接进行远程查询 396 25.1.3 对同义词和视图使用数据库链接 397 25.1.4 利用数据库链接进行远程更新 398 25.1.5 数据库链接的语法 399 25.2 为位置透明性使用同义词 402 25.3 在视图中使用 User 伪列 403 第26章 使用物化视图 405 26.1 功能 406 26.2 必需的系统权限 406 26.3 必需的表权限 407 26.4 只读物化视图与可更新的物化视图 407 26.5 创建物化视图的语法 408 26.5.1 物化视图的类型 411 26.5.2 基于RowID 和基于主键的物化视图 411 26.5.3 使用预建表 412 26.5.4 为物化视图表创建索引 412 26.6 用物化视图更改查询执行路径 412 26.7 使用 DBMS_ADVISOR 414 26.8 刷新物化视图 416 26.8.1 可执行何种刷新 417 26.8.2 用CONSIDER FRESH快速刷新 420 26.8.3 自动刷新 420 26.8.4 人工刷新 421 26.9 创建物化视图日志的语法 422 26.10 更改物化视图和日志 423 26.11 删除物化视图和日志 423 第27章 使用Oracle Text进行文本搜索 425 27.1 将文本添加到数据库中 426 27.2 文本查询和文本索引 427 27.2.1 文本查询 427 27.2.2 可使用的文本查询表达式 428 27.2.3 一个单词精确匹配的搜索 429 27.2.4 多个单词精确匹配的搜索 429 27.2.5 短语精确匹配的搜索 433 27.2.6 搜索互相接近的单词 434 27.2.7 在搜索中使用通配符 434 27.2.8 搜索具有相同词根的单词 435 27.2.9 模糊匹配搜索 436 27.2.10 搜索发音相似的单词 437 27.2.11 使用 ABOUT运算符 438 27.2.12 索引同步 439 27.3 索引集 439 第28章 使用外部表 441 28.1 访问外部数据 442 28.2 创建外部表 443 28.2.1 外部表创建选项 446 28.2.2 创建时加载外部表 451 28.3 更改外部表 452 28.3.1 Access Parameters 子句 452 28.3.2 Add Column 子句 452 28.3.3 Default Directory 子句 452 28.3.4 Drop Column 子句 452 28.3.5 Location 子句 452 28.3.6 Modify Column 子句 452 28.3.7 Parallel 子句 453 28.3.8 Project Column 子句 453 28.3.9 Reject Limit 子句 453 28.3.10 Rename To 子句 453 28.4 外部表的优缺点和潜在用途 453 第29章 使用闪回查询 455 29.1 基于时间的闪回示例 456 29.2 保存数据 457 29.3 基于 SCN 的闪回示例 458 29.4 闪回查询失败的后果 459 29.5 什么 SCN 与每一行关联 460 29.6 闪回版本查询 461 29.7 闪回计划 463 第30章 闪回:表和数据库 465 30.1 flashback table 命令 465 30.1.1 必需的权限 466 30.1.2 恢复删除的表 466 30.1.3 启用和禁用回收站 468 30.1.4 闪回 SCN 或者时间戳 468 30.1.5 索引和统计信息 469 30.2 flashback database 命令 469 第31章 SQL 重放 473 31.1 高级别配置 473 31.1.1 分离和连接 474 31.1.2 创建工作负载目录 474 31.2 捕获工作负载 475 31.2.1 定义过滤器 475 31.2.2 启动捕获 476 31.2.3 停止捕获 477 31.2.4 导出 AW R数据 477 31.3 处理工作负载 477 31.4 重放工作负载 478 31.4.1 控制和启动重放客户 478 31.4.2 初始化和运行重放 479 31.4.3 导出 AW R数据 480 第Ⅳ部分 PL/SQL 481 第32章 PL/SQL 简介 483 32.1 PL/SQL概述 483 32.2 声明部分 484 32.3 可执行命令部分 487 32.3.1 条件逻辑 489 32.3.2 循环 490 32.3.3 CASE 语句 499 32.4 异常处理部分 500 第33章 应用程序在线升级 503 33.1 高可用数据库 503 33.1.1 Oracle Data Guard( 数据卫士)体系结构 504 33.1.2 创建备用数据库配置 506 33.1.3 管理角色——切换和故障转移 507 33.2 最小化 DDL变更的影响 510 33.2.1 创建虚拟列 510 33.2.2 改变正在使用的表 511 33.2.3 添加 NOT NULL 列 512 33.2.4 在线对象重新组织 512 33.2.5 删除列 515 第34章 触发器 517 34.1 必需的系统权限 518 34.2 必需的表权限 518 34.3 触发器类型 518 34.3.1 行级触发器 518 34.3.2 语句级触发器 519 34.3.3 BEFORE和AFTER触发器 519 34.3.4 INSTEAD OF触发器 519 34.3.5 模式触发器 520 34.3.6 数据库级触发器 520 34.3.7 复合触发器 520 34.4 触发器语法 520 34.4.1 DML 触发器类型的组合 522 34.4.2 设置插入值 523 34.4.3 维护复制的数据 524 34.4.4 定制错误条件 525 34.4.5 在触发器中调用过程 527 34.4.6 命名触发器 527 34.4.7 创建 DDL事件触发器 528 34.4.8 创建数据库事件触发器 531 34.4.9 创建复合触发器 532 34.5 启用和禁用触发器 533 34.6 替换触发器 534 34.7 删除触发器 534 第35章 过程、函数与程序包 535 35.1 必需的系统权限 536 35.2 必需的表权限 537 35.3 过程与函数 538 35.4 过程与程序包 538 35.5 create procedure 语法 538 35.6 create function 语法 540 35.6.1 在过程中引用远程表 542 35.6.2 调试过程 543 35.6.3 创建自己的函数 544 35.6.4 定制错误条件 546 35.6.5 命名过程和函数 547 35.7 create package 语法 547 35.8 查看过程对象的源代码 550 35.9 编译过程、函数和程序包 551 35.10 替换过程、函数和程序包 552 35.11 删除过程、函数和程序包 552 第36章 使用本地动态SQL和DBMS_SQL 553 36.1 使用EXECUTE IMMEDIATE 553 36.2 使用绑定变量 555 36.3 使用 DBMS_SQL 556 36.3.1 OPEN_CURSOR 557 36.3.2 PARSE 557 36.3.3 BIND_VARIABLE和BIND_ARRAY 558 36.3.4 EXECUTE 558 36.3.5 DEFINE_COLUMN 558 36.3.6 FETCH_ROWS 、EXECUTE_AND_FETCH和COLUMN_VALUE 559 36.3.7 CLOSE_CURSOR 559 第37章 PL/SQL 调整 561 37.1 调整 SQL 561 37.2 调整 PL/SQL 的步骤 562 37.3 使用DBMS_PROFILE识别问题 563 37.4 将PL/SQL 特性用于批量操作 568 37.4.1 forall 操作 568 37.4.2 bulk collect操作 571 第Ⅴ部分 对象关系数据库 573 第38章 实现对象类型、对象视图和方法 575 38.1 使用对象类型 575 38.1.1 对象类型的安全性 576 38.1.2 索引对象类型属性 579 38.2 实现对象视图 581 38.2.1 通过对象视图操作数据 583 38.2.2 使用INSTEAD OF 触发器 584 38.3 方法 586 38.3.1 创建方法的语法 586 38.3.2 管理方法 588 第39章 收集器(嵌套表和可变数组) 589 39.1 可变数组 589 39.1.1 创建可变数组 590 39.1.2 描述可变数组 590 39.1.3 向可变数组中插入记录 592 39.1.4 从可变数组中选择数据 593 39.2 嵌套表 596 39.2.1 指定嵌套表的表空间 597 39.2.2 向嵌套表中插入记录 597 39.2.3 操作嵌套表 598 39.3 嵌套表与可变数组的附加函数 600 39.4 嵌套表和可变数组的管理问题 601 39.4.1 收集器的可变性 601 39.4.2 数据的位置 602 第40章 使用大对象 603 40.1 可用的数据类型 603 40.2 为LOB 数据指定存储参数 605 40.3 LOB 值的操作和选择 607 40.3.1 初始化值 608 40.3.2 用子查询插入数据 610 40.3.3 更新LOB值 610 40.3.4 使用串函数处理LOB 值 611 40.3.5 使用DBMS_LOB操作LOB 值 612 40.3.6 删除LOB 628 第41章 面向对象的高级概念 629 41.1 行对象和列对象 630 41.2 对象表和 OID 630 41.2.1 把行插入对象表 631 41.2.2 从对象表中选择值 632 41.2.3 从对象表中更新和删除数据 632 41.2.4 REF 函数 633 41.2.5 使用DEREF函数 633 41.2.6 VALUE 函数 636 41.2.7 无效引用 637 41.3 具有 REF 的对象视图 637 41.3.1 对象视图的简要回顾 637 41.3.2 包含引用的对象视图 638 41.4 对象 PL/SQL 641 41.5 数据库中的对象 643 第Ⅵ部分 Oracle 中的Java 645 第42章 Java简介 647 42.1 Java 与PL/SQL 概述 648 42.2 开始 648 42.3 声明 649 42.4 可执行命令 649 42.4.1 条件逻辑 651 42.4.2 循环 654 42.4.3 异常处理 656 42.4.4 保留字 657 42.5 类 657 第43章 JDBC 程序设计 663 43.1 使用 JDBC 类 664 43.2 使用 JDBC 进行数据操作 667 第44章 Java存储过程 671 44.1 将类加载到数据库中 673 44.2 如何访问类 677 44.2.1 直接调用Java 存储过程 679 44.2.2 在何处执行命令 680 第Ⅶ部分 指 南 681 第45章 Oracle 数据字典指南 683 45.1 关于名称的说明 684 45.2 Oracle Database 11g中引入的新视图 684 45.3 路线图:DICTIONARY(DICT)和DICT_COLUMNS 688 45.4 从表、列、视图、同义词和序列中选择 689 45.4.1 目录:USER_CATALOG(CAT) 689 45.4.2 对象:USER_OBJECTS(OBJ) 690 45.4.3 表:USER_TABLES(TABS) 691 45.4.4 列:USER_TAB_COLUMNS(COLS) 693 45.4.5 视图:USER_VIEWS 694 45.4.6 同义词:USER_SYNONYMS(SYN) 696 45.4.7 序列:USER_SEQUENCES(SEQ) 697 45.5 回收站:USER_RECYCLEBIN和DBA_RECYCLEBIN 697 45.6 约束和注释 697 45.6.1 约束:USER_CONSTRAINTS 698 45.6.2 约束列:USER_CONS_COLUMNS 699 45.6.3 约束异常:EXCEPTIONS 700 45.6.4 表注释:USER_TAB_COMMENTS 700 45.6.5 列注释:USER_COL_COMMENTS 701 45.7 索引和群集 702 45.7.1 索引:USER_INDEXES(IND) 702 45.7.2 索引列:USER_IND_COLUMNS 704 45.7.3 群集:USER_CLUSTERS(CLU) 705 45.7.4 群集列:USER_CLU_COLUMNS 705 45.8 抽象数据类型和 LOB 706 45.8.1 抽象数据类型:USER_TYPES 706 45.8.2 LOB :USER_LOBS 708 45.9 数据库链接和物化视图 709 45.9.1 数据库链接:USER_DB_LINKS 709 45.9.2 物化视图 709 45.9.3 物化视图日志:USER_MVIEW_LOGS 711 45.10 触发器、过程、函数和程序包 711 45.10.1 触发器:USER_TRIGGERS 712 45.10.2 过程、函数和程序包:USER_SOURCE 712 45.11 维度 714 45.12 包括分区和子分区的空间分配和使用情况 715 45.12.1 表空间:USER_TABLESPACES 715 45.12.2 空间限额:USER_TS_ QUOTAS 715 45.12.3 段和区:USER_SEGMENTS和USER_EXTENTS 716 45.12.4 分区和子分区 717 45.12.5 可用空间:USER_FREE_SPACE 719 45.13 用户和权限 719 45.13.1 用户:USER_USERS 719 45.13.2 资源限制:USER_RESOURCE_LIMITS 719 45.13.3 表的权限:USER_TAB_PRIVS 720 45.13.4 列权限:USER_COL_PRIVS 720 45.13.5 系统权限:USER_SYS_PRIVS 721 45.14 角色 721 45.15 审计 722 45.16 其他视图 723 45.17 监控:V$动态性能表 723 45.17.1 CHAINED_ROWS 723 45.17.2 PLAN_TABLE 724 45.17.3 相互依赖性:USER_DEPENDENCIES和IDEPTREE 724 45.17.4 只属于DBA的视图 724 45.17.5 Oracle Label Security 724 45.17.6 SQL*Loader直接加载视图 725 45.17.7 全球支持视图 725 45.17.8 库 725 45.17.9 异构服务 725 45.17.10 索引类型和运算符 725 45.17.11 概要 726 45.17.12 顾问程序 726 45.17.13 调度程序 726 第46章 应用程序和 SQL 调整指南 727 46.1 Oracle Database 11g新增的调整功能 728 46.2 Oracle 11g新增的调整特性 728 46.3 调整——最优方法 729 46.3.1 尽可能少做 730 46.3.2 尽可能简单地完成 732 46.3.3 告诉数据库需要知道什么 733 46.3.4 最大化环境中的吞吐量 734 46.3.5 分开处理数据 735 46.3.6 正确测试 736 46.4 生成并读取说明计划(explain plan) 738 46.4.1 使用set autotrace on 738 46.4.2 使用explain plan 742 46.5 Explain Plan 中的主要操作 743 46.5.1 TABLE ACCESS FULL 743 46.5.2 TABLE ACCESS BY INDEX ROWID 744 46.5.3 相关提示 744 46.5.4 使用索引的操作 744 46.5.5 何时使用索引 746 46.5.6 操纵数据集的操作 751 46.5.7 执行连接的操作 757 46.5.8 Oracle如何处理两个以上表的连接 758 46.5.9 并行化和缓存问题 764 46.6 实现存储概要 764 46.7 小结 766 第47章 SQL 结果缓存和客户端查询缓存 767 47.1 SQL 结果缓存的数据库参数设置 774 47.2 DBMS_RESULT_CACHE程序包 775 47.3 SQL 结果缓存的字典视图 776 47.4 SQL 结果缓存的更多细节 777 47.5 Oracle 调用接口(OCI) 客户端查询缓存 777 47.6 Oracle 调用接口(OCI) 客户端查询缓存的限制 778 第48章 关于调整的示例分析 779 48.1 示例分析1 :等待、等待、再等待 779 48.2 示例分析2 :破坏应用程序的查询 782 48.3 示例分析3 :长期运行的批处理作业 786 第49章 高级体系结构选项——DB保险库、内容DB和记录DB 789 49.1 Oracle 数据库保险库 790 49.1.1 Oracle数据库保险库的新概念 790 49.1.2 禁用Oracle 数据库保险库 791 49.1.3 启用Oracle 数据库保险库 792 49.1.4 数据库保险库安装的注意事项 793 49.2 Oracle 内容数据库套件 796 49.2.1 存储库 796 49.2.2 文档管理 797 49.2.3 用户安全性 797 49.3 Oracle 记录数据库 798 第50章 Oracle 实时应用群集 801 50.1 安装前的准备 802 50.2 安装 RAC 802 50.2.1 存储 803 50.2.2 初始化参数 803 50.3 启动和停止 RAC实例 805 50.4 透明应用程序故障切换 807 50.5 为群集添加节点和实例 808 第51章 数据库管理指南 811 51.1 创建数据库 812 51.2 启动和停止数据库 813 51.3 设置和管理内存区域大小 814 51.4 分配和管理对象的空间 816 51.4.1 存储子句的含义 817 51.4.2 表段 818 51.4.3 索引段 819 51.4.4 系统管理的撤消 819 51.4.5 临时段 820 51.4.6 可用空间 821 51.4.7 设置数据库对象的大小 822 51.5 监控撤消表空间 824 51.6 自动存储管理 824 51.7 段空间管理 825 51.8 移动表空间 826 51.8.1 生成可移动表空间集 826 51.8.2 插入可移动表空间集 827 51.9 进行备份 828 51.9.1 Data Pump Export 和Data Pump Import 828 51.9.2 脱机备份 829 51.9.3 联机备份 830 51.9.4 Recovery Manager 833 51.10 展望 834 第52章 Oracle 中的 XML指南 835 52.1 文档类型定义、元素及属性 836 52.2 XML 模式 839 52.3 使用XSU选择、插入、更新和删除XML值 841 52.3.1 使用XSU 进行插入、更新和删除 843 52.3.2 XSU 和Java 844 52.3.3 定制查询过程 845 52.4 使用 XMLType 846 52.5 其他功能 848 第Ⅷ部分 附 录 849 附录A 命令和术语参考 851

立即下载
Oracle Database 9i10g11g编程艺术:深入数据库体系结构(第2版)--详细书签版

CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构:第2版(世界顶级专家Thomas Kyte力作) 基本信息 原书名: Expert Oracle Database Architecture: Oracle Database Programming 9i, 10g, and 11g Techniques and Solutions, Second Edition [ 原出版社: Apress 作者: (美)Thomas Kyte 译者: 苏金国 王小振 丛书名: 图灵程序设计丛书 数据库 出版社:人民邮电出版社 ISBN:9787115244857 上架时间:2011-1-5 出版日期:2011 年1月 开本:16开 页码:706 版次:2-1 编辑推荐   久负盛名的Oracle经典    世界顶级专家Thomas Kyte力作    Ask Tom!解决你所有的Oracle疑难杂症 内容简介   本书是一本关于oracle database 9i、10g 和11g 数据库体系结构的权威图书,涵盖了所有重要的oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及数据加密等,并利用具体的例子来全面介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用这个特性来开发软件,以及有关的常见陷阱。    本书面向所有oracle 数据库应用开发人员和dba。 作译者 作者   Thomas Kyte Oracle公司核心技术集团副总裁。从5.1.1c版本开始使用Oracle,自7.0.9版本发布就一直任职于Oracle公司,帮助Oracle数据库用户设计和构建系统,或者对系统进行重构和调优。此前曾是一位系统集成师,主要为美国军方和政府部门的客户构建大规模的异构数据库和应用。长期主持Oracle Magazine “Ask Tom”专栏,热心回答困扰全世界Oracle开发人员和DBA的各种问题。除本书外,还著有广受好评的《Oracle专家高级编程》和《Oracle高效设计》。 作者: Thomas Kyte   Thomas Kyte是Oracle公司核心技术集团的副总裁,从Oracle 7.0.9版本开始就一直任职于Oracle公司,不过,其实他从5.1.5c版本就开始使用Oracle了。 在Oracle公司,Kyte专门负责Oracle数据库,他的任务是帮助使用Oracle数据库的客户,并与他们共同设计和构建系统,或者对系统进行重构和调优。在进入Oracle公司之前,Kyte是一名系统集成人员,主要为美国军方和政府部门的客户构建大规模、异构数据库。 Thomas Kyte就是主持Oracle Magazine Ask Tom专栏和Oracle公司同名在线论坛的那个Tom,他通过这一方式热心地回答困扰着Oracle开发人员和DBA的各种问题。 目录 封面 -40 版权声明 -38 译者序 -37 序 -36 第1版序 -34 前言 -31 致谢 -24 配置环境 -23 目录 -5 第1章 开发成功的Oracle应用 1 1.1 我的方法 2 1.2 黑盒方法 3 1.3 开发数据库应用的正确(和不正确)方法 10 1.3.1 了解Oracle体系结构 11 1.3.2 理解并发控制 19 1.3.3 多版本控制 22 1.3.4 数据库独立性 28 1.3.5 怎么能让应用运行得更快 42 1.3.6 DBA与开发人员的关系 44 1.4 小结 45 第2章 体系结构概述 46 2.1 定义数据库和实例 47 2.2 SGA和后台进程 52 2.3 连接Oracle 54 2.3.1 专用服务器 54 2.3.2 共享服务器 56 2.3.3 TCP/IP连接的基本原理 57 2.4 小结 59 第3章 文件 60 3.1 参数文件 61 3.1.1 什么是参数 62 3.1.2 遗留的init.ORA参数文件 65 3.1.3 服务器参数文件 67 3.1.4 参数文件小结 72 3.2 跟踪文件 73 3.2.1 请求的跟踪文件 74 3.2.2 针对内部错误生成的跟踪文件 78 3.2.3 跟踪文件小结 82 3.3 警告文件 83 3.4 数据文件 85 3.4.1 简要回顾文件系统机制 86 3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 90 3.5 临时文件 92 3.6 控制文件 94 3.7 重做日志文件 94 3.7.1 在线重做日志 95 3.7.2 归档重做日志 97 3.8 密码文件 99 3.9 修改跟踪文件 102 3.10 闪回日志 103 3.10.1 闪回数据库 103 3.10.2 闪回恢复区 104 3.11 DMP文件(EXP/IMP文件) 104 3.12 数据泵文件 105 3.13 平面文件 108 3.14 小结 109 第4章 内存结构 110 4.1 进程全局区和用户全局区 110 4.1.1 手动PGA内存管理 111 4.1.2 自动PGA内存管理 117 4.1.3 手动和自动内存管理的选择 127 4.1.4 PGA和UGA小结 129 4.2 系统全局区 129 4.2.1 固定SGA 133 4.2.2 重做缓冲区 134 4.2.3 块缓冲区缓存 135 4.2.4 共享池 141 4.2.5 大池 143 4.2.6 JAVA池 144 4.2.7 流池 145 4.2.8 自动SGA内存管理 145 4.2.9 自动内存管理 147 4.3 小结 148 第5章 Oracle进程 149 5.1 服务器进程 149 5.1.1 专用服务器连接 150 5.1.2 共享服务器连接 152 5.1.3 数据库常驻连接池 152 5.1.4 连接与会话 153 5.1.5 专用服务器与共享服务器 158 5.1.6 专用/共享服务器小结 161 5.2 后台进程 162 5.2.1 中心后台进程 163 5.2.2 工具后台进程 171 5.3 从属进程 173 5.3.1 I/O从属进程 173 5.3.2 Pnnn:并行查询执行服务器 174 5.4 小结 175 第6章 锁和闩 176 6.1 什么是锁 176 6.2 锁定问题 179 6.2.1 丢失更新 179 6.2.2 悲观锁定 180 6.2.3 乐观锁定 182 6.2.4 乐观锁定还是悲观锁定 188 6.2.5 阻塞 188 6.2.6 死锁 191 6.2.7 锁升级 195 6.3 锁类型 195 6.3.1 DML锁 196 6.3.2 DDL锁 204 6.3.3 闩 209 6.3.4 手动锁定和用户定义锁 217 6.4 小结 218 第7章 并发与多版本控制 219 7.1 什么是并发控制 219 7.2 事务隔离级别 220 7.2.1 READ UNCOMMITTED 221 7.2.2 READ COMMITTED 223 7.2.3 REPEATABLE READ 224 7.2.4 SERIALIZABLE 226 7.2.5 READ ONLY 228 7.3 多版本控制读一致性的含义 229 7.3.1 一种会失败的常用数据仓库技术 229 7.3.2 解释热表上超出期望的I/O 230 7.4 写一致性 233 7.4.1 一致读和当前读 233 7.4.2 查看重启动 235 7.4.3 为什么重启动对我们很重要 238 7.5 小结 239 第8章 事务 240 8.1 事务控制语句 240 8.2 原子性 242 8.2.1 语句级原子性 242 8.2.2 过程级原子性 244 8.2.3 事务级原子性 247 8.2.4 DDL与原子性 247 8.3 持久性 247 8.3.1 COMMIT的WRITE扩展 248 8.3.2 非分布式PL/SQL代码块中的COMMIT 249 8.4 完整性约束和事务 250 8.4.1 IMMEDIATE约束 251 8.4.2 DEFERRABLE约束和级联更新 251 8.5 不好的事务习惯 255 8.5.1 在循环中提交 255 8.5.2 使用自动提交 261 8.6 分布式事务 261 8.7 自治事务 263 8.7.1 自治事务如何工作 264 8.7.2 何时使用自治事务 265 8.8 小结 268 第9章 redo与undo 269 9.1 什么是redo 269 9.2 什么是undo 270 9.3 redo和undo如何协作 273 9.4 提交和回滚处理 277 9.4.1 COMMIT做什么 277 9.4.2 ROLLBACK做什么 283 9.5 分析redo 284 9.5.1 测量redo 284 9.5.2 能关掉重做日志生成程序吗 286 9.5.3 为什么不能分配一个新日志 289 9.5.4 块清除 291 9.5.5 日志竞争 294 9.5.6 临时表和redo/undo 296 9.6 分析undo 299 9.6.1 什么操作会生成最多和最少的undo 299 9.6.2 ORA-01555: snapshot too old 错误 301 9.7 小结 310 第10章 数据库表 311 10.1 表类型 311 10.2 术语 313 10.2.1 段 313 10.2.2 段空间管理 315 10.2.3 高水位线 316 10.2.4 FREELIST 317 10.2.5 PCTFREE和PCTUSED 320 10.2.6 LOGGING和NOLOGGING 323 10.2.7 INITRANS和MAXTRANS 324 10.3 堆组织表 324 10.4 索引组织表 327 10.5 索引聚簇表 340 10.6 散列聚簇表 347 10.7 有序散列聚簇表 355 10.8 嵌套表 357 10.8.1 嵌套表语法 358 10.8.2 嵌套表存储 364 10.8.3 嵌套表小结 367 10.9 临时表 368 10.10 对象表 374 10.11 小结 380 第11章 索引 382 11.1 Oracle索引概述 382 11.2 B*树索引 384 11.2.1 索引键压缩 386 11.2.2 反向键索引 389 11.2.3 降序索引 -1 11.2.4 什么情况下应该使用B*树索引 396 11.2.5 B*树小结 405 11.3 位图索引 406 11.3.1 什么情况下应该使用位图索引 407 11.3.2 位图联结索引 410 11.3.3 位图索引小结 413 11.4 基于函数的索引 413 11.4.1 重要的实现细节 413 11.4.2 一个简单的基于函数的索引例子 414 11.4.3 只对部分行建立索引 422 11.4.4 实现有选择的唯一性 424 11.4.5 关于ORA-01743的警告 424 11.4.6 基于函数的索引小结 425 11.5 应用域索引 -1 11.6 关于索引的常见问题和神话 426 11.6.1 视图能使用索引吗 427 11.6.2 Null和索引能协作吗 427 11.6.3 外键是否应该加索引 429 11.6.4 为什么没有使用我的索引 430 11.6.5 神话:索引中从不重用空间 435 11.6.6 神话:最有差别的元素应该在最前面 438 11.7 小结 441 第12章 数据类型 442 12.1 Oracle数据类型概述 442 12.2 字符和二进制串类型 444 12.2.1 NLS概述 445 12.2.2 字符串 448 12.3 二进制串:RAW类型 453 12.4 数值类型 455 12.4.1 NUMBEI类型的语法和用法 457 12.4.2 BINARY_FLOAT/BINARY_DOUBLE类型的语法和用法 460 12.4.3 非固有数值类型 461 12.4.4 性能考虑 461 12.5 LONG类型 463 12.5.1 LONG和LONG RAW类型的限制 463 12.5.2 处理遗留的LONG类型 464 12.6 DATE、TIMESTAMP和INTERVAL类型 469 12.6.1 格式 469 12.6.2 DATE类型 470 12.6.3 TIMESTAMP类型 475 12.6.4 INTERCAL类型 482 12.7 LOB类型 484 12.7.1 内部LOB -1 12.7.2 BFILE 495 12.8 ROWID/UROWID类型 497 12.9 小结 497 第13章 分区 499 13.1 分区概述 499 13.1.1 提高可用性 500 13.1.2 减少管理负担 502 13.1.3 改善语句性能 505 13.2 表分区机制 507 13.2.1 区间分区 508 13.2.2 散列分区 510 13.2.3 列表分区 513 13.2.4 间隔分区 515 13.2.5 引用分区 520 13.2.6 组合分区 524 13.2.7 行移动 526 13.2.8 表分区机制小结 528 13.3 索引分区 529 13.3.1 局部索引与全局索引 530 13.3.2 局部索引 530 13.3.3 全局索引 535 13.4 再论分区和性能 547 13.5 审计和段空间压缩 552 13.6 小结 553 第14章 并行执行 555 14.1 何时使用并行执行 556 14.2 Oracle Exadata 558 14.3 并行查询 558 14.4 并行DML 564 14.5 并行DDL 566 14.5.1 并行DDL和使用外部表的数据加载 567 14.5.2 并行DDL和区段截断 568 14.6 并行恢复 576 14.7 过程并行化 577 14.7.1 并行管道函数 578 14.7.2 DIY并行化 580 14.7.3 老式DIY并行化 583 14.8 小结 587 第15章 数据加载和卸载 588 15.1 SQLLDR 588 15.1.1 用SQLLDR加载数据的常见问题 592 15.1.2 SQLLDR警告 613 15.1.3 SQLLDR小结 614 15.2 外部表 614 15.2.1 建立外部表 615 15.2.2 处理错误 619 15.2.3 使用外部表加载不同的文件 622 15.2.4 多用户问题 623 15.2.5 外部表小结 624 15.3 平面文件卸载 624 15.4 数据泵卸载 631 15.5 小结 633 第16章 数据加密 634 16.1 加密类型 634 16.1.1 动态数据 634 16.1.2 静态数据 635 16.1.3 手动应用加密 638 16.1.4 Oracle钱夹 639 16.1.5 透明列级加密 641 16.1.6 透明表空间加密 644 16.2 加密不是访问控制 646 16.3 实现手动应用加密 647 16.3.1 避免使用手动方法的原因 648 16.3.2 手动方法的性能影响 648 16.3.3 何时使用手动方法 652 16.4 实现列级加密 652 16.4.1 如何使用列级加密 653 16.4.2 列级加密的数据存储 653 16.4.3 测量列级加密的性能影响 657 16.4.4 影响大小 657 16.4.5 列级加密的限制 662 16.5 实现表空间加密 663 16.5.1 如何使用表空间加密 663 16.5.2 表空间加密的数据存储 664 16.5.3 测量表空间加密的性能影响 665 16.6 决定采用哪种加密技术 670 16.7 小结 671 索引 672 译者序   Oracle Database 11g的推出让关注Oracle的人欣喜万分,不过也不免有些担心,因为此前还没有合适的书系统而深入地介绍这个新版本。要想学习和掌握它的诸多新特性,只能从Oracle手册入手,而数万页的11g手册不免让人心存畏惧,从中挑出对新特性的描述更需要一双“火眼金睛”。   好消息!在本书第1版出版时隔4年后,Thomas Kyte及时了解了大家的这一迫切需求,根据他的实战经验以及人们最关心的问题对这本书做了全面补充和调整,以涵盖11g最受关注的多项特性。例如11g引入dbms_parallel_execute包来帮助自动实现原来需要人工实现的并行化,以及引入PSQ来控制并行度,限制资源的过度使用,从而进一步改进并行化的实现。11g还增加了对递归调用子查询的支持,来避免原先令人费解的connect by语法。另外通过闪回数据归档支持长期闪回查询,这意味着查询几个月前甚至几年前的数据不再是奇谈。延迟段创建特性的引入更让我们看到了Oracle对于性能的“锱珠必较”和精益求精。所有这些内容都在这一版中得以体现,Tom还专门增加了一章来讨论Oracle中的数据加密。相信你的问题都能在这一版中得到解答。   这一版仍沿袭了上一版的叙事风格,Tom通过轻松交流的方式,让你从具体的例子、具体的实践中了解技术细节,在知道“怎样做”的同时还能理解“为什么这样做”。还特别根据读者对上一版内容的反馈,在文中追加了大量注解,另外还利用注解强调了11g与9i/10g的区别。相信你已经迫不及待地想要翻开下一页了,那么,进入Tom的Oracle世界吧!   很高兴上一版出版后得到了读者的青睐,能够让更多中国读者领略Tom的这一力作,这让我们也倍感自豪。对于第2版的翻译,我们同样不敢马虎,尽量减少歧义,希望能让读者更轻松地阅读和理解。不过由于水平有限,译文肯定有不当之处,敬请批评指正。       前言   过去我一直在开发Oracle软件,并与其他Oracle开发人员一同工作,帮助他们构建可靠、健壮的基于Oracle数据库应用程序。在这个过程中积累了一些经验,正是这些经验赋予我灵感,才有了本书中的内容。这本书实际上反映了我每天做了些什么,汇集了我所看到的人们每天遇到的问题。   本书涵盖了我认为最重要的一些内容,即Oracle数据库及其体系结构。我也可以写一本书名类似的其他方面的书,向你解释如何用一种特定的语言和体系结构开发应用程序。例如,我可以告诉你如何使用JSP(JavaServer Pages)与EJB(Enterprise JavaBeans)通信,EJB又如何使用JDBC与Oracle通信。不过,归根结底,最后还是要了解Oracle数据库及其体系结构(本书介绍的内容),才能成功地构建这样一个应用程序。要想成功地使用Oracle进行开发,我认为有些内容你必须了解,而不论你是一位使用ODBC的Visual Basic程序员、使用EJB和JDBC的Java程序员,还是使用DBI Perl的Perl程序员,这本书都会介绍这些通用的知识。本书并不推崇哪一种特定的应用体系结构,在此没有比较三层结构和客户/服务器结构孰优孰劣。我们只是讨论数据库能做什么,另外关于数据库如何工作,我们还会指出你必须了解哪些内容。由于数据库是所有应用体系结构的核心,所以这本书适用面很广。   顾名思义,本书的重点是数据库体系结构,并强调数据库本身如何工作。我会深入地分析Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库和实例的进程。然后讨论一些重要的数据库主题,如锁定、并发控制、事务、redo和undo,还会解释为什么了解这些内容很重要。最后,我们再来分析数据库中的物理结构,如表、索引和数据类型,并介绍哪些技术能最优地使用这些物理结构。   本书内容   如果开发的选择余地很大,则会带来一些问题,其中一个问题是有时很难确定哪种选择最能满足特定需求。每个人都希望灵活性尽可能大(有尽可能多的选择),同时又希望能简单明了,换句话说,希望尽量容易。Oracle为开发人员提供的选择几乎无穷无尽。没有人会说“这在Oracle中做不到”,而只会说“在Oracle中你想用多少种不同的方法来实现”。希望这本书能帮你作出正确的选择。   如果你不只是想知道做何选择,还想了解有关Oracle特性和功能的一些原则和实现细节,这本书就很适合你。例如,Oracle有一个很棒的特性,称为并行执行(parallel execution)。Oracle文档会告诉你如何使用这个特性,并说明它到底能做什么。不过,Oracle文档没有告诉你应该在什么时候用这个特性,更重要的是没有指出什么时候不该使用这个特性。另外,文档一般没有提供特性的实现细节,如果你不清楚,可能会因此而困扰(我指的不是bug,而是说你可能很想知道这个特性如何工作,以及为此是怎样具体设计的,但从文档中找不到答案)。   在本书中,我不仅会尽力阐明各个特性如何工作,还会指出什么情况下要考虑使用某个特性或实现,并解释为什么。我认为,理解“怎么做”固然很重要,但理解“什么时候做”和“为什么这样做”(以及“什么时候不做”和“为什么不做”)也同样重要!   读者对象   本书面向那些使用Oracle作为数据库后端开发应用程序的人员。专业Oracle开发人员如果想了解如何在数据库中完成某些工作,同样可以参考本书。本书相当实用,所以DBA也会对书中的许多内容感兴趣。书中大部分例子都使用SQL*Plus来展示关键特性,所以如果想通过本书来了解如何开发一个很酷的GUI,可能不能如愿。不过,从这本书中,你将知道Oracle数据库如何工作,它的关键特性能做些什么,以及什么时候应该(和不应该)使用这些特性。   如果你想事半功倍地使用Oracle,如果你想了解使用现有特性的新方法,如果你想知道这些特性在真实世界中如何应用(不只是展示如何使用特性,而是首先分析为什么要用这个特性),就请阅读本书。作为技术经理,如果你手下的开发人员在开发Oracle项目,你可能也会对本书感兴趣。从某种程度上讲,技术经理也要懂数据库,而且要知道这对于成功至关重要。如果技术经理想安排员工进行适当的技术培训,或者想确保员工了解他们应该掌握的技术,就可以利用本书来“充电”。   要想更好地学习本书的内容,要求具备以下能力。   了解SQL。不要求你能编写最棒的SQL代码,但是如果用过SQL,对SQL有实战经验,这会很有帮助。   掌握PL/SQL。这不是一个必要的前提,但是有助于你“领会”书中的例子。例如,本书不会教你怎样编写一个FOR循环,或者如何声明一个记录类型,这些内容可以参考Oracle文档和许多相关的图书。不过,这并不是说你从本书中学不到PL/SQL的知识。不是这样的。通过阅读本书,你会对PL/SQL的许多特性相当熟悉,而且会学到一些新方法,还会注意到你以前以为不存在的一些包和特性。   接触过某种第三代语言(third-generation language,3GL),如C或Java。我相信,如果你能阅读3GL语言编写的代码,或者编写过这种代码,肯定能顺利地阅读和理解本书中的例子。   熟悉Oracle Concepts手册。   最后再说两句,由于Oracle文档实在太庞大了,这让很多人都有些畏惧。如果你刚开始读Oracle Concepts手册,或者还没有看过,那我可以告诉你,这个手册绝对是一个很好的起点。它大约有400页(我知道页数是因为我编写了一部分,并且编辑了每一页),涉及你需要知道的许多重要的Oracle概念。其中不会涵盖每一个技术细节(Oracle文档提供了技术细节,不过它有10 000页到20 000页之多),但你能从中学到所有重要的概念。这个手册涉及以下主题(这里所列的并不完整):   数据库中的结构,数据如何组织和存储;   分布式处理;   Oracle的内存体系结构;   Oracle的进程体系结构; .  你要使用的模式对象(表、索引、聚簇等);   内置数据类型和用户定义的数据类型;   SQL存储过程;   事务如何工作;   优化器;   数据完整性;   并发控制。   我自己也会时不时地温习这些内容。这些都是基础,如果不了解这些知识,创建的Oracle应用程序就很容易失败。建议通读Oracle Concepts手册来了解这些主题。   本书组织结构   为了帮助你更好地使用本书,大部分章都分为4个部分(见稍后的内容)。这个划分并不严格,不过有助于你快速地找到感兴趣的方面,从中获得所需的更多信息。本书有16章,每一章都像一本“迷你书”,可以单独成册。有时我会引用其他章中的例子或特性,不过你完全可以从书中任选一章,不参考其他章也能顺利阅读。例如,要理解或使用第14章关于并行机制的知识,就不必先阅读介绍数据库表的第10章。   许多章的格式和风格基本上都一样。   首先是特性或功能的介绍。   说明为什么想使用(或者不想使用)这个特性或功能。我会概述哪些情况下要考虑使用这个特性,而哪些情况下不考虑。   如何使用这个特性。这里提供的信息不是完全照搬SQL参考资料中的内容,而是会以一种循序渐进的方式组织。我会清楚地指出哪些是你需要的,哪些是你必须做的,另外哪些环节需要仔细检查。这一部分包括以下内容:   如何实现这个特性;   许许多多的例子;   如何调试这个特性;   使用这个特性的忠告;   如何(主动地)处理错误。   对上述内容的小结。   书中有相当多的例子和大量的代码,这些都可以从http://www.apress.com 的Source Code区下载。下面将详细介绍每一章的内容。   第1章:开发成功的Oracle应用   从这一章开始,我将介绍数据库编程的基本方法。所有数据库创建得并不一样,要想按时、成功地开发数据库驱动的应用,你必须了解你的数据库能做什么,是怎么做的。如果不清楚数据库能做什么,就很可能不断地遭遇“闭门造车”的窘境,徒劳地从头开发数据库本已提供的功能;如果不清楚数据库是怎么工作的,很可能开发出性能很差的应用,达不到预期的要求。   这一章先根据经验分析了一些应用,这些应用都因为缺乏对数据库的基本理解而导致项目失败。这一章就采用这种“拿例子说话”的方式,讨论了开发人员必须了解数据库的哪些基本特性和功能。关键是,不要把数据库当成一个黑盒,不要认为它能自己努力得出答案并自行负责可扩展性和性能。   第2章:体系结构概述   这一章介绍Oracle体系结构的基础知识。首先给出两个术语的明确定义——“实例”(instance)和“数据库”(database),Oracle领域的许多人都对这两个词存在误解。我们还会简要介绍系统全局区(System Global Area,SGA)和Oracle实例底层的进程,并分析“连接Oracle”这样一个简单的动作是如何实现的。   第3章:文件   这一章将深入介绍构成Oracle 数据库和实例的8类文件,从简单的参数文件到数据文件和重做日志文件(redo log file)都会涵盖它们。我们将说明这些文件是什么,为什么有这些文件,以及如何使用它们。   第4章:内存结构   这一章讨论Oracle如何使用内存,包括各个进程中的内存(PGA内存,PGA即进程全局区)和共享内存(SGA)。我们会分析手动和自动PGA内存管理之间的区别,并介绍Oracle Database 10g中的SGA内存管理,还会说明各种方法适用于什么情况。读完这一章之后,你会对Oracle如何使用和管理内存有深入的了解。   第5章:Oracle进程   这一章概述了各种Oracle进程(服务器进程和后台进程),另外还相当深入地讨论了通过共享服务器进程或专用服务器进程连接数据库有何区别。启动Oracle实例时会看到一些后台进程,这一章将逐一介绍其中一些重要的后台进程(如LGWR、DBWR、PMON和SMON),并分别讨论这些进程的功能。   第6章:锁和闩   不同的数据库有不同的行事方法(SQL Server里能做的在Oracle中不一定能做)。应当了解Oracle如何实现锁定和并发控制,这对于应用的成功至关重要。这一章将讨论Oracle解决这些问题的基本方法,可以应用哪些类型的锁[DML、DDL和闩(latch)],还会指出如果锁定实现不当,会出现哪些问题(死锁、阻塞和锁升级)。   第7章:并发与多版本控制   这一章介绍我最喜欢的Oracle特性——多版本控制(multi-versioning),并讨论它对并发控制和应用设计有什么影响。在这里能清楚地看到,所有数据库创建得都不一样,具体的实现会对应用的设计产生影响。我们先回顾ANSI SQL标准定义的各个事务隔离级别,并介绍它们在Oracle中的具体实现(还会介绍其他数据库中的实现)。基于多版本特性,Oracle能够在数据库中提供非阻塞读(non-blocking read),本章接下来会分析多版本特性对我们有什么影响。   第8章:事务   事务是所有数据库的一个基本特性,这也是数据库区别于文件系统的一个方面。不过,事务常常遭到误解,很多开发人员甚至不知道他们有时没有使用事务。这一章将讨论Oracle中应当如何使用事务,还列出了使用其他数据库进行开发时可能出现的一些“坏习惯”。具体而言,我们将讨论原子性的含义,并说明原子性对Oracle中的语句有何影响。这一章还会讨论事务控制语句(COMMIT、SAVEPOINT和ROLLBACK)、完整性约束和分布式事务(两段提交或2PC),最后介绍自治事务。   第9章:redo与undo   可能有人说,开发人员不用像DBA那样深入地了解redo(重做信息)和undo(撤销信息)的细节,但是开发人员确实要清楚redo和undo在数据库中所起的重要作用。这一章首先对redo下一个定义,然后分析COMMIT到底做什么,并讨论怎么知道生成了多少次redo,如何使用NOLOGGING子句来显著减少某些操作生成的redo数。我们还研究了redo生成与块清除(block cleanout)和日志竞争(log contention)等问题的关系。   这一章的9.6节中讨论了撤销数据的作用,并介绍哪些操作会生成最多/最少的undo。最后分析“讨厌”的ORA-01555:snapshot too old(ORA-01555:快照太旧)错误,解释导致这个错误的可能原因,并说明如何避免。   第10章:数据库表   Oracle现在支持多种表类型。这一章将分别介绍每一种类型,包括堆组织表(heap organized,也就是默认的“普通”表)、索引组织表(index organized)、索引聚簇表(index clustered)、散列聚簇表(hash clustered)、嵌套表(nested)、临时表(temporary)和对象表(object),并讨论什么时候使用这些类型的表、如何使用以及为什么使用。大多数情况下,堆组织表就足够了,不过这一章还将帮助你认识到在哪些情况下使用其他类型的表更合适。   第11章:索引   索引是应用设计的一个重要方面。要想正确地实现索引,要求深入地了解数据,清楚数据如何分布,并且知道要如何使用数据。人们经常把索引当做“马后炮”,直到应用开发的后期才增加,这就会导致应用的性能低下。   这一章将详细分析各种类型的索引,包括B*树索引、位图索引(bitmap index)、基于函数的索引(function-based index)和应用域索引(application domain index),并讨论各种索引应该在哪些场合使用,以及哪些场合不适用。我会在11.6节回答常常被问到的一些问题,如“索引能在视图上使用吗”和“为什么没有使用我的索引”。   第12章:数据类型   有许多数据类型可供选择。这一章会逐一分析22种内置数据类型,解释这些类型是如何实现的,并说明如何以及何时使用这些数据类型。首先对国家语言支持(National Language Support,NLS)做一个简要的概述。要想充分理解Oracle中简单的串类型,必须先掌握这个基础知识。接下来再讨论广泛使用的NUMBER类型,并介绍Oracle Database 10g 对于在数据库中存储数值又提供了哪些新的选项。我们主要从历史角度介绍LONG和LONG RAW类型,目的是讨论如何处理应用中遗留的LONG列,并将其移植为LOB类型。然后会深入分析存储日期和时间的各种数据类型,讨论如何处理这些数据类型来得到我们想要的结果。这里还会谈到时区支持的有关细节。   接下来讨论LOB数据类型。我们会说明LOB类型的存储方式,并指出各种设置(如IN ROW、CHUNK、RETENTION、CACHE等)对我们有什么意义。处理LOB时,重要的是要了解默认情况下它们如何实现和存储,在对LOB的获取和存储进行调优时这一点尤其重要。本章的最后介绍ROWID和UROWID类型。这些是Oracle专用的特殊类型,用于表示行地址。我们会介绍什么时候可以将它们用作表中的列数据类型。(这种情况几乎从来不会出现!)   第13章:分区   分区(partitioning)的目的是为了便于管理非常大的表和索引,即实现一种“分而治之”的逻辑,实际上就是把一个表或索引分解为多个较小的、更可管理的部分。在这方面,DBA和开发人员必须协作,使应用能有最大的可用性和最高的性能。这一章介绍了表分区和索引分区。我们会谈到使用局部索引(在数据仓库中很常用)和全局索引(常见于OLTP系统)的分区。   第14章:并行执行   这一章介绍了Oracle中并行执行(parallel execution)的概念,并说明了如何使用并行执行。首先指出并行处理在什么情况下有用,以及哪些情况下不应考虑使用它。有了一定的认识后,再来讨论并行查询的机制,大多数人提到并行执行都会想到这个特性。接下来讨论PDML(parallel DML,并行DML),利用PDML,可以使用并行执行完成修改。我们会介绍PDML在物理上如何实现,并说明为什么这个实现会对PDML带来一系列限制。   然后再来看并行DDL。在我看来,这才是并行执行真正的闪光之处。通常,DBA会利用一些小的维护窗口来完成大量的操作。利用并行DDL,DBA就能充分利用可用的机器资源,在很短的时间内完成很大、很复杂的操作(它只需原先串行执行所需时间的很小一部分)。   这一章的最后将讨论过程并行机制(procedural parallelism),采用这种方法可以并行地执行应用程序代码。这里将介绍两个技术。首先是并行管道函数(parallel pipelined function),即Oracle动态地并行执行存储函数。第二个技术是DIY并行机制(DIY parallelism),利用这个技术可以把应用设计为并发地运行。   第15章:数据加载和卸载   15.1节重点介绍SQLLDR(SQL*Loader),并说明可以采用哪些方法使用这个工具来加载和修改数据库中的数据。我们会讨论加载定界数据,更新现有的行和插入新行,卸载数据,以及从存储过程调用SQLLDR。重申一遍,SQLLDR是一个完备而重要的工具,但它的实际使用也带来很多问题。15.2节主要讨论外部表,这是另外一种数据批量加载和卸载的高效方法。   第16章:数据加密   这一章将探讨对Oracle数据库中的数据加密有哪些途径。这里讨论了如何使用内置数据库包DBMS_CRYPTO完成手动“DIY”加密,不过这个内容不是重点。实际上,这里更强调的是为什么不应使用这个包。这一章的重点是Oracle数据库中透明数据加密(Transparent Data Encryption,TDE)的实现细节,强调了如何实现列级加密和表空间级加密,以及这对于开发人员或DBA有什么意义。这一章并未全面涵盖每一种可能的配置(这是Oracle文档的工作),而是提供了一些实用的实现细节,并指出这对你会有哪些影响。   源代码和有关更新   使用这本书中的例子时,你可能想亲手键入所有代码。很多读者都喜欢这样做,因为这是熟悉编码技术的一种好办法。   无论你是否想自己键入代码,都能从Apress网站(http://www.apress.com)的Source Code区下载本书的所有源代码。即使确实想自己键入代码,下载源代码也很有必要,你可以使用下载的源代码文件检查正确的结果是什么。如果你认为自己的录入可能有误,就可以先从这一步开始。倘若不想自己键入代码,那么除了从Apress网站下载源代码外别无选择!不论采用哪种方式,代码文件都能帮助你完成更新和调试。   勘误表   Apress极力确保文字或代码不会出错。不过,出错也是人之常情,所以只要发现并修改了错误,我们就会及时告诉你。Apress所有图书的勘误表都可以在http://www.apress.com上找到。如果你发现一个还没有报告的错误,请通知我们。Apress网站还提供了其他的信息和支持,包括所有Apress图书的代码、样章、新书预告以及相关主题的文章等。    序言   第 1 版 序   “Think”(思考)。1914年,Thomas J. Watson先生加入后来成为IBM的公司时,带来了这样一个简简单单的座右铭。后来,这成为每一位IBM员工的训词,不论他们身居何职,只要需要作出决策,并利用自己的才智完成工作,就要把“Think”谨记于心。一时间,“Think”成为一个象征、一个标志,屡屡出现在出版物上,人们把它写在日历上提醒自己。而且不仅在IBM内部,就连其他一些公司的IT和企业管理者的办公室墙上也悬挂着这个牌匾,甚至《纽约客》杂志的漫画里都有它的身影。“Think”在1914年是一个很好的观念,即使在今天也同样有着重要的意义。   “Think different”(不同凡想)是20世纪90年代苹果公司在其旷日持久的宣传活动中提出的一个口号,想借此重振公司的品牌,更重要的是,想改变人们对技术在日常生活中作用的看法。苹果公司的口号不是“think differently”(换角度思考,暗含如何去思考),而是把“different”用作动词“think”的宾语,暗含该思考些什么(与“think big”句式相同)。这个宣传活动强调的是创造性和有创造力的人,暗示苹果电脑在支持创新和艺术成就方面与众不同。   我在1981年加入Oracle公司(那时还叫Relational Software公司)时,包含关系模型的数据库系统还是一种新兴技术。开发人员、程序员和队伍逐渐壮大的数据库管理员都在学习采用规范化方法的数据库设计原则。在此之后出现了非过程性的SQL语言。尽管人们对它很陌生,但无不为其强大的能力所折服,因为利用SQL语言能有效地管理数据,而以前同样的工作需要非常辛苦地编程才能完成。那时要思考的东西很多,现在也依然如此。这些新技术不仅要求人们学习新的观念和方法,还要以新的思路来思考。不论是过去还是现在,做到了这一点的人最终都大获成功,他们能最大限度地利用数据库技术,为企业遇到的问题建立有效的创新性解决方案。   想一想SQL数据库语言吧,历史上是Oracle首次推出了商业化的SQL实现。有了SQL,应用设计人员可以利用一种非过程性语言(或称“描述性语言”)管理行集(即记录集),而不必使用传统的过程性语言编写循环(一次只能处理一条记录)。刚开始接触SQL时,我发现自己必须“转45°”考虑问题,以确定如何使用诸如联结和子查询之类的集合处理操作来得到想要的结果。那时,集合处理对大多数人来说还是全新的概念,不仅如此,这也是非过程性语言的概念。也就是说,只需指定想要的结果,而无需指出如何得到这些结果。这种新技术确实要求我“换角度思考”,当然也使我有机会“不同凡想”。   集合处理比一次处理一条记录要高效得多,所以如果应用程序能以这种方式充分利用SQL,就能比那些没有使用集合处理的应用程序表现得更出色。不过,遗憾的是,应用程序的性能往往都不尽如人意。实际上,大多数情况下,最能直接影响整体性能的是应用程序设计,而不是Oracle参数设置或其他配置选项。所以,应用程序开发人员不仅要学习数据库特性和编程接口的详细内容,还要掌握新的思路,并在应用程序中适当地使用这些特性和接口。   在Oracle社区中,针对如何对系统调优以得到最佳的性能(或者如何最佳地使用各种Oracle特性),有许多“常识”。这种原本明智的“常识”有时却演变成为一种“传说”甚至“神话”,这是因为开发人员和数据库管理员可能不加任何批判地采纳这些思想,或者不做任何思考就盲目扩展它们。   比如说这样一个观点:“如果一个东西很好,那么越多越好。”这种想法很普遍,但一般并不成立。以Oracle的数组接口为例,它让开发人员只用一个系统调用就能插入或获取多行记录。显然,能减少应用程序和数据库之间传递的网络消息数当然很好。但是再想想看,到达某个“临界”点后,情况可能会改变。一次获取100行比一次获取1行要好得多,但是如果一次获取1 000行而不是100行,这对于提高整体性能通常意义并不大,特别是考虑到内存需求时更是如此。   再来看另一个不加判断就采纳的例子,一般主张关注系统设计或配置中有问题的地方,而不是最有可能改善性能的方面(或者是能提高可靠性、可用性或增强安全性的方面)。请考虑一个系统调优的“常识”:要尽可能提高缓冲区的命中率。对于某些应用,要尽量保证所需数据在内存中,这会最大限度地提高性能。不过,对于大多数应用,最好把注意力放在它的性能瓶颈上(我们称之为“等待状态”),而不要过分强调某些系统级指标。消除应用程序设计中那些导致延迟的因素,就能得到最佳的性能。   我发现,将一个问题分解为多个小部分再逐个解决,是一种很好的应用程序设计方法。采用这种方式,往往能极好地、创造性地使用SQL解决应用需求。通常,只需一条SQL语句就能完成许多工作,而你原来可能认为这些工作需要编写复杂的过程式程序才能实现。如果能充分利用SQL的强大能力一次处理一个行集(可能并行处理),这不仅说明你是一个高效率的应用程序开发人员,也说明应用程序能以更快的速度运行!   最佳实践有时取决于(或部分取决于)事实的真实性。有时,随着事实的改变,这些最佳实践可能不再适用。有一句古老的格言:“要得到最好的性能,应当把索引和数据放在单独的表空间中。”我经常发现许多数据库管理员都恪守着这个格言,根本不考虑如今磁盘的速度和容量已经大为改观,也不考虑给定工作负载的特殊要求。要评价这个“规则”是否合适,应该考虑这样一个事实:Oracle数据库会在内存中缓存最近经常使用的数据库块(通常这些块属于某个索引)。还有一点需要考虑:对于给定的请求,Oracle数据库会按顺序使用索引和数据块,而不是同时访问。这说明,所有并发用户实际上应该都会执行涉及索引和数据的I/O操作,而且每块磁盘上都会出现I/O操作。可能你会出于管理方面的原因(或者根据个人喜好)将索引和数据块分置于不同的表空间中,但绝不能说这样做是为了提高性能。(Thomas Kyte在Ask Tom网站http://asktom.oracle.com上对这个主题做了深入的分析,有关文章可以在“index data table space”中查到。)从中我们可以得到一个教训,要根据事实作出决定,而且事实必须是当前的、完备的。   不论我们的计算机速度变得多快,数据库变得多复杂,也不管编程工具的能力如何,人类的智慧和一套正确的“思考原则”仍是无可替代的。所以,对于应用中使用的技术,尽管学习其细节很重要,但更重要的是,应该知道如何考虑适当地使用这些技术。   Thomas Kyte是我认识的最聪明的人之一,他在Oracle数据库、SQL、性能调优和应用设计方面具有渊博的学识。我敢肯定,Thomas绝对是“Think”和“Think different”这两个口号不折不扣的追随者。中国有位智者说过“授人以鱼,为一饭之惠;授人以渔,则终身受用”,显然Thomas对此深以为然。Thomas很乐于把自己的Oracle知识与大家共享,但他并不只是罗列问题的答案,而是尽力帮助大家学会如何思考和推理。   在Thomas的网站(http://asktom.oracle.com)上、发言稿中以及书中,他不断鼓励人们在使用Oracle数据库设计数据库应用时要“换角度思考”。他从不墨守成规,而坚持通过实例,用事实证明。Thomas采用一种注重实效的简单方法来解决问题,按照他的建议和方法,你将成为更高效的开发人员,能开发出更好、更快的应用。   Thomas的这本书不仅介绍Oracle的诸多特性,教你使用这些特性,还反映了以下简单的观点。   不要相信神话,要自己思考。   不要墨守成规,所有人都知道的事情其实很可能是错的!   不要相信传言,要自己测试,根据经过证明的示例作出决定。   将问题分解为更简单的小问题,再把每一步的答案组合为一个优秀、高效的解决方案。   如果数据库能更好、更快地完成工作,就不要事必躬亲地自己编写程序来完成。 .  理解理想和现实之间的差距。   对于公司制定的未加证实的技术标准,要敢于提出质疑。   要针对当前需求从大局考虑怎样做最好。   要花时间充分地思考。   Thomas建议,不要只是把Oracle当做一个黑盒。你不只是在Oracle中放入和取出数据。他会帮助你理解Oracle是如何工作的,如何充分利用它强大的能力。通过学习如何在深思熟虑之后创造性地应用Oracle技术,你会更快、更好地解决大多数应用设计问题。   通过阅读这本书,你会了解到Oracle数据库技术的许多新动态,还会掌握应用设计的一些重要概念。如果你确实领会了这些思想,相信你肯定也会对所面对的难题“换角度思考”。   IBM的Watson曾经说过:“自始以来,每一个进步都源自于思考。仅仅因为‘没有思考’,就造成全世界白白浪费了无数资金。”Thomas和我都赞同这种说法。希望你学完这本书后,利用你掌握的知识和技术,为这个世界(至少为你的企业)节省无数资金,把工作干得更出色。   Ken Jacobs   Oracle 公司产品战略部(服务器技术)副总裁,公认的“DBA博士”      序   第一次接触到Oracle RDBMS是在1988年,也可能是1987年。那一天,经理在我的办公桌上放下一个小盒子,对我说了几句话,大致意思是:“这是一个刚刚进入国内的新产品,名叫Oracle。你先试用几个星期,看看它适合做些什么。”   那个版本可能是5.0.22,当时学习Oracle可比现在简单多了。全套的印刷手册(包括Forms 2.0和SQL*Report等)可以放在一个小小的公文包里,create table语句的文档只有大约3页而已。   如果查看11.2 SQL参考手册的PDF文件,会发现从16-6页开始,直到16-79页全都是create table语句的文档,总共有74页。我最后一次查看9i手册时,总页数已经超过了20 000页。我想,对于10g和11g,文档的总页数应该不会低于这个数字。   由于5.0.22只有3本相当薄的手册,所以没过多久我就全面了解了Oracle能够做些什么以及如何高效地完成工作。那时没有太多选择余地,所以出错的机会也不多。不过如今Oracle内核已经“深埋”在不计其数的选项和特性之下,这使得Oracle的学习困难重重,该如何下手呢?更糟糕的是,着手学习时,我们真正需要了解的细节并不是一目了然的,它往往被其他大量信息所“掩盖”,当然了解这些信息本身并不是坏事,但它们对于入门来说并不是至关重要的。   答案很简单。   第1步:阅读概念手册,对内容有个大致了解。   第2步:读Tom Kyte的这本书,通过边学习边试验,从一个初次尝试 “select ‘hello world’ from dual”的“菜鸟”转变成Oracle高手,有朝一日也能自信满满地说出一些“高深”言论,比如:“出于某个原因,我们应该使用一个分区IOT,将这些列放在这个表的溢出区中。”   Tom的这本书集三点于一身:一种轻松交流的风格,使读者能够更容易地了解技术细节,在知道“怎样做”的同时还能理解“为什么这样做”;一种结构化的“叙事方式”,你会看到,相关描述都针对同一个目标,而不是把支离破碎的技巧简单地汇集在一起;一组精心组织的示范说明,让你了解Oracle的工作原理,还会教你怎样做以及怎样思考。   仅以索引为例。索引有许多种,首先需要简要介绍这些不同类型。例如,如果对B-树索引的具体工作原理有所认识,会很有好处,这样我们才能更好地了解这种索引的优缺点。然后可以转向基于函数的索引,也就是“尚不存在的数据”的索引。由此我们不仅能知道Oracle能够做什么,还会了解通过对Oracle的处理我们还能进一步做些什么。接下来可以看到如何把这些综合起来,创建一个确保数据子集唯一性的索引。还会看到如何在一个大型数据集上创建维护要求不高的小索引,只标识真正想要访问的数据,将优化器生成“愚蠢”执行计划的风险减至最低。   基本说来,手册中都涵盖了这些内容,不过,我们必须具备敏锐的洞察力,能够从纷繁的命令中挑出我们想要的内容,查看如何使用这些命令为实际问题建立解决方案。Tom Kyte就展示了这种洞察力,而且还鼓励我们更进一步形成自己的认识。   坦率地讲,如果全世界每一位DBA和开发人员都精心研读了Tom Kyte的这本书,我可能就得改行为SQL Server用户提供咨询服务了,因为需要Oracle咨询的客户肯定会显著减少。   Jonathan Lewis   英国Oracle用户群负责人    媒体评论   “本书能够帮助你发挥Oracle技术的最大能量……毋庸置疑,这是最重要的Oracle图书之一,绝对值得拥有。”   ——Ken Jacobs   Oracle公司产品策略部(服务器技术)副总裁,公认的DBA博士   “真是一本绝妙的书,包含大量关于Oracle技术的真知灼见。”   ——Sean Hull   

立即下载
oracle database 10g实用培训教程

oracle database 10g实用培训教程oracle database 10g实用培训教程oracle database 10g实用培训教程oracle database 10g实用培训教程

立即下载
Oracle 10g 数据库管理 应用与开发 标准教程 课后习题答案

《Oracle10g数据库管理应用与开发》标准教程 清华电脑课堂 马晓玉、孙岩、孙江玮、李红海等编著 课后习题答案 除第16章的选择、填空外,其余的答案皆有

立即下载
Oracle Database 10g Administration Workshop

Oracle Database 10g Administration Workshop.rar Oracle Database 10g Administration Workshop.rar

立即下载
关闭
img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
点击完成任务获取下载码
输入下载码
为了良好体验,不建议使用迅雷下载
img

oracle database 10g基础教程.rar

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0
为了良好体验,不建议使用迅雷下载
VIP下载
您今日下载次数已达上限(为了良好下载体验及使用,每位用户24小时之内最多可下载20个资源)

积分不足!

资源所需积分/C币 当前拥有积分
您可以选择
开通VIP
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
为了良好体验,不建议使用迅雷下载
确认下载
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
为了良好体验,不建议使用迅雷下载
VIP和C币套餐优惠
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
确认下载
下载
您还未下载过该资源
无法举报自己的资源

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

若举报审核通过,可返还被扣除的积分

  • 举报人:
  • 被举报人:
  • *类型:
    • *投诉人姓名:
    • *投诉人联系方式:
    • *版权证明:
  • *详细原因: