开发中常见的Oracle三大故障与调优方法

Oracle数据库故障类别及日常运维规划策略 数据库关联的所有控制文件是完全相同的。重做日志组由一个或多个重做日志文件组成,组中的每个日志文件都是其它日志文件的副本。进程监视程序(PMON) :PMON定期轮询服务器进程,如果发现某个服务器进程的用户不再处于连接状态,会进行恢复,并回退未提交的更改并解除失败会话持有的任何锁定。导致一个或多个数据库文件(数据文件、控制文件或重做日志文件)丢失或损坏的任何故障。理想情况下,快速恢复区应足够,可存放数据文件和控制文件副本,以及基于保留策略从保留的备份恢复数据库所需的闪回日志、联机重做日志和归档日志。 阅读详情

导读:怀晓明先生(网名lastwinner),是具有多年数据库开发与项目管理经验的数据库专家。曾获得第一届ITPUB较佳建议奖,在多个大型IT企业多年的工作历练中,积累了丰富的系统架构设计经验。合著作品有《剑破冰山——ORACLE开发艺术》、《Oracle DBA手记2》。

 

我们知道在平时的Oracle开发工作中我们有时候会遇到些BUG,我曾经碰到过的BUG大致分为三类:

 

1. 出现ora-00600,ora-03113,ora-07445等错误,导致程序无法执行

2. 执行计划错误,导致很长时间才出结果

3. 由于执行计划错误而给出了错误的结果

 

第一类很让人无语,明明写的代码没有任何问题,但Oracle就是报这几个错误中的一个。这一般是Oracle的bug导致的,少部分是执行计划错误导致的。一般在生产环境中碰到这样的问题,只能认栽,通常只能换个方式来实现同样的功能,要不然就得换开发方案,但这样的开发成本就会很高了。如果在开发环境中碰到,还可以通过给数据库打补丁来解决这类问题(如果Oracle发布了的话,不过在生产环境上,补丁不是随便就可以打上的,一定要打的话,必须先做充分的测试)。

 

第二类很使人无奈,不过还好,为什么说“还好”?因为,这至少还能出来正确的结果嘛!这一般可以通过给数据库打补丁、修改参数、添加强制提示等方法来解决这类问题。比如我曾经碰到过Oracle10.2.0.5在Linux 64bit下出的full outer join的bug(类似于官方给出的bug2927071),一个full outerjoin出来结果需要两三分钟,而通过修改参数


 

alter session set "_optimizer_native_full_outer_join"=force;

 

后,改变了原先不正确的执行计划,结果一秒内就哗哗哗的出来了,经验证结果也是正确的。

 

第三类是最悲催的,可以说直叫人生不如死。为什么这么说?第一类bug碰到的话,Oracle会报错,起码能提醒你此路不通;第二类bug碰到的话,起码你本能的可以感觉到这里有问题,就算你没意识到,结果也是正确的,对吧?但这第三类bug,我从9i到10g都碰到过,明明写的SQL没任何问题,但Oracle偏偏就给你错误的结果,还好每次都因细心发现了,及时调整了技术方案,才没导致更大的问题发生。

 

碰到这些bug并不就意味着你很倒霉,事实上,换个角度看,首先要恭喜你,因为这说明你的sql水平已经达到了一个较高的程度了;倘若你能意识到不对劲,那说明你足够敏锐;再若你还能找到解决办法,那你就很厉害啦!

至于如何识别、解决开发过程中碰到的这类bug,这个话题比较大比较深,以后有机会我再和大家分享。但在这里我需要指明的是,其实很多最终结果不正确的程序,多数都是因为代码本身的问题导致的,而因为Oracle Bug导致的问题只占极少的部分。

 

关于Oracle的优化,俗话说“树挪死,人挪活”,咱不能因为一块石头堵在前面就非得把它炸开才能前行,绕过去往前走也是一种方法,对吧?

 

做系统优化其实也一样。系统的性能提升是涉及到方方面面的,从网络、操作系统、数据库、应用服务器到程序,都有提升的空间。现在很多人都知道,最该优化的部分是攻城狮们开发的程序,比如拿数据库的性能问题占比举例,有可靠的统计数据指出,70%的问题出在攻城狮编写的SQL上。而在这现象背后更根本的还在于,没有可胜任数据库开发工作的攻城狮!一旦出现系统性能问题,大家第一反应就是去找调优高手来优化SQL,久而久之,这就成了一个习惯。就好像平常不注意预防疾病,反正病了就找大夫治疗,而你也许不知道在未来某一天,面对焦急的亲属,白衣天使也会无奈的摇摇头,摘下口罩,叹了口气轻声道:“我们已经尽力了,你们准备后事吧……”

 

很多公司,包括专门做IT的公司在内,的确是没有意识到提高开发技术可以有效的提高系统性能,这个现象的本质关键是老板们没意识到提高开发技术其实是可以降低开发和后期运营维护成本的,这笔账算清楚了,老板自然愿意投入资源来提高工程师们的开发技能。通常不是技术出身的老板是意识不到的,这就需要技术管理者“晓之以理,动之以情”说服老板投入资源。当然,老板投入资源后,技术管理者必须hold得住,要将事情漂亮得完成,看到效果的老板自然就不会存疑了。

 

对于意识到了但是没技术资源去做的情况,只能用其他资源来换取技术资源了,比如内部培养人才、找外包、从外部请和尚等等。

 

老外也有句谚语——“一天一个苹果,你就不需要医生了”,这说的也是预防为主。我们转换下思路,如果提高了攻城狮们的开发水平,甚至是配备了专职的数据库开发工程师,那写出较高质量的SQL就不是什么难事儿。这样就提前消除了多数性能方面的隐患,自然就降低了后期出现性能问题的概率,也免去了大量的请人做调优的成本,而提高攻城狮们的开发水平成本并不是特别高,何乐而不为?ISO-9000告诉我们,质量是生产出来的,不是检测出来的,同样,高质量的SQL应该是开发写出来的,而不应总是通过DBA去调优出来。无论公司是否意识到、是否有资源去做,提高开发技术尤其是数据库端的开发技术都是大势所趋,不去迎面解决问题而装鸵鸟是不可取的。

 

Oracle的开发和运维是一个系统性的工作。简单说就是理论与实践充分结合,只懂理论和只会实践同样是不可取的,要学会用理论指导实践,通过实践验证理论,在实践过程中不断丰富理论知识,在理论指引下不断的提高实践能力。

 

就数据库开发而言,最好具备如下能力与素质:

 

1. 掌握SQL基础知识和数据库基本理论,这会有助于你理解SQL是如何运作的,什么样的SQL会跑得更快。这可以通过学习相关白皮书或者技术文档获得

2.  学会提问。提问是一门艺术,无论学什么都需要掌握这门艺术。

3. SQL中高级知识,这能让SQL成为你的有力工具。这可以通过阅读官方文档,经常来itpub的数据库开发版块学习学习,来提高自己的水平。学习时不要想当然,就像trim并不等于rtrim+ltrim,认真读文档的人都知道。

4. 掌握至少一门相关的开发语言,java、php等等都行,这有助于你从另一个视角来认识数据库开发。

5.一定的数学能力,最好具备高中以上的数学知识。良好的数学素养可以为你带来新的思路和方法,有助于提高开发能力,并能帮助你理解。

6.一定的科学素养。类似于“某月有5个周五、周六和周日,这种现象823年才出现一次”的论调,一眼就要能看穿是假的(或者会通过程序去证伪),要知道1582年10月5日—14日这十天是不存在的等等。

 

总之,捷径是没有的,脚踏实地才能学得真知,做到以上几点,假以时日,成为高手并不是梦。

 

出处:墨天轮(https://www.modb.pro/db/7055,复制到网页中打开)

 

想了解更多关于数据库、云技术的内容吗?

快来关注“数据和云"、"云和恩墨"公众号及"墨天轮”: modb.pro,我们期待大家一同学习与进步!

Oracle Database 20c 十大新特性一览

 

墨天轮小程序”DBASK“在线问答,随时解惑,欢迎了解和关注!

Oracle Database 20c 十大新特性一览

 

Oracle数据库问题必知,最全的错误码(BUG)和解决方式汇总 Oracle数据库是企业级应用程序的关键组成部分,但它可能会面临各种BUG和故障。在Oracle数据库中,“BUG”是指软件中的错误或异常,这些问题可能会影响数据库的性能、数据完整性和应用程序的可用性。因此,对Oracle数据库中的BUG进行及时发现和诊断非常重要。在生产系统中,Oracle数据库中的一个小错误可能会导致整个系统崩溃。由于Oracle数据库经常处理量的数据和请求,因此遇到BUG的风险也很高。了解数据库中可能存在的BUG是企业非常重要的步骤,并及时修复已知的BUG以确保系统的正常运行。 阅读详情

相关推荐

Oracle 性能实战指南:从基础到高级

Oracle数据库性能的主要目标是提高数据库的响应速度、吞吐量和资源利用率,以满足业务需求。提升用户体验:通过化数据库性能,可以减少用户等待时间,提高系统的响应速度,从而提升用户满意度。提高系统效率:化后的数据库能够更高效地处理量数据和复杂查询,减少系统资源的浪费,提高整体运行效率。降低硬件成本:通过化数据库性能,可以在现有硬件资源的基础上实现更高的性能,从而避免不必要的硬件升级,降低硬件成本。增强系统稳定性:性能可以发现并解决潜在的性能瓶颈,减少系统故障的可能性,增强系统的稳定性和可靠性。

caifox的博客 1485

Oracle性能故障诊断案例分享

Oracle性能故障诊断案例分享,通过具体案例来进行分析,从而化及诊断解决问题。

Oracle DB Time深度解析:从性能模型到实战

数据库性能的核心在于理解系统时间消耗的分布根源。在Oracle数据库中,Time Model(时间模型)是构建性能分析框架的基石,它通过统计和分类数据库操作所花费的时间,为性能诊断提供量化依据。其核心价值在于将抽象的性能问题转化为可测量的时间维度,帮助DBA和开发者精准定位瓶颈。DB Time作为Time Model中的关键聚合指标,代表了所有前台会话在数据库用上的总耗时,是衡量数据库真实负载效率的核心标尺。通过分析DB Time的构成(CPU时间等待时间),并结合AWR/ASH报告、动态性能视

congli3478的博客 407

Oracle数据库安装类故障处理思路

理论派的DBA由于缺乏故障处理经验,所以碰到问题时就会觉得棘手,缺乏必要的诊断手段,可见经验和解决问题的思路对一个合格的DBA来说是非常重要的。虽然本章仅仅提供了一些解决的问题思路,但笔者认为问题的解决思路如同写作时的灵感,有了灵感之后,成稿就是水到渠成的事情。随着操作系统版本的更新换代,在安装Oracle的过程中往往会出现一些兼容性问题,所以即使是经验丰富的工程师也不能保证在数据库安装过程中不会出现错误。在本节主要跟家分享笔者自己或所了解的经验教训,希望家引以为戒,不要像当时的我一样犯同样的错误

weixin_46593978的博客 490

不属于oracle故障类型的是,oracle常见故障类型

数据库故障的几种类型:对于用户来说,数据库中保存的数据通常至关重要,所以要采取各种手段来防止各种可能的数据损失和数据故障,而DBA主要任务就是维持数据库的高可靠性运行,尽量提高数据库的连续可用时间,降低数据库的平均恢复时间,最小化故障时的数据损失及业务影响。在数据库环境中,常见故障类型:语句失败,用户进程失败,用户错误,实例失败,介质故障,网络故障,其中最为严重的故障主要是用户错误和介质故障,为了...

weixin_31750655的博客 417

Oracle数据库错误处理解决方案

本文还有配套的精品资源,点击获取 简介:Oracle数据库作为全球广泛使用的型关系型数据库管理系统,在企业级应用中占据重要地位。本文档“Oracle 错误一览表”收集了Oracle数据库系统中常见错误信息,涵盖了从基础的SQL语法错误到复杂的系统异常。它不仅包括了各种错误代码的含义解决方法,还提供了错误发生的环境条件、可能的原因分析以及推荐的解决策略。此外,文档可能还...

weixin_33816734的博客 2135

Oracle数据库的性能监控工具

随着企业数据量的不断增长,Oracle数据库作为一种广泛使用的关系型数据库管理系统,其性能的好坏直接影响到业务的正常运行。本文章的目的在于详细介绍Oracle数据库中常用的性能监控工具,帮助数据库管理员(DBA)、开发人员等更好地了解和运用这些工具,以提升Oracle数据库的性能。范围涵盖了Oracle数据库中多种内置的监控和工具,包括自动工作负载信息库(AWR)、SQL顾问(SQL Tuning Advisor)等,同时会结合实际案例进行分析。

2502_91592937的博客 1014

AI驱动的自治数据库:Oracle 23c的自我修复机制

Oracle 23c采用创新的层自治架构设计,通过软硬件深度协同实现数据库的智能化管理。该架构已在实际生产环境中验证,某型银行部署后DBA工作量减少70%,平均查询性能提升45%。

Made In SQL 1022

Oracle数据库核心操作完全手册:运维、开发必备

本文涵盖Oracle数据库从基础操作到高级运维的核心场景,所有SQL语句均经过实战验证,适用于Oracle 11g/12c/19c等主流版本。高危操作(如truncate、drop、kill session、闪回数据库)需提前备份数据,避免数据丢失;权限相关操作需以sys或system用户执行,普通用户需具备对应权限;、日志挖掘等操作建议在测试环境验证后,再应用到生产环境。

huanhuanzhou blog 967

Oracle第一话之性能

目录 1、问题 2、的过程 3、的目标 5、的步骤 补充 6、性能和安全的权衡 1、问题 1)哲学的问题和保安的问题是相同的: (1)你是谁? (2)你从那里来? (3)你要到那里去? 2)问题(3W):户外好,不做宅男宅女 (1)who?谁来 (2)why?为什么 (3)how?如何 应用软件的开发流...

SHOWufei 254

常见工具有哪些

Profiler工具:如Java的VisualVM、Python的cProfile、.NET的Visual Studio Profiler等。SQL Server性能工具:如SQL Server Profiler、Database Engine Tuning Advisor等。这些工具在各自的领域和特定的应用场景中能够帮助开发人员和系统管理员化性能、诊断问题并改进系统或应用程序的运行。常见工具通常根据不同的领域和用途而有所不同。静态分析工具:如SonarQube,用于代码质量和性能问题的检测。

NZC2237的博客 560

HoRain云--Oracle数据库核心操作完全手册:运维、开发必备

本文系统整理了Oracle数据库管理的核心操作指南,涵盖实例管理、表操作、权限控制、性能等16模块。主要内容包括:实例进程查询、SQL环境配置、表结构管理、多表查询、用户权限分配、约束索引管理、锁机制处理、日志挖掘(LogMiner)、RMAN备份恢复、闪回功能、表空间管理、SQL顾问使用等关键场景的实用SQL语句和操作流程。特别针对DBA日常工作中的高频需求,如死锁处理、会话跟踪、自动任务管理等提供了详细解决方案。所有语句均经过实际验证,适用于Oracle 11g/12c/19c等主流版本,可作

sinat_57153473的博客 584

oracle 带有变量的语句_通往测试架构师的必经路:Oracle常见性能问题总结...

Oracle在性能中提供了丰富的工具和报表支持,如何从众多指标获取有价值的信息则需要开发测试人员具有一定的基础和经验。本文主要对近几年碰到频率较高的几类性能问题进行经验总结,帮助开发、测试人员在过程中少走弯路,尽快定位、解决性能问题。除去硬件故障和产品本身bug外,本文分为配置类,sql效率类、应用程序逻辑类进行归纳介绍。1.配置类1.1绑定变量在联机交易系统中,对于频繁执行的SQ...

weixin_35990358的博客 127

oracle数据库常见故障情况数据恢复分析

一、Oracle启动后无法工作或者数据库无法启动 一旦数据库出现无法启动的情况,首先需要检查system表是否为未损坏状态,通常情况而言,如果system表未被损坏那么很容易进行数据恢复,如果system表已经被损坏,那么就需要数据恢复工作人员手动对表结构进行分析核对,这样数据恢复的周期就相对较长,但是数据恢复成功率依然较高,不用担心数据恢复失败。 二、Oracle 数据库的ASM存储受到损坏 这...

weixin_33884611的博客 735

oracle执行计划走错,oracle执行计划走偏处理步骤

-- sql执行时间select a.EXECUTIONS,a.ELAPSED_TIME,a.ELAPSED_TIME/a.EXECUTIONS/1000/1000 as 秒,a.SQL_ID,a.HASH_VALUE,a.address,a.SQL_TEXT from gv$session b,gv$sql a where a.hash_value=b.SQL_HASH_VALUE and ...

weixin_39902608的博客 631

oracle sql系列7(执行计划之走错)

在实际情况中,我们经常发现驱动表选错,或者执行计划走错的情况。在这种情况下,我们该如何整这个错误呢?就我所知道的,有如下几种方法: 1:重新收集表的收集统计,里边有两个比较重要的问题 第一个:用何种方式收集统计信息呢...

coo3678的博客 634

Oracle执行计划不稳定原因,Oracle执行计划异常

120的trc文件可以看到成本最低的是bit map and的执行路径:1. IDX_ORDER_ORDER_CONFIRM_TIME范围扫描的成本是694.69,索引的选择率是1.4638e-04Access Path: index (RangeScan)Index: IDX_ORDER_ORDER_CONFIRM_TIMEresc_io: 694.00 resc_cpu: 7033121ix...

weixin_39713317的博客 933

Oracle 量数据常见化查询

1.对查询进行化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询: se

wclyy的博客 3069
上一篇: Oracle Database 20c 十大新特性一览
下一篇: Oracle在HPUX IA64平台登陆缓慢问题分析
数据和云
博客等级 码龄9年 3815粉丝 743原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值