产品特色
内容简介
本书是来自一线OracleDBA的实践工作笔记,凝结作者多年数据库管理运维心得;全书从运维、数据迁移和优化三个层面娓娓道来,精心筛选作者在实际工作中总结的技巧、对常见问题的高效处理方法,以及大量融入完善解决方案的诊断案例;尤其对数据库的宕机、容灾、监控管理、外部表迁移方案、系统调优、SQL优化等重点内容的讲解更是细致入微。
目录
第1篇 数据库运维篇
第1章 数据库安装配置
1.1 安装前的准备 1
1.2 安装数据库软件 5
1.2.1 方法1:OUI安装 6
1.2.2 方法2:静默安装 8
1.2.3 方法3:克隆安装 11
1.2.4 诊断案例:克隆安装后无法登录的问题 13
1.3 创建/删除数据库 16
1.3.1 方法1:DBCA图形建库 16
1.3.2 方法2:手工建库 18
1.3.3 方法3:DBCA静默建库 22
1.3.4 方法4:OMF建库 22
1.3.5 诊断案例:create database语句在10g、11g中的不同 23
1.3.6 创建数据库后的补充工作 26
1.3.7 删除数据库的步骤 29
1.4 关于SYSDBA、SYSOPER、DBA的区别和联系 29
第2章 常用工具和问题分析
2.1 SQL*Plus使用及常见问题 34
2.1.1 SQL*Plus使用细则 34
2.1.2 SQL*Plus无法启动的常见原因 41
特殊问题:乱码导致的SQL*Plus无法启动的问题 43
特殊问题:使用strace诊断奇怪的SQL*Plus登录问题 44
2.2 解析exp/imp及常见问题 47
2.2.1 exp/imp使用场景及示例 47
2.2.2 exp/imp使用常见问题 50
诊断案例:生产系统exp无法使用的紧急诊断和修复 55
诊断案例:外部表的导入导出问题 57
诊断案例:IMP-00013 问题及解决方法 58
诊断案例:使用strace分析exp中buffer设置的奇怪问题 60
经验分享:你可能不了解的dump文件 63
2.3 解析Datapump及常见问题 66
2.3.1 Datapump使用场景及示例 66
2.3.3 只言片语分析Datapump的工作原理 68
诊断案例:impdp异常中断导致的问题 70
诊断案例:使用impdp选项不当导致的数据丢失 73
第3章 服务连接配置
3.1 监听配置与客户端配置简介 76
3.2 网络服务配置 78
3.2.1 网络配置细则与实践 78
诊断案例:Session跟踪失效的问题和原因 82
3.2.2 监听配置文件格式探究——一个空格的威力 84
3.2.3 RAC中的TAF的配置 88
3.2.4 RAC中的SCAN的配置 90
3.2.5 通过单例模式模拟RAC连接 93
3.3 监听器无法启动的几个原因 94
诊断案例:使用strace分析TNS-12543的案例 96
第4章 数据库启/停和宕机问题
4.1 数据库启停的问题分析 99
4.2 数据库无法启动案例 100
诊断案例:数据库参数设置不当导致无法启动的问题 100
诊断案例:服务器增加内存后无法重启数据库的问题及解决方案 102
诊断案例:数据库shutdown之后无法启动的问题 103
诊断案例:RAC节点无法启动的ORA-29702问题及分析 105
诊断案例:连续出现的RAC节点问题 108
4.3 数据库无法登录问题分析 110
4.4 数据库无法登录案例 111
诊断案例:归档空间不足导致的数据库无法登录问题 111
诊断案例:Session Leak导致的数据库无法登录问题 115
诊断案例:undo缺失导致的数据库无法登录问题 118
4.5 数据库宕机问题和原因分析 119
4.6 数据库宕机问题案例 119
诊断案例:一条SQL语句导致的数据库宕机问题及分析 119
诊断案例:存储导致的数据库宕机问题及分析 121
诊断案例:I/O问题导致的数据库突然宕机的问题及分析 124
诊断案例:数据库导致突然宕机的问题及解决 126
第5章 容灾与备份恢复
5.1 备份恢复应用及实践 132
5.1.1 归档模式下的四种完全恢复场景 132
5.1.2 RMAN中三个不完全恢复场景 137
实验1:使用句柄实现特定场景的无备份恢复 141
实验2:关于DUAL表的破坏性测试 145
5.2 闪回应用及实践 149
5.2.1 关于delete、drop、truncate异同和无备份恢复场景 149
5.2.2 使用闪回查询备份数据 152
5.2.3 使用Flashback Query巧妙抽取指定数据 154
实战案例:巧用Flashback Database实现灵活的数据回滚 155
实战案例:巧用Flashback Database实现灵活的数据切换 156
5.3 Data Guard搭建与应用 160
5.3.1 常见的Data Guard隐患 161
5.3.2 11g Data Guard搭建实践 163
5.3.3 论Oracle备库的设计方案 169
5.3.4 实用至上的 Snapshot Standby特性 171
实践案例:Data Guard备库中的几个数据文件问题 175
实践案例:Data Guard备库的数据文件的迁移实战 179
诊断案例:由Drop Datafile导致的Oracle Bug 182
诊断案例:一个Oracle bug的手工修复 185
诊断案例:11g备库无法开启ADG的原因分析 188
第6章 监控管理和故障处理
6.1 Zabbix、Orabbix简介 191
6.2 Zabbix Agent部署 191
6.3 Orabbix的部署 194
6.4 浅谈Zabbix和Grid Control的优劣 197
6.5 Orabbix定制监控Oracle的简单配置 198
实践案例:Orabbix结合Python发送图形报表 200
实践案例:Zabbix中配置Data Guard的监控 205
6.6 两条腿走路更稳当——硬件监控很有必要 207
6.7 运维平台的建设思考——元数据管理 209
6.8 监控盲点与诊断案例 210
监控盲点:由DUAL导致的一个潜在的监控问题 210
诊断案例:备库CPU使用异常优化 213
诊断案例:两条报警信息结合分析DG问题 216
诊断案例:监控反被监控误——一则Orabbix报警的分析 222
诊断案例:自定义监控项快速定位问题 224
诊断案例:CPU报警信息的分析 226
前言/序言
DBA前途光明且任重道远
Oracle作为全球最大的软件企业之一,它的发展历程也见证了IT行业的兴衰与成长。
从关系型数据库、分布式系统、服务器、互联网计算到云计算,Oracle的目标是让客户和合作伙伴更快地适应并采纳这些新技术,将风险和成本降至最低。尽管这些年去IOE的风潮依旧,但是毫无疑问Oracle依然是RDBMS的王者,而且在技术和战略上,Oracle仍然在一路高歌猛进,并且全面引领行业迈入了云时代。
据Gartner的权威报告分析,全球公有云服务市场规模2016年有望达到2 040亿美元;较2015年的1 750亿美元增长16.5%,而且云服务呈现出的这种强劲发展势头有望在未来的5~7年内仍然保持下去。在国内,2015年中国云计算产业规模约为1500亿元,年增长率超过30%,产业结构不断优化,是全球增速最快的市场之一。
Oracle在云上的研发和产品创新投资极高,据早期的官方数据显示,12c历经5年多的开发,包含500多种新特性,投入了2 500多人/年的开发,每天100多万次特性测试,120多万小时的压力测试,而且12cR2也即将在2016年正式发布。
数据库技术就是在这样的大环境下不断地创新、改进和发展,在海量数据的高性能和分布式扩展,一体化软件与硬件集成,应用开发简化,IT架构的统一融合,业务响应的快速提升和IT成本的控制,这些大部分企业亟待解决的需求也会得到持续稳定的落地实现。
而作为一个Oracle DBA,依旧任重道远,因为行业里面水涨船高,我们可能会面对来自行业和工作的压力,需要始终保持学习的动力,这样才足以应对更多更复杂的问题挑战。在工作中碰到了一些问题,有些可以根据经验马上得以解决,有些需要借助专业网站(比如MetaLink)、社区、论坛或者博客来得到一些相关指点,有些问题暂时没有解决,可能就会搁置下来,这也许就是我们工作的基本态度。如果你只是抱着把工作完成即可的态度,一定要静下心来想想了。
写书的缘起
我是一个坚持写技术博客的人,最开始的博客是零零散散地记录日常工作,记录问题和解决方法,勤则几天更新一次,慢则几周更新一次。
我也知道任何事都贵在坚持,道理我也懂,但是有时候感觉还是缺乏执行力,听说一个行为坚持多少天就会成为习惯,于是在2014年2月的一天,我下定决心挑战一下自己,我想看看我到底能够坚持多久,能不能成为一个习惯,当时暗下决心坚持每天写一篇博客,这一路竟然坚持了下来,截止到2016年4月,我已经坚持了近800天,当然我还会继续坚持下去,就如同我最开始给自己的目标一样。
最开始是满腔热情,但是到后来,发现还是遇到了一些瓶颈。我每天都有要放弃的念头,但是都是一边说服自己,一边继续在晚上睡觉之前逼着自己完成博客。
随着博客的内容量越来越多,有些网友在博客和我的互动也越来越多,突然我发现原本是利己的事情慢慢变得利人了。我也感受到了坚持的价值所在,但是我慢慢地发现同样一个问题总是会有各种不同的可能性,当被一个看似很简单的问题折腾得精疲力尽的时候,最后发现可能解决问题的方式很简单,甚至很让人唏嘘无奈。问题经常会重复出现,但是不是简单的重复,因为很多问题都是在特定的场景中发生的,原因也是五花八门,很多看似诡异的问题其实明白了其中的原委就会感觉很简单,因为它本身并不神秘。
而另外一方面,尽管对很多问题都写了博客总结,但是有些问题当时没有保留更多的日志和处理过程记录,在碰到问题分析时就会有一些弯路甚至错误,所以这件原本利己利人的事情也让我会有一些压力。博客写的内容多了,技术扩展得少;技术问题解决得多了,技术思想总结得却少,这些都是我需要改变提升的地方。如果能把自己的工作经验形成一套相对完整的知识体系,并加入个人的独门见解干货,很多问题的处理就会得心应手。
就这样在我继续坚持写博客的某一天,一个偶然的机会,接到了中国铁道出版社荆波编辑的邀请,我决定把自己的工作内容以书的形式整理出来,系统性地呈现给大家,而书中也需要保留工作实战的味道。
古人云:“若起不得法,则杂乱浮泛”。虽然写书的想法是好的,但是对自己思绪的整理和对众多材料的截取,如果把所有知识点都一股脑儿罗列出来,这样的话,弊大于利,读者在阅读的过程也会容易抓不住重点,无章法可循。
因为Oracle相关的技术图书已然非常丰富,所以我选择了数据库运维、数据迁移、性能优化这三个方面。一方面能够突出工作笔记的特色,另一方面也避免写出过多重复经验的内容,而且个人认为这三个方面也是DBA的一个进阶层次,因为我在这些方面投入了大量的时间和精力,也是这么一路走过来的。
本书适合的读者对象
Oracle DBA或者开发人员。
有一定的Oracle基础,并且期望能够提升自我的读者。
给读者的一些建议
(1)时代在变,一专多能;现在的技术发展更新很快,学习不要拘泥于某一项具体的技术,要不断扩展学习,对比学习,一专多能有两个层面,一个是横向扩展,比如在数据库方面有一定的经验和建树,可以同时根据工作需要扩展、开发、中间件、系统层面等。另一个就是纵向扩展,即目前是以Oracle为主要工作内容和方向,那么也可以扩展学习其他关系型数据库,NoSQL数据库或者NewSQL数据库,总之要拥抱变化。
(2)很多问题不是问出来的,而是实践出来的;我收到了很多网友的提问,绝大多数情况下我都会做回复,在这个过程中其实自己也学习了不少知识,当然也有很多的感悟和见解,我始终认为问题不是问出来的,而是实践出来的,就如同本书的内容一样,如果你抱着看完本书就能够掌握所有的技巧和技能,可能要让你失望了,学习有法,而无定法,贵在得法,书中我想要表达的也是这个意思。
(3)多参加社区、社群的活动和技术交流问答;对于参加社区、社群活动,自己也是深有感触,可能技术圈子的人性格相对比较内敛,在技术上态度还是开放的。多参加一些社区、社群的交流,可以让自己从不同的视野来看待同一件事物,对于日常技术交流可能自己一个耐心地解答就会帮助到网络里无助的新手,可能自己不能解决的技术难题,在社群交流中就会发现别人已经有了最佳实践。学习是相互的,帮助也是相互的,而不是靠几个人就能够完成这些,都需要一点一滴地投入和积累,此外还有一个优点就是能够认识很多朋友。
(4)勤于总结;在这方面自己也是深有感触,学习的过程是一个不断积累的过程,戒骄戒躁,不要猴子掰包谷式的学习,就如同我们刚入行就希望公司给我们最核心系统的权限,这个可能性不大,我们需要不断地努力来赢得同事和领导的信任,而通过这些努力的过程也积累了经验,这些经验如果不加以系统的整理和归纳,要么被遗忘,要么成偏门秘籍,Oracle数据库发展至今已经30多个年头,可能很多旧版本中的功能特性就是工作中的痛点,在新版本中很可能就会改进,而一味墨守成规,不总结积累,你的知识库就得不到更新,还在使用过时的方法处理新的问题。
本书内容预览
本书会以工作笔记的形式循序渐进地讲解DBA工作中的一些常见问题和处理方法。
全书共分为三篇,共14章,全面介绍数据库运维、数据迁移、数据库优化的工作内容,在这些知识点中也穿插了大量实例。第一篇(第1~6章)详细介绍了数据库安装配置、常用工具和服务连接配置,对数据库启停和宕机问题也着重进行了解读, 此外还包括容灾与备份恢复, 监控管理和故障处理的内容;第二篇(第7~9章)介绍了数据库升级,对数据迁移的常用方式和问题进行了详细说明,因为自己对数据迁移使用外部表深有感触,所以也自成一章娓娓道来其中的苦与痛;第三篇(第10~14章)介绍了优化工具简介和定制,调优内容涵盖实例调优、系统调优、SQL优化的前奏和SQL需求审核,最后介绍SQL优化的技巧,深入浅出地对一些优化问题进行了总结。
感谢
写书的过程还是很痛苦的,因为里面的各种细节都需要考虑,出版方面自己也是门外汉,在这个过程中难免犯了很多低级错误和失误。书中的技术术语是否得当、举例和比喻是否恰当等,在书的结构和内容的考量上,我和本书策划编辑荆波老师也反复进行了讨论和校正。在工作忙碌之余,坚持写技术博客,同时又花费不少时间来编排图书内容,着实是一件很辛苦的事情,但还是坚持了下来,想到读者能够在我的一些案例中得到一些启示和帮助,其实是一件很让人欣喜的事情。
当然图书的内容质量也离不开朋友们的支持,感谢盖国强,杨志洪为本书作序,同时感谢黄远邦,熊军,怀晓明,丁俊,马红,洪烨,卢飞,蔡皓对于书稿的审阅,他们都是奋斗在一线的DBA,很多都是行业先锋,顶尖高手,在工作中积累了大量的实践经验,感谢他们对本书给出了很多宝贵的建议。
完成本书也离不开家庭的大力支持,感谢妻子雪丽在我写书没有思路以及动力的时候给予我支持和鼓励,而且还参与了全稿的内容审核,感谢父母默默地支持我的想法,虽然他们看不懂我写的内容,但是总是会问问写书的进度和想法。还有我可爱的女儿珊珊,是我生活中的精神依靠,看着她活泼可爱的模样,我会更有动力来努力工作。
感谢荆波老师对于本书的大力支持,在所有的环节都严格把关,一丝不苟,能够写成本书,与他的帮助是分不开的。
由于本人知识水平有限,书中难免存在着一些错误和不妥之处,敬请批评指正,如果您有更多的宝贵意见,也欢迎在我的微信公众号(jianrong-notes)讨论交流,大家一起学习交流,共同进步。
《Oracle DBA工作笔记:运维、数据迁移与性能调优》 是一本旨在为Oracle数据库管理员(DBA)提供实践指导和深度洞察的专业书籍。本书内容紧密围绕DBA的核心工作职责,涵盖了数据库运维的方方面面,详述了复杂数据迁移的策略与技巧,并深入剖析了性能调优的各个维度,旨在帮助DBA提升工作效率,解决实际难题,并最终为业务系统提供稳定、高效的运行保障。 一、 数据库运维:基石与日常 在任何IT环境中,数据库的稳定运行都是至关重要的。本书的第一部分将运维工作视为DBA的基石,系统性地梳理了Oracle数据库日常管理的关键环节,并提供了大量实用的操作技巧和注意事项。 安装与配置: 从Oracle软件的下载、安装到基础参数的配置,本书将引导读者一步步完成Oracle数据库的部署。这包括不同安装类型的选择(如Standard Edition、Enterprise Edition)、软件介质的准备、安装路径的规划、以及关键配置文件的理解与调整,例如`init.ora`(或`spfile`)中的内存参数(SGA、PGA)、I/O参数、进程参数等。书中会强调根据硬件资源和业务负载来优化这些参数的重要性,避免“一刀切”的配置方式。 监控与告警: 实时掌握数据库的健康状况是主动运维的关键。本书将详细介绍Oracle数据库的各种监控工具和方法,包括Enterprise Manager(EM)的使用、SQLPlus命令(如`V$SESSION`, `V$PROCESS`, `V$SQLAREA`, `V$WAITSTAT`等动态性能视图)的查询,以及第三方监控工具的集成。重点会放在如何设定合理的告警阈值,及时发现潜在问题,如CPU使用率过高、内存压力、磁盘I/O瓶颈、连接数异常、长时间运行的SQL语句等,并指导读者如何快速响应和定位这些告警。 备份与恢复: 数据的安全是DBA的生命线。本书将深入讲解Oracle数据库的备份与恢复策略,涵盖RMAN(Recovery Manager)的强大功能。从冷备份、热备份到增量备份、差异备份,再到不同恢复场景的模拟与演练(如全库恢复、表空间恢复、数据文件恢复、块级恢复),本书将提供详实的步骤和命令示例。同时,还会讨论备份策略的制定,包括备份频率、保留策略、异地备份的实施,以及如何验证备份的有效性。 安全管理: 数据库安全涉及数据防泄露、访问控制和合规性。本书将涵盖用户与角色的管理、权限的分配与回收、密码策略的设定、审计(Auditing)的开启与配置,以及数据加密(如Transparent Data Encryption, TDE)的介绍。书中会强调最小权限原则的应用,以及如何定期审查用户权限,防范潜在的安全风险。 Patching与升级: 保持数据库软件的最新状态是维护稳定性和安全性的重要手段。本书将介绍Oracle的Patching机制,包括OPatch工具的使用、不同类型Patch(如PSU, CPU)的安装流程、回滚操作,以及数据库升级的规划与执行。升级过程中涉及的兼容性检查、数据字典升级、参数文件的调整以及升级后的验证,都将得到细致的阐述。 二、 数据迁移:挑战与解决方案 数据迁移是数据库生命周期中常见的重大操作,涉及数据量庞大、业务连续性要求高、技术栈复杂等挑战。本书的第二部分将聚焦于各种场景下的Oracle数据迁移,提供系统性的方法论和实用技巧。 迁移策略与规划: 在正式执行迁移前,周密的规划是成功的关键。本书将指导读者如何评估迁移需求,分析源端和目标端数据库的差异(如版本、字符集、操作系统、硬件架构),选择合适的迁移方式(如逻辑迁移、物理迁移、混合迁移)。会详细讲解如何制定迁移计划,包括时间窗口的确定、迁移过程中断业务的最小化策略、回滚计划的制定,以及充分的测试方案。 逻辑迁移技术: 逻辑迁移适用于跨平台、跨版本或仅迁移部分数据的场景。本书将深入介绍expdp/impdp(Data Pump)的使用,这是Oracle推荐的逻辑迁移工具。会讲解如何进行表、Schema、整个数据库的导出与导入,如何处理数据类型映射、字符集转换、并行导入等问题。同时,还会介绍SQLLoader等工具在数据加载方面的应用。 物理迁移技术: 物理迁移通常用于要求极低停机时间的场景,通过复制物理文件来实现。本书将重点讲解RMAN的Duplicate Database功能,这是实现物理迁移的最有效方式之一。会详细介绍基于备份的Duplicate和Active Duplicate的区别与适用场景,以及如何在不同的网络环境下执行Duplicate操作。此外,还会涉及Oracle Data Guard作为在线迁移工具的解决方案。 在线迁移与零停机: 对于核心业务系统,尽量缩短甚至实现零停机迁移是重要的目标。本书将探讨如何利用Oracle GoldenGate等复制技术,实现数据的同步复制,从而在不中断业务的情况下完成数据迁移。会讲解GoldenGate的基本架构、配置、同步延迟的监控与处理,以及如何在迁移完成后平滑地切换业务。 迁移过程中的关键考虑: 除了核心技术,迁移过程中还需关注诸多细节。本书会强调数据一致性的验证方法,如行计数比对、关键数据校验等。会讨论如何处理迁移过程中的错误和异常,以及如何进行性能调优以加速迁移过程。此外,还会提及迁移后的验证、回滚操作的准备,以及业务应用的适配与测试。 三、 性能调优:效率与优化 数据库性能直接影响着业务系统的响应速度和用户体验。本书的第三部分将深入剖析Oracle数据库的性能调优,从SQL语句到系统架构,提供一套完整的优化体系。 SQL性能分析: SQL语句是数据库的灵魂,也是性能瓶颈最常见的来源。本书将教授如何使用SQL Trace、TKPROF、Explain Plan(执行计划)、DBMS_XPLAN等工具来分析SQL的执行过程。会详细解读执行计划的各个部分,识别慢SQL的潜在原因,如全表扫描、糟糕的连接顺序、不恰当的索引使用、绑定变量窥探等。 索引优化: 索引是提升查询速度的关键,但错误的索引设计也会导致性能下降。本书将详细讲解不同类型的索引(B-tree, Bitmap, Function-based, Composite等),如何根据查询模式选择合适的索引,以及如何避免索引的过度创建和维护成本。会讨论索引重建、索引合并、索引碎片整理等操作。 SQL优化策略: 在理解SQL的执行计划后,如何针对性地进行优化?本书将提供多种SQL优化策略,包括重写SQL语句、使用Hints(提示)、优化表连接方式、减少排序和分组操作、避免在WHERE子句中使用函数等。会通过大量实际案例,展示如何将低效SQL转化为高效SQL。 数据库内部机制与调优: 性能调优不仅仅是SQL的优化,还涉及数据库内部的运作机制。本书将深入讲解Oracle的内存结构(SGA、PGA)如何影响性能,如何通过调整 SGA 的组件(Buffer Cache, Shared Pool, Redo Log Buffer, Large Pool, Java Pool)来优化性能。会讨论I/O子系统的优化,如选择合适的磁盘组、I/O调度器,以及Oracle的I/O统计信息分析。 等待事件分析: 等待事件是衡量数据库性能瓶颈的直接指标。本书将介绍Oracle的等待事件视图(`V$SESSION_WAIT`, `V$SYSTEM_EVENT`, `V$SESSION_EVENT`),帮助DBA识别数据库在哪些方面存在瓶颈(如CPU, I/O, Network, Locking, Memory)。会针对常见的等待事件(如`db file sequential read`, `log file sync`, `enqueue`, `latch free`)提供相应的分析和解决思路。 性能监控与基准测试: 持续的性能监控是发现和解决问题的基础。本书将强调建立性能基准,并通过AWR(Automatic Workload Repository)和ASH(Active Session History)等工具来分析数据库的性能趋势,识别性能下降的周期和原因。会讨论如何定期进行性能基准测试,以验证优化效果并为未来的性能提升提供参考。 RAC与ASM性能考量: 对于Oracle RAC(Real Application Clusters)和ASM(Automatic Storage Management)环境,性能调优需要考虑其分布式特性。本书将简要介绍RAC环境下的全局缓存、消息传递、跨实例锁等待等性能问题,以及ASM的I/O分配、磁盘组规划等对性能的影响。 《Oracle DBA工作笔记:运维、数据迁移与性能调优》不仅仅是一本操作手册,更是一份积累了丰富实践经验的宝贵财富。本书的作者希望通过分享这些一线经验,帮助更多的DBA快速成长,能够从容应对各种挑战,为企业的数据资产保驾护航。本书的内容覆盖广泛,从基础的日常运维到复杂的数据迁移,再到深入的性能调优,为DBA提供了一个全面而深入的学习框架,必将成为Oracle DBA工作中的得力助手。