
本书由麦思博(北京)软件技术有限公司主编,由著名Oracle专家和讲师罗敏、韩思捷负责编写。作者结合自己多年实践经验,围绕几个经典的大型服务案例,全面讲解Oracle数据库设计、开发和运维管理相关技术和知识,内容独到,讲解深入,是不可多得的数据库经典案例教程。这些案例包括油田、银行、信息中心、医药公司、电力公司等不同行业的应用,技术方面则涉足数据迁移、数据库备份、数据仓库设计、信息中心系统设计、容灾系统、性能优化、数据仓库、故障诊断等众多领域。
序 言 Oready专家团队 从主流产品的发展现状来看,关系数据库技术仍然是主流;数据库产品形成也出现系列化,一方面,Web和数据仓库等应用的兴起,数据的绝对量在以惊人的速度迅速膨胀;另一方面,移动和嵌入式应用快速增长。针对市场的不同需求,数据库正在朝系列化方向发展;数据库管理系统是网络经济的重要基础设施之一,支持各种互联网应用,向智能化、集成化方向扩展,DBMS具有高可靠性、高性能、高可伸缩性和高安全性。数据库也是企业信息系统的核心和基础,其可靠性和性能是企业领导人非常关心的核心问题。 这十几年是中国软件、互联网行业快速发展的时期,技术界的热点一直在变化,而无论聚焦点如何改变,大型数据库的开发、运维始终是不可或缺的核心工作。一个优秀的DBA能否根据业务需求正确的设计数据库架构,部署最佳的数据运营策略,决定了软件、应用的效能,而能否在业务出现问题时快速排查、及时解决又从很大程度上决定了大型项目的成败。而众所周知的是,优秀的DBA不是一天炼成的,需要积累大量的实战经验,需要服务过多个项目。我们认为DBA的学习最好的方式还是案例学习,通过学习案例,能够了解到实操层面细节,更能归纳出一套面对相似行业、类似问题时的解决思路。 本书的作者罗老师和韩老师是Oready专家团队成员,仍然在行业的一线奋斗着,长期从事数据库开发、运维等方方面面的工作。本书整合了专家团队丰富的项目实践经验和解决实际问题的办法,几十年来的心得,都浓缩在案例解析中,一定会给与读者全新的视角。 本书中的所有案例,均重现于Oready专家团队曾经服务过的企业或项目,以案例的形式娓娓道来,注重还原,以及解决问题的思路。 书中,油田、银行、信息中心系统等案例为罗敏老师所实施项目,第1章~第18章由罗敏老师执笔;液晶面板厂、医疗、电表系统等案例为韩思捷老师所实施项目,第19章~第23章由韩思捷老师执笔。读者根据案例就可以很简单地自我尝试,领会其中的精华。以真实案例贯穿全书,这也正是本书的独特之处。 祝愿所有的读者能够从案例中汲取营养,成为独当一面的DBA! 2015年1月 Oready专家团队,即为One Technology Ready!Oready不仅仅是数据库领域的专家团队,同时也是一个社区,我们汇集百位数据库领域资深顾问、讲师,服务于数据中心的技术支持与技能传授,针对客户的关键数据库运营支撑,强调经验的分享Skill Transfer,聚焦数据中心的完美结合。 网址:www.oready.com.cn 序 言 甲骨文公司副总裁 中国区技术产品事业部总经理 吴承杨 Oracle数据库经过近40年的发展独步天下、长盛不衰——从客户/服务器架构,到互联网兴起,再到今天的云计算和大数据时代,Oracle数据库与中国客户一起走过了从Oracle 7版本、8版本、8i版本、9i版本、10g版本、11g版本到最新的12c版本的发展历程。持续的创新使得Oracle一直保持技术数据库领域的领先地位,而广泛的成功应用为Oracle赢得了客户的信任和口碑。 如今的移动云时代焕发出了多样化的应用需求,从而实现业务变革、提升客户体验、甚至商业模式创新。移动云时代的各类应用需要架构在以数据库云为核心的PaaS基础平台上,这不仅需要重构数据中心的战略,也带动了新兴的数据处理技术,于是有些人开始怀疑传统关系型数据库的未来。所幸Oracle从未固步自封,而是不断融合最新的软硬件技术,以满足用户日益变化的客户需求和业务挑战,在数据库云(数据库公有云、数据库私有云以及两朵云之间的无缝迁移)、集成设计系统、大数据分析和内存计算等领域继续引领着数据库技术的发展,为全球移动云计算的应用提供基业长青的IT平台。 Oracle数据库不只是简单的一个产品,而是一个通用的数据库平台并包含丰富的产品组合。一直以来,Oracle通过数据库企业版核心功能的持续增强和各种数据库选件的结合,帮助企业级客户实现让数据库运行更高效、让应用开发更方便、让数据更安全、让运维管理更简单的理念。除了高性能之外,用户对数据库的高可用性和高安全性的需求越来越高,所以Oracle数据库企业版的选件已经成为保障系统可靠运行的必需品。 本书中的诸多案例就体现了Oracle这些技术的领先特性和最佳实践。感谢Oready筹备制作,把工程师多年实施Oracle数据库项目的宝贵经验、精华与大家分享,既有实际操作方法,又有心得技巧总结,必定使您获益匪浅。 简化IT、实现创新——让我们从Oracle数据库开始! 2015年1月 序 言 罗 敏 韩思捷 IT行业的一大特点就是,这是一个典型的理论与实践相结合的领域,再好的理论、再好的技术,未经实际项目实施的考验,一切都属空谈。IT行业另一个特点是不仅技术丰富多彩、发展日新月异,而且技术运用具有多样性。也就是说即便是相同技术,不同技术人员的运用方式、方法、效果也是各有千秋的,大家都积累了不同的、丰富的实战经验。因此,无论从业时间长短,IT人士不仅需要学习、掌握各种高速发展的新技术、新产品,也迫切希望了解同行们的丰富实施经验和各有特点的实战体会。 将多个行业背景、多个技术领域、多种技术风格的Oracle数据库实施案例荟萃在一起,与大家共同分享经验与教训,这就是我们写作此书的初衷了。 这些案例既来自石化、银行、信息安全管理、制造、医药、电表管理等不同行业,也涵盖Oracle数据库迁移/升级、性能优化、数据库云计算、数据仓库、容灾系统等不同技术领域,从实施团队而言,既有Oracle原厂商技术顾问,也有其他厂商技术专家,更有不同行业的客户技术和业务专家,真可谓八仙过海,各显神通。 书中,油田、银行、信息中心系统等案例为罗敏所实施项目,第1章~第18章由罗敏执笔;液晶面板厂、医疗、电表系统等案例为韩思捷所实施项目,第19章~第23章由韩思捷执笔。 这是一本完全以案例为体裁、内容特别充实的技术书籍,没有长篇大论,专题般地讲述每个技术细节,希望能给大家一种身临其境的感觉,感受到技术运用的鲜活性和多样性,更体味到多种技术风格迥异的运用方法和最佳实践经验。最起码,希望大家能像看故事般地,以轻松、愉悦的心情欣赏案例,这也达到了我们的基本希望了;如果能从这些具有一定代表性的案例中,吸取一些有用的知识和经验用于您的实际项目,那我们就更加欢天喜地了! 2014年10月
目 录 案例1:某油田 1 第1章 数据迁移技术支持服务 2 1.1 项目背景 2 1.2 现有迁移方案 3 1.3 数据迁移问题解决 5 1.4 数据迁移之后确认 11 1.5 生产运行系统问题 11 1.6 其他非法对象的检查 12 1.7 ORA-3136错误分析 13 1.8 权限产生脚本 14 1.9 表空间设计原则 15 1.10 调整表空间的步骤 15 1.11 Impdp报警和报错的处理 16 1.12 数据导入/导出中Constraint的处理 17 1.13 如何进行数据导入/导出的并行处理 19 第2章 数据库备份恢复支持服务 20 2.1 现有物理备份恢复方案 20 2.2 物理备份恢复完善建议 22 2.3 逻辑备份恢复现状及完善建议 23 第3章 健康检查及性能优化 25 3.1 9月22日白天 25 3.2 9月27日白天 28 3.3 主要语句(Top-SQL)性能优化 32 3.4 应用中的其他问题 39 3.5 小结 40 第4章 A系统性能分析和优化 41 4.1 参数调整问题 41 4.2 日志文件太小问题 42 4.3 统计信息采集问题 44 4.4 应用整体情况分析 45 4.5 典型语句分析 46 4.6 其他优化措施 57 4.7 索引使用监控分析 57 4.8 空间碎片分析 60 4.9 空间优化过程及效果 63 4.10 Oracle高级优化技术的使用 67 4.11 本轮次服务总结 77 4.12 下轮次服务工作建议 78 第5章 B系统性能分析和优化 79 5.1 项目背景 79 5.2 系统架构 79 5.3 运行状况 79 5.4 典型语句1 81 5.5 典型语句2 82 5.6 优化操作汇总 82 5.7 优化器和统计信息采集 83 5.8 优化效果对比 84 第6章 C系统数据迁移服务 86 6.1 迁移需求 86 6.2 跨平台表空间迁移实施 87 第7章 数据库审计方案设计和实施服务 89 7.1 需求及方案思路 89 7.2 打开审计功能 89 7.3 实施审计操作 90 7.4 审计结果统计分析 – 操作系统层面实现 91 7.5 审计结果统计分析 – 数据库层面实现 93 7.6 关闭审计操作 96 7.7 注意事项 97 第8章 A系统分区方案设计及实施 99 8.1 分区原则设计 99 8.2 分区表的确定 99 8.3 表分区方案 100 8.5 实施情况 102 8.6 实施过程几个问题的分析和解决 108 8.7 运用分区技术实现大批量数据处理 109 8.8 运行维护操作 110 8.9 分区实施总结 111 第9章 A系统历史数据加载技术方案 113 9.1 环境和现状 113 9.2 需求分析 113 9.3 Oracle公司技术方案 114 9.4 过渡环境搭建 114 9.5 字符集的检查 114 9.6 CSSCAN程序的安装和配置 115 9.7 历史数据卸载和加载到过渡系统 116 9.8 前期准备工作 117 9.9 “Lossy”数据检查和处理 119 9.10 “Convertible”和“Truncation”数据检验 120 9.11 “Truncation”数据处理 121 9.12 “Convertible”数据处理 122 9.13 字符集转换过程 123 9.14 数据卸载和加载到生产系统 123 9.15 数据校验和后续工作 125 9.16 方案2实施情况 125 第10章 云平台系统检查报告 126 10.1 系统概述 126 10.2 数据库主机环境 127 10.3 Clusterware集群环境手工检查 128 10.4 ASM环境检查 151 10.5 数据库配置检查 153 10.6 AWR采样数据 156 10.7 总体负载指标分析 156 10.8 缓冲区命中率分析 157 10.9 最高等待事件分析 157 10.10 RAC指标分析 158 10.11 数据库服务(Service)分析 158 10.12 Top-SQL分析 159 10.13 I/O指标分析 159 10.14 表空间使用情况分析 161 10.15 非法对象分析 162 10.16 归档区域分析 162 10.17 数据库备份分析 163 10.18 检查结果总结 163 案例2:某银行数据仓库系统 165 第11章 数据仓库物理设计及ETL方案设计 166 11.1 XX系统分区表设计建议 166 11.2 XX系统表空间设计建议 169 11.3 物理设计脚本案例 171 11.4 ETL逻辑分类 172 11.5 ETL物理分类 172 11.6 XX系统ETL需求分析 173 11.7 XX系统外部表设计原则 173 11.8 ETL建议方式一 173 11.9 ETL建议方式二 174 11.10 ETL建议方式三 175 第12章 数据仓库应用优化 177 12.1 并行处理的运用 177 12.2 HASH_JOIN和并行处理运用 179 12.3 创建Local索引 181 12.4 函数索引的运用 182 12.5 采用HASH-Partitioned Global索引建议 183 12.6 分区裁剪运用 184 12.7 应用开发经验总结 184 第13章 相关问题的咨询和解决 185 13.1 SQL*LOADER分割符问题 185 13.2 如何移动数据文件的位置 185 13.3 分区表的Data Pump 和exp/imp 187 13.4 TTS技术如何实现 187 13.5 如何实现分区表的表空间迁移 189 13.6 Recyclebin问题 191 13.7 如何导出可重复使用的func、proc、package 192 13.8 如何导出可重复使用的建表脚本 192 13.9 sqlldr如何实现错误退出回滚和错误退出不回滚? 192 13.10 异步I/O问题 193 13.11 重复记录删除问题 193 13.12 统计信息采集实施过程 194 第14章 XX系统备份恢复优化和实施建议 197 14.1 参数调整 197 14.2 备份实施策略建议 198 14.3 恢复实施策略建议 200 14.4 RMAN备份实施 201 14.5 恢复到测试环境 203 14.6 RMAN恢复场景 204 14.7 RMAN管理维护 206 14.8 动态修改参数导致数据库宕机 207 案例3:某信息中心系统 209 第15章 数据库物理设计 210 15.1 系统需求的初步分析 210 15.2 分区表和分区表空间设计建议 210 15.3 分区表和分区表空间命名规则 211 15.4 物理设计示例 211 15.5 分区表和分区表空间设计的评估 214 15.6 Disk Group设计建议 215 15.7 ASM、OMF、BigFile Tablespace技术的结合使用 216 15.8 ASM问题及相关建议 216 15.9 临时表空间组简介 217 15.10 临时表空间组的使用建议 218 第16章 数据加载及全文索引方案设计 219 16.1 数据加载基本流程 219 16.2 性能问题的评估 221 16.3 总体评估和相关问题 222 16.4 如何提高context索引的创建速度 222 16.5 如何提高context索引的查询速度 223 16.6 硬件选型的相关建议 223 16.7 RAC中的应用部署建议 223 第17章 应用优化服务 225 17.1 统计运算建议 225 17.2 并行计算建议 226 17.3 DXNR索引建议 227 17.4 并行处理的监测 228 17.5 统计信息采集问题 230 17.6 时间索引问题 231 17.7 应用增加HINT建议 232 第18章 故障诊断服务 234 18.1 Oracle Text索引空间不够问题 234 18.2 Oracle Text索引交换问题 235 18.3 数据库core文件问题 236 18.4 ASM空间管理问题 237 案例4:XX液晶面板厂容灾项目 239 第19章 容灾项目系统设计 240 19.1 项目背景 240 19.2 容灾方案比较 241 19.3 Oracle Data Guard 242 19.4 容灾中心软硬件配置 248 19.5 容灾系统上线计划 249 19.6 项目验收报告 250 19.7 安装HP-UX 252 19.8 安装ServiceGuard 253 19.9 安装Oracle软件 260 19.10 配置MES备库 267 19.11 switchover操作 281 19.12 总结 282 案例5:XX医药公司优化项目 285 第20章 数据从单实例迁移到RAC环境 286 20.1 项目背景 286 20.2 数据迁移计划 286 20.3 搭建Data Guard 289 20.4 Failover操作 297 20.5 修改节点1的VIP 298 20.6 添加第二个实例 299 20.7 收集优化器统计信息 299 第21章 医药系统性能优化 301 21.1 批量处理的优化 301 21.2 巧用outline 307 21.3 PL/SQL性能监控 310 21.4 使用STA优化SQL 314 案例6:某电表数据仓库项目 319 第22章 备库丢失归档日志导致GAP 320 22.1 项目背景 320 22.2 具体操作过程 320 第23章 数据仓库的一些性能问题 322 23.1 ETL的问题 322 23.2 优化in语句 328 23.3 序列号问题