百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

30年数据库老炮回首:Oracle也曾是DBA的噩梦……

mhr18 2025-02-06 15:45 18 浏览 0 评论

前阵子一个数据库原厂的售后人员和我聊天的时候说,好像我们这批老 ORACLE DBA 更能理解和包容国产数据库的现状。我说当然,现在的年轻DBA都只见过一个超级牛X的 Oracle 数据库,哪像我们有过被 Oracle 虐得体无完肤的经历。他们不知道数据产品都会经历不堪回首的童年,才能变得越来越好,国产数据库也是如此。


Oracle 辛酸往事


确实,Oracle 也不是天生像现在这么牛的,我刚开始用 Oracle 的时候, Oracle 也只像个仍然又爱又恨的渣男。哪怕不提不堪回首的90年代,只是从相对来说比较靠谱的 Oracle 9.2 时代谈起,那时候的 Oracle 往事对于 DBA 来说也是十分辛酸的。


Oracle数据库跑起来杠杠的,从来不宕机,这话不适合十多二十年前的场景。那时候数据库宕机、重启、HANG住、慢得不能用这种事情经历过太多了。数据库重启一下,一个小时关不掉,半个小时起不来也是常有的事情。而且因为当时对 Oracle 数据库的原理不太了解,连为啥关不掉起不来都不清楚,也不敢随便瞎操作,甚至有些用户都不敢轻易关闭或者重启数据库。


面对莫名其妙的HANG死或者慢得不能使用的数据库而束手无策的场景现在还经常被记起。CBC闩锁、BUFFER BUSY WAITS、LATCH FREE、…,哪个问题出现都会让DBA忙上半天一天的。更不要说是不是出现的shared pool、library cache lock、ORA-4031问题了。


ORA-1591错误


说起Oracle那些不堪回首的往事,我第一个会想起的就是ORA-1591错误。能够一下子反应出这是个什么问题的DBA估计至少也过了40岁了,因为从Oracle 10g以后,Oracle在分布式事务失败方面的自动处理能力就很强了。


而对于Oracle 8i、9i甚至更早期的用户来说,这可以说是一个噩梦。


那时候基于TUXEDO的XA分布式事务挺流行的,DBLINK也是开发人员常用的技术。对于两阶段提交来说,一旦分布式事务失败,那么数据库系统或者XA管理器应该自动回滚或者提交事务。不过早期的Oracle数据库这方面的处理能力很差,而且因为数据库本身也不够成熟,分布式事务失败的比例也挺高的。


如果分布式事务失败了,而且dba_2pc_XXX相关的数据字典不完整,那么数据库是无法自动回滚或者提交分布式事务的。如果正好其他应用需要访问这个处于未决阶段的数据时,ORA-1591错误就出现了。


一般情况下,数据库出问题,祭出重启大法就可以解决问题。不过ORA-1591这个分布式事务故障引擎的错误,并不会因为数据库重启而消失,很多用户反复重启数据库都无法解决这个问题。这时候只能手工将dba_2pc_pending等系统字典的数据补充完整,然后使用rollback force或者commit force强制回滚或者提交相关本地事务。这是差不多二十年前我最经常在半夜被吵醒后遇到的问题。大多数用户在远程指导下,花上十几二十分钟,就能解决问题。Oracle的这个问题虽然令人烦恼,不过也让我时不时借此发笔小财。


ORA-1578问题


ORA-1578也是Oracle 8、9用户经常会遇到的问题。那时候的Oracle数据库BUG多得数不清,最让人头疼的还是能够引发逻辑坏块的BUG,刚开始我还以为坏块都是硬件引发的,不过后来发现,Oracle BUG产生逻辑坏块的机会远远大于硬件。一旦出现逻辑坏块,就必须用dbms_repair去修复,无法修复的坏块只能用这个工具去将这个块强制标注为坏块,否则一旦做全表扫描操作的时候,SQL就会报错。那时候的应用写得很烂,想要避开全表扫描几乎是不可能的。


有些逻辑坏块还不是以ORA-1578的形式报出来的,有时候出现ORA-600[kcbgtcr_x]也意味着应用扫描到了逻辑坏块。


有一次一个哥们给运营商做9.2.0.2到9.2.0.5的升级。升级完第二天一上班数据库就开始大量报这个ORA-600错误。我哥们还在睡梦中被用户叫到现场,在IT部门的大大小小领导的注视下坐在终端面前,脑子里一片空白。


事后他心有余悸地对我说,他当时脑子里一片空白,不知道该如何去分析这个问题,不过在那么多甲方领导的注视下,他不能傻坐在那什么也不做,于是他不断地在SQLPLUS里敲着不知所谓的SQL语句来拖延时间。因为他在路上的时候给我打了电话,因此他知道他在现场的一切工作都是没有任何指望的,唯一能指望的就是我在远方帮他查metalink。


那天也算比较幸运,他乱敲了十几分钟键盘后,我找到了一个类似的BUG,我的电话解救了他。虽然那时候我们俩都不是很确定是否是这个BUG导致了这个600号错误,但是已经没有选择了。所幸的是打完这个补丁,错误居然消失了。


Oracle DBA的过人之处


在那些不堪回首的岁月里,作为一个Oracle DBA除了要拥有过人的技术之外,还得拥有过人的胆识。就像我这个哥们,在一堆领导的注视下,居然能够不停歇地敲了十几分钟命令。这种素质如果换成我肯定能是不行的。


在应对复杂问题的情况下,DBA都必须有几手绝活。比如阅读分析ALERT LOG,分析SYSTEM STATE DUMP,进行HANGANALYZE 分析,查看操作系统日志等等。数据库HANG了,SQLPLUS无法登录数据库,你还有没有办法去做HANG的诊断?sqlplus -prelim ‘/as sysdba’这种技巧都不掌握的人,遇到此类问题不就麻爪了?


遇到某个ORA错误或者ORA-600错误,能不能从错误号上大致判断出故障的范围区间?在那个年代里,我敢说我是这方面的高手,每天都要翻几遍错误号段表让我对这些错误十分敏感。



前两天一个朋友在群里问一个错误信息,我已经好多年没在一线干运维了,不过基于二十年的机械记忆,在没有翻资料的情况下,我很快就大体给出了一个方向,没想到还蒙对了。对于被Oracle数据库折磨了多年的老DBA来说,在这些方面都有些特长。



总结


Oracle也不是生来就是一个优秀的数据库的,宕机、BUG、坏块、GCS/GES、共享池、HANG死、不可用也曾时时困扰着DBA们。不过问题多多的Oracle培育了一大批水平极高的DBA。二十年前,我还经常在MSN上帮助一些国外的DBA解决一些棘手的问题。有一次一个老外问我,你应该是中国最牛的Oracle DBA了吧。我回答说:“只能算还行的,比最牛的DBA还差得很远”。他最后说了一句:“中国的DBA太牛了”。


现在我们面对的国产数据库也像还没有超级牛逼的Oracle一样问题多多,前阵子听一个朋友如此评价国产数据库,“自主研发的全是BUG,基于开源的了无新意”,对国产数据库甚为不屑。数据库这样复杂的基础软件系统,必须在大量用户的使用过程中不断地提升改进,才能消除大量的软件BUG,最终逐渐走向成熟。Oracle花了二十多年时间,已经变得十分完美了,我们也应该给国产数据库几年成长的时间吧。



作者丨白鳝

来源丨公众号:白鳝的洞穴(ID:baishan755)

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


相关推荐

一文读懂Prometheus架构监控(prometheus监控哪些指标)

介绍Prometheus是一个系统监控和警报工具包。它是用Go编写的,由Soundcloud构建,并于2016年作为继Kubernetes之后的第二个托管项目加入云原生计算基金会(C...

Spring Boot 3.x 新特性详解:从基础到高级实战

1.SpringBoot3.x简介与核心特性1.1SpringBoot3.x新特性概览SpringBoot3.x是建立在SpringFramework6.0基础上的重大版...

「技术分享」猪八戒基于Quartz分布式调度平台实践

点击原文:【技术分享】猪八戒基于Quartz分布式调度平台实践点击关注“八戒技术团队”,阅读更多技术干货1.背景介绍1.1业务场景调度任务是我们日常开发中非常经典的一个场景,我们时常会需要用到一些不...

14. 常用框架与工具(使用的框架)

本章深入解析Go生态中的核心开发框架与工具链,结合性能调优与工程化实践,提供高效开发方案。14.1Web框架(Gin,Echo)14.1.1Gin高性能实践//中间件链优化router:=...

SpringBoot整合MyBatis-Plus:从入门到精通

一、MyBatis-Plus基础介绍1.1MyBatis-Plus核心概念MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提...

Seata源码—5.全局事务的创建与返回处理

大纲1.Seata开启分布式事务的流程总结2.Seata生成全局事务ID的雪花算法源码3.生成xid以及对全局事务会话进行持久化的源码4.全局事务会话数据持久化的实现源码5.SeataServer创...

Java开发200+个学习知识路线-史上最全(框架篇)

1.Spring框架深入SpringIOC容器:BeanFactory与ApplicationContextBean生命周期:实例化、属性填充、初始化、销毁依赖注入方式:构造器注入、Setter注...

OpenResty 入门指南:从基础到动态路由实战

一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...

你还在为 Spring Boot3 分布式锁实现发愁?一文教你轻松搞定!

作为互联网大厂后端开发人员,在项目开发过程中,你有没有遇到过这样的问题:多个服务实例同时访问共享资源,导致数据不一致、业务逻辑混乱?没错,这就是分布式环境下常见的并发问题,而分布式锁就是解决这类问题的...

近2万字详解JAVA NIO2文件操作,过瘾

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。从classpath中读取过文件的人,都知道需要写一些读取流的方法,很是繁琐。最近使用IDEA在打出.这个符号的时候,一行代...

学习MVC之租房网站(十二)-缓存和静态页面

在上一篇<学习MVC之租房网站(十一)-定时任务和云存储>学习了Quartz的使用、发邮件,并将通过UEditor上传的图片保存到云存储。在项目的最后,再学习优化网站性能的一些技术:缓存和...

Linux系统下运行c++程序(linux怎么运行c++文件)

引言为什么要在Linux下写程序?需要更多关于Linux下c++开发的资料请后台私信【架构】获取分享资料包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdf...

2022正确的java学习顺序(文末送java福利)

对于刚学习java的人来说,可能最大的问题是不知道学习方向,每天学了什么第二天就忘了,而课堂的讲解也是很片面的。今天我结合我的学习路线为大家讲解下最基础的学习路线,真心希望能帮到迷茫的小伙伴。(有很多...

一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)

前言15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要...

多商户商城系统开发全流程解析(多商户商城源码免费下载)

在数字化商业浪潮中,多商户商城系统成为众多企业拓展电商业务的关键选择。这类系统允许众多商家在同一平台销售商品,不仅丰富了商品种类,还为消费者带来更多样的购物体验。不过,开发一个多商户商城系统是个复杂的...

取消回复欢迎 发表评论: