IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:oracle

共 201 篇相关文章

IT 累计浏览 3,007

PL/SQL的那些事儿

这篇讲的是PL/SQL在Oracle数据库中的正确使用姿势,作者通过对比两种常见场景,点明了优化的核心。 文章清晰地划分了PL/SQL的两类使用场景:一类是作为“胶水”,串联一系列SQL分析语句,性能瓶颈主要在SQL引擎;另一类是用游标逐行处理数据,进行过程化计算。作者指出一个关键现象:即便优化后者,性能提升也有限;但若将其重写为前者纯SQL驱动的模式,性能常能获得成百上千倍的提升。这揭示的根本原则是:务必优先利用数据库核心的SQL引擎能力,而非用过程化代码(无论是Java还是PL/SQL)去替代它。 当然,PL/SQL并非一无是处。文章也强调了其不可替代的价值,例如实现数据库内部监控工具。作者用了一个形象的类比:将监控代码部署在数据库内部,就像把监控脚本直接放在被监控主机上,避免了网络开销,能获取更精确的数据。文中推荐的工具Session Snapper,就是一个典型的、高效运行在数据库内部的PL/SQL诊断范例。 因此,PL/SQL是一把宝剑,用于数据库管理与扩展时锋利无比;但若当作处理数据的“菜刀”来过度使用,则可能事倍功半。

IT 累计浏览 3,065

深入理解Oracle中的Mutex

这篇讲的是Oracle数据库中两种底层串行机制——Mutex与Latch的深度对比分析。作者从内部机制出发,清晰阐述了Mutex为何以及如何在多个场景下成为更优的选择。 关键差异首先体现在效率上:Mutex获取仅需约30~35个CPU指令,而Latch需要150~200个;其内存结构也仅16字节,远小于Latch的112字节。更重要的是,Mutex的设计能大幅减少伪争用——不同于一个Latch保护多个热点对象,一个Mutex可以专门服务于单个数据结构(如每一个父游标或子游标),使得串行控制点更精准。 文章详细剖析了Mutex如何兼具传统Latch和Pin的双重职责。其内嵌的引用计数(ref count)机制,使其能像Pin一样防止对象被释放,同时自身又提供了必要的串行保护。在10.2版本后,这直接替代了游标执行时频繁创建/销毁library cache pin的昂贵操作,后续进程只需轻量级地增减引用计数即可。作者以KKS游标共享为例,列举了在父游标检查、统计信息访问等操作中,Mutex如何带来更低的解析成本和更好的并发性能。 最后,文章也提供了从AWR报告解读Mutex等待事件(如cursor:mutex S/X, cursor:pin S)的思路,并附上了统计信息表示例,为实际的性能诊断提供了具体指引。

IT 累计浏览 4,704

Oracle数据恢复专题

这篇专题文章直击一个国内DBA常面临的痛点:如何在缺少规范备份的严苛条件下,执行Oracle数据库的恢复操作。作者从东西方DBA工作重心的差异切入,坦言“无备份恢复”在国内技术环境中,有时会成为一种被迫练就的“屠龙之技”。 文章并非泛泛而谈,而是系统整理了一系列极具实战价值的案例与脚本。从利用DUL、BBED等底层工具直接抢救数据文件,到通过构造ROWID巧妙绕过ORA-1578等坏块错误;从处理ASM磁盘头丢失这类存储层灾难,到解决PL/SQL对象被覆盖、数据文件名乱码等逻辑故障。每一个链接背后,都是一个需要深入理解数据块结构与数据字典的硬核场景。 对于需要直面数据库“心跳停止”时刻的工程师来说,这份专题更像是一本应急手册。它提供的不只是方法,更是对Oracle内部机制的理解深度——在备份失灵时,这份理解往往是找回数据的最后一道防线。

IT 累计浏览 5,478

老托的Oracle 数据库Patch概念性小常识

这篇讲的是Oracle数据库补丁体系中那些容易混淆的概念。文章清晰地梳理了从标准版本Release,到累积型的Patch Set (PSR)、季度发布的Patch Set Update (PSU) 和 Critical Patch Update (CPU) 等各类补丁的定义与区别。 特别实用的部分在于,它点明了不同补丁的发布逻辑和应用场景:例如,PSU和PSR虽是累积型,但PSU不改变主版本号;在Windows平台上则使用Bundle Patch (BP) 作为替代。文章还澄清了小补丁 (One-Off Patch)、合并补丁 (Merged Patch) 以及诊断补丁 (Diagnostic Patch) 的具体用途和注意事项。 对于希望理解补丁策略的DBA来说,文中的安装建议很有价值,比如推荐安装最新的PSR,以及在应用小补丁前务必进行测试。文章最后引入了Composite Patch的概念,解释了这种新格式如何通过增量安装减少时间开销,并与之前的PSU版本构成了清晰的包含关系,为管理补丁提供了新的视角。

IT 累计浏览 5,543

Oracle DBA的学习进阶成长树-从初出茅庐到高瞻远瞩

这篇文章探讨的是 Oracle DBA 这条技术路径上的长期成长规划。作者根据自己多年的经验,将 DBA 从新手到专家的历程,清晰地划分为五个进阶阶段,并指出这大约需要十年的持续积累。 文章的核心观点是,在任何一个技术领域,扎实的阶段性积累远比频繁跳槽更为重要。作者特别强调,对于一位有十年经验的 DBA,面试官最看重的是他是否曾在某个阶段,全心钻研过底层技术。如果没有这样深入的“磨练”,职业高度便会受限。这个视角点明了技术精进的关键。 文中还引用了一位网友的精彩比喻,用“少年听雨”到“灯火阑珊”的五句宋词,来映射 DBA 从青涩到豁达的五重境界,为硬核的技术成长增添了一份人文的注解。 如果你正在数据库管理的职业道路上探索,这篇文章提供的阶段模型和心态建议,或许能帮助你更好地校准自己的方向。

IT 累计浏览 3,023

关于blockrecover 解决坏块相关测试与总结

这篇文章讲的是,当线上数据库因硬件故障(如小机意外掉电)出现大量坏块,甚至坏块中包含未提交事务时,如何使用Oracle的blockrecover命令进行恢复。作者从一个真实的故障场景出发,客户在IBM p系列小机更换电源后,数据库(9.2.0.8 RAC)出现了大量坏块和smon回滚报错。为了在减少业务影响的前提下解决问题,团队决定采用blockrecover方案。 为了验证该方案在复杂情况下的有效性,作者在10g环境下进行了完整的模拟测试。实验详细重现了从创建测试表、使用RMAN备份数据文件、切换归档日志,到人为模拟产生包含未提交事务的坏块的全过程。测试的关键在于,它不仅模拟了坏块,还通过后续的业务操作模拟,验证了blockrecover能否在不影响其他正常数据块的情况下,精准修复目标坏块并正确处理其中的事务。 最终的测试结果证实,blockrecover命令能够有效处理这类棘手的坏块问题。整个复现过程步骤清晰,对于遇到类似“坏块+事务回滚”故障的DBA来说,提供了一个极具参考价值的实战解决方案。

IT 累计浏览 2,810

aix使用太多内存导致shared pool 相关latch异常

这篇讲的是AIX系统因内存耗尽引发Oracle数据库性能问题的真实案例。某客户服务器上出现shared pool相关latch的异常等待,系统响应变慢。作者通过nmon和topas工具抓取现场数据,发现物理内存使用率高达99.8%,空闲内存仅剩51MB,同时Paging Space使用了近35%,表明系统正在大量依赖交换空间,这正是导致数据库共享池锁竞争加剧的直接原因。 进一步查看vmo内核参数配置,其值遵循了Oracle官方建议,但根本问题在于物理内存总量(21.5GB)已无法承载数据库SGA、PGA及操作系统进程的消耗。文章分析了特定Oracle进程的内存映射,显示单个进程的SGA占用就非常高。最终指出的解决路径非常清晰:要么为服务器扩容内存,要么在业务允许的前提下,主动调小数据库SGA等内存相关参数,从源头降低内存压力。整个排查过程结合了监控命令与参数分析,是AIX+Oracle环境下一个典型的内存型性能故障样本。

IT 累计浏览 4,072

陈吉平的Oracle职业生涯:兴趣与思考 成败之所系

这篇文章记录的是资深技术专家陈吉平从大学沉迷游戏到成长为Oracle领域专家的完整职业历程。作者以第一人称回忆了从非科班出身,到初入职场作为混沌的VB程序员,再到因兴趣选择数据库方向,最终在Oracle领域扎根的全过程。 文章并非讲解具体技术,而是通过大量真实细节——比如为逃避本专业而打游戏逃课、因800元月薪接下第一个项目、在论坛解答问题养成学习习惯、考取OCP证书——生动刻画了一个技术人员的成长轨迹。其中,如何确立方向、从迷茫转向系统学习、借助社区力量(如CSDN与ITPUB)提升自我等思考,构成了文章的主线。 其核心观点在于,技术的成败与持续的“兴趣”和“思考”紧密相关。从最初对计算机的着迷,到后来面对Oracle学习瓶颈时主动寻找方法、总结经验,这份内驱力和对成长路径的反思,远比起点或背景更重要。这对许多正处于技术学习或转型期的读者,提供了真实而鼓舞人心的参考。

IT 累计浏览 4,724

ORACLE 12C可以通过expdp导出view数据

这篇讲的是Oracle 12c中一个相当实用的新功能:通过数据泵工具expdp,直接将视图数据导出为类似表的数据文件。 以往,我们想迁移某个视图的数据,通常需要先创建一张临时表来存储查询结果,过程稍显繁琐。而从12c开始,expdp引入了`VIEWS_AS_TABLES`参数。作者在文中用一个完整的实例做了验证:在测试库中创建了一个关联查询的视图`v_xifenfei`,随后使用`expdp`配合该参数,直接将其数据导出为转储文件。接着,使用`impdp`导入时,通过`remap_table`参数,成功地将视图数据作为一张名为`v_xff`的新表导入到了目标库,且查询结果完全一致。 这个功能打通了视图与表在数据迁移工具链上的壁垒,特别适合在数据迁移、环境搭建或数据分发时,需要快速提取某个特定视图“快照”结果的场景,省去了中间建表的步骤,让基于视图的数据迁移变得像操作普通表一样直接和简单。

IT 累计浏览 4,103

EXADATA与非EXADATA搭建DATAGURAD关于EHCC特性测试

这篇讲的是一个常见的异构容灾场景:很多企业只有一台昂贵的Exadata机器,但为了数据安全,会用一台普通的非Exadata服务器通过Data Guard来搭建备库。官方宣传的EHCC高级压缩特性是否还能正常使用?作者通过实测给出了答案。 测试环境是Oracle 11g,作者在Exadata主库上分别创建了使用BASIC、OLTP以及各种EHCC(Query Low/High, Archive Low/High)压缩的表。关键发现在于,当Data Guard备库是非Exadata环境时,主库的EHCC压缩效率会显著下降。测试数据显示,此时所有EHCC压缩表的数据块大小都膨胀到了接近无压缩的水平,其压缩效果甚至不如简单的OLTP压缩。 作者分析,这很可能是Exadata的一种智能降级机制:当检测到备库不支持EHCC时,主库会牺牲自身的存储性能(高压缩效率)来确保数据在备库的可读性与安全性。因此,在这种异构DG架构下,使用Oracle自带的OLTP压缩或许是更优选择,既能保证容灾,也能获得更好的整体效率。

IT 累计浏览 5,211

了解Database Replay Capture内部原理

这篇讲的是 Oracle 11g 中 Database Replay 特性的工作负载捕获机制,作者从实际演示出发,剖析了其内部原理。它揭示了捕获并非被动记录,而是由服务进程主动完成:进程在 PGA(特别是 WCR Capture PGA)中累积会话的登录、登出及 SQL 执行信息,待历史记录达到一定数量后,再主动将数据写入到磁盘上的 WCR 文件中。这个过程中,进程会经历“WCR: capture file IO write”等待事件。 文章也量化了捕获带来的开销:磁盘上生成的是不可直读的二进制文件,在大并发 OLTP 场景下,10 分钟捕获可能占用约 1GB 空间;性能损耗约为 4.5%,且每个会话会额外消耗约 64KB 内存。对于 RAC 集群,共享目录是必须的。 此外,文中还梳理了相关的性能视图与等待事件,例如从 `v$event_name` 中查询所有 WCR 相关事件,以及查看 `v$latch` 中新增的 WCR 闩锁。这些细节展示了该功能在数据库内核中留下的足迹,为深入理解和监控这一特性提供了实用线索。

IT 累计浏览 4,310

如何验证SQL PROFILE的性能?

这篇讲的是在Oracle数据库生产环境中,如何安全且有效地验证SQL PROFILE的实际性能收益。 文章开篇点明了背景:10g以后的SQL Tuning Advisor会给出多种调优建议,其中启用SQL PROFILE是常见选项。但在生产环境直接应用存在风险,因为优化建议未必适合真实负载,一旦出错可能加剧性能问题。尤其当缺乏测试环境,而SQL PROFILE又可能是“救命稻草”时,就需要一种可靠的局部测试方法。 作者随即演示了具体操作:在12c环境中创建测试表与索引,通过全表扫描执行SQL并记录基线成本。随后运行SQL Tuning Advisor生成任务,并展示了工具内置的“验证”步骤——它对比了原始执行计划与推荐SQL PROFILE计划的关键指标。测试结果极具说服力:使用SQL PROFILE后,缓冲区获取(Buffer Gets)从1470锐减至3,提升达99.79%,同时CPU时间与耗时也几乎归零,证明索引扫描方案远优于全表扫描。 这篇文章的实用价值在于,它提供了一个无需全面部署即可在session级别评估SQL PROFILE效果的清晰范式,帮助DBA在追求性能与保障稳定性之间找到平衡点。

IT 累计浏览 4,488

数据文件的CREATION_TIME来源和算法

这篇文章深入剖析了Oracle数据库中`CREATION_TIME`字段的底层存储机制,解答了“数据文件时间戳从何而来”这一问题。作者从`v$datafile.CREATION_TIME`与`v$datafile_header.CREATION_TIME`必须一致才能启动数据库这一现象切入,指出后者的值实际来源于数据文件头块中的`kcvfhcrt`字段。 核心在于,这个十六进制的`kcvfhcrt`值,是Oracle以1988年1月1日00:00:00为基准点,按“每月固定31天”的简化规则,累计计算出的秒数。文章详细演示了双向转换的算法:既如何将一个具体的日期时间(如2011-03-05 05:26:52)拆解计算为对应的十六进制值`0x2c67319c`,也展示了如何通过一系列除法和取模运算,将该十六进制值反向推导为准确的年、月、日、时、分、秒。 这套算法不仅是Oracle内部的一个实现细节,对于需要手动修复或验证数据文件头信息的DBA来说,也是一个非常实用的底层知识。文章通过具体的数值计算实例,将抽象的转换过程清晰地展现了出来。

IT 累计浏览 5,387

ORACEL RAC 字符集

这篇讲的是在Oracle RAC环境下修改数据库字符集,一个容易“踩坑”的实操过程。 作者从一个ZHS16GBK字符集的10g RAC环境出发,目标是将其变更为UTF8。文章核心记录的并非一帆风顺的步骤,而是在执行过程中遇到的典型问题:当尝试直接执行 `alter database character set` 命令时,数据库报出了 `ORA-12720` 错误,提示需要独占模式。这正是RAC环境下修改字符集的关键陷阱。 为解决此问题,作者展示了完整的排查与操作流程:首先需要停止一个节点实例,然后修改 `cluster_database` 参数将集群模式临时改为 `false`,并以独占(`EXCLUSIVE`)模式启动数据库。在确保单节点独占访问后,方才成功执行了字符集变更命令。文章还提到了一个细节操作:手动更新 `props$` 表以同步国家字符集信息,这对于保持数据字典一致性至关重要。最后,再将参数改回集群模式并重启集群。 整个操作对生产环境风险极高,文章通过真实报错和步骤复现,清晰地揭示了RAC架构下字符集变更的特殊限制与必备前提。对于需要执行此操作的DBA来说,这份记录提示了务必在维护窗口内进行、并提前备份的要点。

IT 累计浏览 6,837

那些在11gR2中可能惹祸的新特性,一张列表帮助你摆脱升级11gR2带来的烦恼

这篇讲的是从Oracle 10g/9i升级到11gR2时,可能因新特性默认启用而“惹祸”的那些事儿。作者指出,像自适应游标共享(Adaptive Cursor Sharing)、自动串行直接路径读(Automatic Serial Direct Path Read)、延迟段创建(Deferred Segment Creation)以及GC相关的新特性等,在实际中可能并不适合许多国产应用,会给原本稳定的系统带来执行计划波动等不确定风险。 文章的核心是一份可直接操作的“排雷清单”。作者汇总了一系列优化器和其他相关特性的隐藏参数,提供了一套通过设置参数来选择性禁用这些新特性的方法。其背后的逻辑很务实:如果你的应用没有条件或时间对这些新特性进行充分测试,不如主动禁用它们,让数据库在11gR2的架构上退回到类似于10gR2(10.2.0.4)的稳定行为模式。 作者也解释了“禁用新特性是否还有升级必要”的疑问。他强调,这并非全盘否定,而是给出了一份可选的选项列表。熟悉且已验证的特性可以保留,不熟悉的则可以选择关闭,从而在享受新版本其他益处的同时,规避因未经测试的优化器行为变更带来的潜在故障。对于那些需要手动开启才会生效的特性(如Flashback Archive),则不受此列表影响。

IT 累计浏览 5,809

大于2GB的Listener.log和运行超过198天的主机上的Oracle实例

这篇讲的是Oracle DBA圈里流传已久的两个“传说”及其在当代的真相。 一个是关于Listener.log日志文件不能超过2GB的限制。作者追溯其根源,指出这在早年32位操作系统与文件系统(如Solaris 2.6、早期Linux)时代确实是铁律,但对如今主流的64位系统已成过去式。他通过实际演示,在64位Linux上让Listener.log增长至3GB以上,并依然成功建立新连接,直接证伪了这一“信仰”。同时,他从系统调用层面解释了监听器进程使用O_APPEND标志位追加写入,性能并不会因文件过大而下降。 另一个则是主机运行超过198天会导致Oracle实例故障的传闻。作者澄清,这特指Oracle 10.2.0.1版本的一个已知BUG,会导致OCI客户端CPU空转。该问题在后续的10.2.0.2补丁集中早已修复。他提到,这个因特定版本与超长运行时间偶合的BUG因其戏剧性而令人印象深刻,以至于多年后在部分运维场景中仍被当作经验传播。 文章的核心结论是,这两个基于特定历史条件产生的“最佳实践”,在硬件与软件都已迭代的今天应当被更新认知,尽管定期清理日志等习惯依然值得推荐。作者通过技术细节与版本历史,为读者梳理了从“真理”到“传说”的演变脉络。

IT 累计浏览 5,693

Oracle Database 12c 新特性 - Native Top N 查询

这篇讲的是Oracle数据库在12c版本中引入的一个非常实用的查询优化特性。在12c之前,开发人员若想实现“分页查询”或“只取前N条记录”,通常需要依赖ROWNUM这个伪列进行多层嵌套查询,写法复杂且容易出错,维护成本较高。这几乎是每一个使用Oracle进行Web开发或报表生成的工程师都曾面对过的“经典麻烦”。 Oracle 12c对此给出了一个优雅的“原生方案”:引入了基于OFFSET和LIMIT语法的Top N查询支持。这意味着,过去需要写成多层嵌套的、晦涩的ROWNUM查询,现在可以简化成一条结构清晰、意图明确的SQL语句。例如,直接使用`OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY`这样的语义化语法,就能轻松实现“跳过前10条,再取5条”的分页逻辑。 这一特性不仅仅是语法糖。它显著降低了编写复杂查询的认知负荷和出错概率,让数据访问层的代码更易读、更易维护。对于那些长期受困于旧式分页查询的团队来说,升级到12c并采用这种新写法,是提升日常开发效率一个很直接的切入点。

IT 累计浏览 5,768

仅仅只备份是不够的

作者从一个常见的技术误区切入:是不是只要部署了数据库、搭配成熟的备份软件(比如NBU、DP、TSM等),再购置大容量磁带库,就能高枕无忧了?文章通过一个真实案例,揭示了单纯备份策略的局限性——即使硬件和软件齐全,若忽略备份后的验证与恢复流程,在实际灾难场景中仍可能面临数据丢失风险。 案例中详细描述了企业虽然拥有完整的备份基础设施,却在恢复阶段遭遇挑战:备份数据无法顺利还原、恢复时间远超预期,导致业务中断。作者指出,根因往往在于备份后缺乏定期测试、未制定清晰的灾难恢复计划,以及对恢复点目标(RPO)和恢复时间目标(RTO)的考量不足。这篇文章强调,备份只是数据保护链条中的一环,完整的策略还需涵盖数据验证、恢复演练和自动化监控。 通过这个案例,作者启发读者重新审视自身的数据保护体系:技术投入固然重要,但流程和制度的完善才是确保数据安全的关键。文章结尾自然引导读者思考如何构建从备份到恢复的闭环方案,避免让备份沦为“摆设”。

IT 累计浏览 3,327

时光荏苒,五年陈酿

这篇讲的是作者在2012年国际爱牙日这天的健康复盘。文章从一次常规体检后的反思切入,记录了去年体检中发现的血压偏高与轻度脂肪肝等问题,今年均已恢复正常,但检查中指出了牙结石的存在。作者由此联想到健康管理中的一个重要细节:许多潜在问题(如高血压、脂肪肝)在通过生活习惯调整后可以逆转,而像牙结石这样的小问题也需主动干预。 作者提出的具体行动是“找个时间去洗牙”,目标是让明年的体检结果更健康。这背后传递出一个朴素但关键的观点:健康不是一次性的结论,而是动态的、需要持续关注与微调的过程。定期复查、对照往年数据、及时处理小隐患,才是长期健康的有效策略。

IT 累计浏览 2,466

布隆过滤(Bloom Filter)-必须了解的优化器算法

这篇讲的是一个因数据库小版本升级引发的性能雪崩事件。作者从一次真实的客户案例出发:将数据库从11.2.0.1升到11.2.0.3,看似无害的操作却导致SQL性能暴跌百倍。根因在于新版本优化器默认启用了布隆过滤(Bloom Filter)特性,这一原本用于优化的算法,在特定查询场景下反而生成了低效的执行计划。 文章核心揭示了优化器自动选择的“双刃剑”效应。作者没有停留在描述现象,而是深入剖析了布隆过滤器如何影响了SQL的执行路径,并给出了关键的应对策略——在版本升级后,必须进行严格的性能回归测试,其中比对SQL执行计划的变化是不可或缺的一环。这提醒我们,数据库升级绝非简单的版本号变动,底层行为的改变可能带来难以预料的后果。 对于DBA和后端开发者而言,这是一个极具参考价值的踩坑记录。它强调了在享受新特性带来便利的同时,必须对其潜在风险保持警惕,并将执行计划分析纳入标准的升级验收流程,以避免类似性能灾难的发生。