IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / Oracle Life
IT 2010-12-16 21:40:27 / 累计浏览 3,520

kswapd 进程占用过多资源导致RAC宕机

这篇讲的是一个在上海客户现场的RAC宕机故障排查故事。作者从一次突发的Oracle RAC集群宕机事件出发,深入诊断发现根因竟是Linux内核的kswapd进程异常占用大量CPU资源。kswapd作为内存回收守护进程,本应在系统内存压力下释放内存,但在此案例中,由于特定负载或配置问题,它陷入了高频循环,导致CPU使用率

本机暂存
IT 2010-12-02 22:30:26 / 累计浏览 3,020

Oracle数据库恢复:存储故障导致的数据损坏

这篇讲的是一个真实的大型数据库灾难恢复案例。面对一个4TB的、运行在浪潮存储设备上的Oracle数据库,整个系统因为存储控制器突然损坏而陷入崩溃,导致了数据损坏。文章详细记录了从故障发生后的应急判断,到深入分析存储层面的控制器失效如何波及上层数据库文件,再到执行恢复操作的全过程。 核心的挑战在于,这种由底层硬件引发的损坏往往复杂且影响深远。作者没有停留在表面症状,而是剖析了故障链条:控制器故障不仅导致了I/O错误,更关键的是破坏了数据库文件写入的完整性和一致性。这解释了为什么简单的重启或文件拷贝无法解决问题。 最终,通过专业的数据库恢复工具和一套严谨的操作流程,成功挽救了数据。整个案例的价值在于它揭示了存储与数据库之间紧密的依存关系,对于负责运维或架构的技术人员来说,这是一次宝贵的实战经验复盘,清晰地展示了如何从硬件故障的迷雾中定位问题并实施有效恢复。

本机暂存
IT 2010-11-10 02:17:26 / 累计浏览 3,000

Latch free竞争 - 最近的SAP测试项目小记

这篇讲的是作者在一个SAP测试项目中,围绕Oracle后端数据库进行性能优化时,与“Latch free”竞争打了一场硬仗。问题表现为特定负载下系统性能出现瓶颈,通过监控发现Oracle的“latch free”等待事件异常飙升。这不是典型的锁等待,而是Oracle内部内存结构(如缓冲池、共享池)的热块争用问题,处理起来更为棘手。 作者没有停留在表面等待事件,而是深入ASH和AWR报告,像侦探一样抽丝剥茧,最终将矛头指向了数条高频执行、涉及大量索引读取的SQL语句。这些语句造成了对特定内存区域(如“cache buffers chains” latch)的激烈竞争。优化的核心并非调整复杂的数据库参数,而是回归到SQL本身——通过重写低效SQL、调整执行计划和优化索引结构,从源头减少对关键内存区的并发访问压力。 经过一轮反复的测试与验证,系统的响应时间和吞吐量得到了显著改善,那个高企的等待事件曲线也回落到了正常水平。这个案例生动地说明,数据库性能问题有时深藏在应用逻辑与底层内存机制的交互中,解决它需要一份对内部原理的好奇心和一套从应用到内核的完整排查思路。

本机暂存
IT 2010-11-01 19:56:17 / 累计浏览 14,400

Oracle MTS模式下 进程地址与会话信息

这篇讲的是Oracle数据库在MTS(多线程服务器)模式下一个容易忽略的监控现象。作者从客户现场的实际问题出发:在操作系统层面,明明找不到对应的数据库连接进程,但在数据库内部,会话信息却清晰可见。这种“OS无踪,DB有迹”的反差,正是理解MTS架构的关键。 MTS模式改变了传统的“一个会话一个专用进程”模式。它通过调度器(Dispatcher)将大量用户会话复用到少量的共享服务进程上,这极大提升了高并发场景下的资源利用效率。因此,当检查OS时,你看到的是共享进程的进程ID(PID),而不是每个独立会话的PID。而数据库内部的会话视图(如V$SESSION)依然忠实记录着每一个逻辑连接。 作者通过这个案例,揭示了在MTS模式下进行性能监控或问题排查时,必须调整传统的思路。单纯依赖操作系统工具查看网络连接或进程树可能无法定位真实的会话活动,需要结合数据库内部的动态性能视图进行交叉比对。这种架构选择带来了效率,也要求管理员掌握更深入的视图知识来洞悉数据库的真实运行状态。

本机暂存
IT 2010-10-26 22:11:57 / 累计浏览 2,800

Oracle统计信息的收集、管理与清除

这篇讲的是Oracle数据库中统计信息的全生命周期管理——从收集、维护到最终清除的关键操作与潜在风险。作者从实际经验出发,强调了统计信息对于CBO(基于成本的优化器)生成正确执行计划的核心作用,指出“收集”并非简单的一键操作,需要针对表的数据分布、索引情况和业务负载特点,合理选择采样比例和并行度,否则可能适得其反。 文章深入剖析了管理环节的常见问题,比如统计信息过期或失效的典型场景(如大规模数据变更后),以及如何通过查询数据字典视图(如DBA_TAB_STATISTICS)来监控其状态。一个值得注意的细节是,作者提到了统计信息被锁定的利弊——虽然能防止自动收集任务覆盖手动优化的结果,但也可能导致优化器决策滞后。 最核心的警示来自“清除”部分。文章通过一个因误删分区统计信息导致生产环境SQL性能骤降的实例,阐明了统计信息清除的高风险性。作者指出,直接执行“DELETE_STATISTICS”或“DBMS_STATS.DELETE”操作前,必须评估其依赖范围,建议优先采用备份、重收集或还原至历史版本的方案,而非彻底删除。 整篇文章将三个独立的操作环节串联成一条逻辑线,揭示了它们之间的相互影响。它没有停留在操作命令的罗列,而是从“为何要谨慎”的视角,提供了评估统计信息价值的决策框架,帮助读者在性能调优时避免常见陷阱。

本机暂存
IT 2010-08-01 19:53:23 / 累计浏览 2,720

AWR 与 Statspack 数据的导出与迁移

这篇讲的是如何把 Oracle 数据库中 AWR 和 Statspack 的性能数据导出并迁移。作者从这两个工具的数据结构差异出发,指出它们虽然都用来监控数据库性能,但底层表结构不同——比如 AWR 数据存在 DBA_HIST_* 历史表中,而 Statspack 依赖 SNAP 和 STATS$ 前缀的表。直接拷贝表数据或跨版本迁移时,很容易因为快照 ID 冲突、序列号不连续或权限问题导致数据无法加载。文章重点演示了用 EXPDP/IMPDP 工具配合查询过滤来安全导出,以及如何处理导入时的表名映射与外键约束问题。最后通过一个从 11g 迁移到 19c 的实际案例,展示了迁移后如何验证 AWR 报告的连续性,确保历史趋势数据没有断层。

本机暂存
IT 2010-07-27 23:15:32 / 累计浏览 2,260

Linux下硬盘格式化的相关命令Partprobe

这篇讲的是作者在实际操作Linux硬盘格式化时,对一个关键但容易被忽略的命令——partprobe的记录与总结。在Linux下进行分区或格式化操作后,有时新创建的分区不会立刻被系统识别,导致后续操作出错。问题的根源在于内核可能缓存了旧的分区表信息。文章的核心就是介绍partprobe这个命令如何“通知”内核强制重新读取磁盘的分区表,从而让新分区立即生效,无需重启。 作者从一次具体的格式化经历出发,点明了partprobe命令的核心作用原理与使用场景。对于需要频繁进行磁盘管理的运维人员或开发者来说,掌握这个命令能有效避免因分区不同步而引发的种种诡异报错,让工作流程更加顺畅。

本机暂存
IT 2010-07-21 09:34:16 / 累计浏览 3,060

关于读书 - 我的经验与分享

这篇文章里,作者分享了自己关于读书的经验与思考。起因是接受了萧秋水女士的访问,将其中的内容整理并发表在了《程序员》杂志上。而在博客中,他呈现了更完整的版本,其中不少感悟也源自他过往的博客积累。 不同于讲授具体的技术方法,这篇文章更像是一次心路历程的梳理。作者从个人实践出发,探讨了读书在技术人成长路径中的位置与意义。他没有给出某种“必读书单”或“速成法则”,而是坦诚地分享了自己是如何阅读、为何阅读,以及阅读如何反哺于实践与思考的。这种经验性的总结,往往比方法论更具参考价值。 对于经常在代码与文档中穿梭的我们,这篇文章提供了一个稍作停顿的视角,去重新审视“读书”这件看似熟悉之事背后的个人逻辑。它或许能让你在下次翻开书本前,多一分清晰的自觉。

本机暂存
IT 2010-07-19 22:34:36 / 累计浏览 2,460

Oracle数据恢复:格式化会损坏多少数据?

这篇讲的是用户误操作格式化硬盘后,Oracle数据库到底会丢多少数据的问题。作者从一个真实案例出发,分析了格式化操作对磁盘底层结构的破坏程度——它主要清除的是文件系统的分配表信息,而非立即覆写全部数据扇区。这意味着,只要新的数据没有大量写入覆盖,原先的数据块仍有恢复的可能。 文章的核心在于拆解Oracle数据库文件的存储特性。由于数据文件通常是连续的大块存储,且Oracle自身有较完善的数据块校验机制,恢复的关键在于能否完整提取出这些数据文件。作者进一步说明,从底层磁盘扇区扫描并重组数据库文件是可行的路径,但过程复杂且依赖工具与经验,能否成功很大程度上取决于误操作后的磁盘使用状况。 因此,文章最终给出的结论并非技术上的万无一失,而是一个明确的行动指南:一旦发现误格式化,必须立即停止对该磁盘的任何写入操作,并第一时间寻求专业数据恢复服务。这对于DBA和运维人员来说,是一篇能加深理解、并避免灾难扩大的实用警示。

本机暂存
IT 2010-06-21 17:30:28 / 累计浏览 1,680

Oracle Index Merge 与 and_equal 的变迁

and_equal作为Oracle的一种索引合并操作,经历了从推荐使用到逐渐淡出的变迁。这篇讲的就是这段“历史”背后的技术细节。 文章详细分析了and_equal的工作原理:它能够将多个单列索引的结果集直接合并,从而避免回表。你可以通过Hints语法强制使用它,但有限制——最少指定两个索引,最多五个,并且作者附上了典型的执行计划来展示其运作方式。 更重要的是,作者梳理了它在不同Oracle版本中的地位变化,以及在现代执行计划中,基于成本的优化器(CBO)更倾向于哪种路径选择。这对于理解优化器的行为模式很有帮助。 对于需要处理复杂查询的DBA或开发来说,理解这段历史有助于在调优时判断,是否值得尝试这种“复古”的手段,还是应该完全信任优化器的现代决策。

本机暂存
IT 2010-06-02 23:06:55 / 累计浏览 2,800

Mysql 5 数据库 中文乱码问题的解决

这篇讲的是作者在迁移自己网站时,遇到的一个非常经典且恼人的坑:MySQL 5数据库中的中文乱码问题。这几乎是每个中文开发者或运维都绕不过去的“必修课”,但每次碰上都让人头疼。 文章的核心直指问题的根源——字符集设置的不统一。作者没有停留在表面现象的描述,而是深入到数据库连接、服务器端、数据库本身以及数据表结构等多个层级,去检查和统一编码。他清晰地指出,在迁移或新建环境时,一个字符集配置的疏忽,就会导致数据“写得进去,读不出来”的窘境。 文章的解决思路非常实用,它引导读者一步步检查关键配置文件(如my.cnf)中的`character_set_server`、连接字符集等参数,并确保它们与应用程序的编码保持一致。对于很多被乱码折磨的开发者来说,这种按图索骥式的排查指南,比空谈理论要管用得多。 作者通过解决自己网站迁移中的实际问题,把一个普遍的技术痛点和对应的解决方案讲得透彻明白,对于正在或即将处理类似数据迁移任务的朋友,能提供切实的帮助。

本机暂存
IT 2010-05-27 12:29:23 / 累计浏览 1,900

ORA-00600 kcratr_nab_less_than_odr案例一则

这篇讲的是一个Oracle数据库中经典的ORA-00600内部错误案例。作者从朋友实际遭遇的 kcratr_nab_less_than_odr 报错出发,详细还原了故障现场。这个错误参数通常指向控制文件记录的信息与数据文件头记录的信息不一致,具体是“NAB(Next Available Block)小于ODR(On-Disk Redo SCN)”的矛盾。 文章深入分析了根本原因:在数据库异常重启过程中,由于归档日志缺失或不连续,导致恢复过程无法找到正确的检查点位置来继续前滚。作者清晰地梳理了诊断思路,从检查alert日志、查询控制文件快照,到最终定位到特定的数据文件头损坏。解决过程并非简单粗暴地重建控制文件,而是通过精心构造的脚本,将数据文件头中的相关信息校正到与控制文件一致的状态,从而避免了数据损失。 这个案例的价值在于,它不仅给出了一个具体问题的解法,更演示了一套完整的、严谨的故障诊断与修复逻辑,对于处理复杂的数据库不一致性问题具有很强的参考意义。

本机暂存
IT 2010-02-23 13:40:30 / 累计浏览 2,760

SMON: recover undo segment 与 事务恢复

这篇讲的是Oracle数据库在异常宕机后,SMON后台进程如何自动进行事务恢复,特别是对undo段的处理。文章从alert日志中常见的“recover undo segment”提示切入,拆解了这个过程:SMON如何扫描回滚段、处理悬而未决的事务,以及将数据块恢复到一致状态。作者不仅解释了机制,还给出了关键的判断思路——如何通过日志中的关键词和后续的一致性检查(如DBA_SEGMENTS),来确认恢复是否彻底、数据库是否真正健康。这对理解数据库的自愈能力以及诊断“数据库假死”类问题很有帮助,尤其是在那些宕机原因不明、恢复后行为异常的棘手场景下。

本机暂存
IT 2010-01-19 09:28:52 / 累计浏览 1,660

SQL 共享之 ROLL_INVALID_MISMATCH 含义

这篇讲的是一个朋友遇到的SQL共享难题。一条SQL莫名选择了低效的MERGE JOIN CARTESIAN执行计划,检查发现是游标无法共享导致的。问题定位到V$SQL_SHARED_CURSOR视图中一个名为ROLL_INVALID_MISMATCH的标志位。 这个标志字面意思是“滚动失效不匹配”,Oracle官方文档解释为“已标记进行滚动失效且超出了失效窗口”。它其实指向了一个特定的Oracle优化机制:在DBMS_STATS收集对象统计信息时,Oracle可以选择不立即让依赖的游标失效,而是给一个宽限期(窗口)。一旦宽限期结束,这些游标就会被批量标记为失效,下次执行时需要重新解析和生成计划。 所以,ROLL_INVALID_MISMATCH的出现,通常意味着这次统计信息收集后,该SQL相关的游标正处于这个“等待批量失效”的状态。这本质上是Oracle为平衡性能与计划新鲜度而设计的一种滚动失效策略。理解这一点,是解决这类“SQL突然变慢”问题的关键线索之一。

本机暂存
IT 2009-12-25 15:28:51 / 累计浏览 2,440

MMAN - Oracle 10g的Memory manager进程

这篇讲的是Oracle 10g中一个容易被忽略的关键后台进程:MMAN(Memory Manager)。文章从Oracle官方文档中对MMAN“用于内部数据库任务”这一相对模糊的描述切入,指出其核心职责显然是负责数据库实例的自动内存管理。这意味着当SGA或PGA需要根据负载动态调整时,正是这个进程在幕后进行协调和执行。 作者进一步探讨了MMAN可能承担的其他“内部任务”,并点出与它直接相关的一个重要等待事件,为实际的性能诊断提供了线索。通过剖析这个进程的角色,文章不仅解释了Oracle内存自动化背后的执行者是谁,也提醒DBA们在进行内存分析和故障排查时,不应忽视对MMAN相关活动的关注与监控。

本机暂存
IT 2009-12-25 15:27:07 / 累计浏览 3,700

《Oracle DBA手记》一书推荐 - 感谢刘松先生

这篇讲的是《Oracle DBA手记》这本书的出版花絮,但背后其实点出了技术书籍一个很关键的“背书”环节。作者在书正式出版前,特意邀请了甲骨文大中华区的产品战略总监刘松先生审阅部分书稿,并为全书撰写导言。刘松先生在技术战略和产品层面拥有深厚积累,他的认可,相当于为这本聚焦实战经验的“手记”盖上了一个来自业界权威的“专业印章”。 这种安排不仅仅是一个简单的推荐。它体现了作者对于内容严谨性的追求——一本书的价值,不仅在于作者自身的实践总结,更在于它是否能经得起同行专家的审视。刘松先生的导言,很可能从更宏观的数据库技术演进和行业需求的角度,为书中具体的故障排查、性能优化案例提供了更高维度的解读,帮助读者理解这些“手记”背后的技术脉络与时代价值。 因此,这篇文章的分享,不仅是推荐一本DBA的实用参考书,更是提醒我们:一份可靠的技术经验,其传递过程本身就需要严谨的流程和专业的互动来加持。书中刘松先生的那段话,或许正是连接一线实践与行业视野的一座小桥。

本机暂存