IT技术博客大学习 共学习 共进步

Oracle

共 210 篇文章

IT 2021-05-27 22:26:51 / 累计浏览 2,535

Oracle 各种删除操作对空间返还的说明

DBA们常常遇到这样的困惑:对Oracle表执行DELETE、DROP还是TRUNCATE?这些操作对空间到底有何影响?这篇技术说明正是为厘清这些差异而写。 文章将三种常见删除操作(DELETE SQL、DROP TABLE、TRUNCATE TABLE)放在一起对比,从多个维度拆解其不同。关键差异点包括:DELETE操作不会将空间归还给表空间或文件系统,空间仅能被原表重用,但可能产生“高水位”;而DROP和TRUNCATE默认都会释放表空间,但依然不会自动收缩数据文件。此外,在本地管理表空间下,这些操作基本不会造成表空间碎片,但在老旧的字典管理表空间中,DROP和TRUNCATE则可能导致碎片。 对于追求“干净”释放空间的场景,文章也给出了务实建议:例如使用`shrink space`整理表,或对索引执行`coalesce`。最终目的是帮助DBA们根据实际需求(是彻底删除、快速清空还是谨慎释放)选择合适的操作,并管理好预期——Oracle默认不会自动将空间返还给操作系统。

IT 2021-05-26 23:07:42 / 累计浏览 1,591

按照重要程度划分数据库级别

这篇讲的是一个为数据库重要性分级的实用框架。作者没有空谈理论,而是直接给出了从S级到D级的清晰划分,并为每个级别匹配了具体的业务场景、潜在影响范围以及相应的灾难恢复成本。 比如,一个仅影响几十人的测试系统(D级)与像12306这样的大型公共应用(S级),在业务类型、灾难救援价格(从几千元到50万元以上)以及需要的备份与灾备设施(从“几乎无任何有效备份”到“全冗余部署”)上,有着天壤之别。 这套体系的价值在于,它让技术团队能清晰地评估和沟通数据库资产的业务价值,并据此决定投入多少资源来保障其数据安全与业务连续性。文章用一个简洁的表格呈现了这种对应关系,对于需要制定数据保护策略的团队来说,这是一个非常直观的决策参考。

IT 2016-03-12 22:49:10 / 累计浏览 4,357

从淘汰Oracle数据库的事情说起

作者从公司淘汰Oracle数据库的内部实践说起,类比国内“去IOE”浪潮,点明核心动因是高昂的维护成本与扩展性瓶颈。但他指出,这绝非简单地将Oracle换为MySQL或上云,而是一场有计划的架构演进——部分业务数据已迁移至DynamoDB等NoSQL,甚至落盘至S3,计算层则由Hadoop或Spark接管。 由此引出一个关键问题:NoSQL的兴起是否意味着SQL将过时?作者的回答是“恰恰相反”。他通过两个实例佐证:一是团队将复杂的Scala逻辑重写为Spark SQL,让更熟悉SQL的数据分析师能直接参与;二是基础设施团队通过Hive等工具,在底层从数据库切换至MapReduce后,依然对上层提供稳定的SQL接口。SQL作为一种数据抽象和思维范式,其生命力反而在增强。 文章还反思了关系型数据库自身“被成功到滥用”的问题,例如在不适宜的高并发场景硬用Oracle。最后,作者将话题从技术延伸到人与技能,指出诸如DBA等纯粹依赖维护的岗位将面临挑战,而真正的核心技术价值在于解决那些不易被工具或新平台简单替代的根本问题。整篇文章从一次具体的架构迁移,引发了对技术演进逻辑和工程师核心能力的深层思考。

IT 2016-02-21 22:46:50 / 累计浏览 3,151

一次临时表空间大量占用问题的处理

这篇讲的是如何诊断和解决一个核心交易系统临时表空间暴涨至600GB的问题。作者从实际案例出发,发现占用临时空间的大量排序段,并非由当前执行的SQL产生,而是源于大量会话打开了需要复杂排序的查询游标后,一直没有关闭,导致Oracle必须维持这些游标的状态和已排序的数据,从而长期占用临时段。 文章详细展示了排查过程:通过v$sort_usage定位到大量会话关联同一个SQL_ID,但发现该SQL本身并不需要排序。真正的“元凶”是这些会话中打开的另一个游标——一条对千万级数据进行排序的业务查询。由于应用在取数后未正确关闭游标,使得排序段无法释放。作者甚至用PL/SQL代码复现了这一过程,清晰演示了临时空间是如何被一个未关闭的游标“泄漏”出去的。 这篇案例的精彩之处在于,它纠正了一个常见误区,并提供了一套实用的诊断思路:当遇到临时表空间异常时,应重点检查会话的打开游标,特别是那些有大量排序操作且未完成处理的SQL,而不仅仅是看当前正在执行的语句。

IT 2016-02-16 20:25:32 / 累计浏览 2,466

Oracle 11g大对象数据新技术

这篇内容专门针对 Oracle 数据库中令人头疼的 ORA-00600 内部错误,提供了一套从定位到解决的系统化诊断手册。它首先点明,这类错误本质上是 Oracle 软件遇到了不一致的低级异常,成因可能涉及 Bug、操作系统或硬件。 文章的核心价值在于其清晰的排查路径:第一步永远是检查 alert.log 和 trace 文件;第二步是利用 Metalink 提供的专用诊断工具,通过输入错误的第一个参数和数据库版本号快速检索知识库;第三步则是整理必要信息,向 Oracle Support 提交 SR。 作者特别强调了 trace 文件的完整性和参数信息的关键作用,并用“ORA-00600 [729]”空间泄漏的实例,演示了如何通过设置特定事件参数来规避这类可忽略的内存泄漏告警。整体而言,文章将复杂的内部错误排查流程,拆解成了可操作的步骤,对 DBA 构建故障处理预案很有参考价值。

IT 2016-02-16 12:07:56 / 累计浏览 3,198

那些常见的Oracle错误

这篇讲的是Oracle数据库运维中那些高频出现的“拦路虎”。作者从DBA经常面临的实际故障现场出发,梳理了ORA-00600、内存耗尽、空间不足等几类典型问题。文章不止于罗列现象,而是深入到了问题的“肌理”——比如ORA-00600这类内部错误,其第一个参数和数据库版本就是定位根因的钥匙;ORA-04030则往往与PGA内存分配和操作系统限制有关。 更实用的部分在于诊断思路。文章引导读者从检查alert.log和trace文件入手,还指出了Oracle官方在Metalink上提供的600/7445诊断工具这个利器。针对具体案例,如ORA-00600[729]“UGA空间泄露”,给出了设置事件参数“10262”来屏蔽小泄露的明确解决方案。这种“故障现象-诊断方法-官方工具-具体参数”的完整链条,为运维人员构建了一套可复用的排查预案,能有效降低面对突发故障时的手足无措感。

IT 2016-02-14 00:06:24 / 累计浏览 2,596

Oracle字符类型存数字及查询数字时使用单引号走不走索引的问题

这篇文章解决的是一个在实际数据库开发中容易产生争议的问题:用varchar2类型存放的数字字段,在查询条件中给数字加上单引号,到底会不会导致索引失效?作者从团队内部的实际分歧出发,通过在Oracle 11.2.0.4.0版本上进行测试来验证结论。 文章首先通过建表和数据准备,复现了讨论的场景。核心对比点在于两种常见的错误认知:一种是认为“char类型存数字,查询不加单引号不走索引”;另一种则想验证“varchar2类型存数字,查询加单引号是否还会走索引”。作者通过具体的执行计划截图(文中虽未显示但提到测试信息),清晰地展示了不同写法下的索引使用情况。 最终得出了明确的结论:对于varchar2类型字段,无论在查询时是否为数字加上单引号,都能正常走索引。这个结果厘清了一个常见的误解,并为后续将varchar2字段改为number类型的设计决策提供了数据支持。对于DBA和开发人员而言,理解数据库在处理隐式类型转换时的具体行为,有助于编写出既准确又高效的SQL语句。

IT 2015-11-02 22:42:32 / 累计浏览 2,809

Oracle正则表达式使用小结

这篇文章梳理了Oracle数据库从10g开始支持的正则表达式功能。作者将匹配逻辑集中在数据库端,可以避免在中间层处理,从而简化开发。文章概要总结了Oracle中使用正则表达式的核心方法。 内容重点介绍了五个关键的正则表达式函数:REGEXP_LIKE 用于条件过滤,REGEXP_COUNT 能统计模式出现次数,REGEXP_INSTR 可定位首次匹配位置,REGEXP_REPLACE 支持模式替换,REGEXP_SUBSTR 则能提取满足模式的字符串。每个函数都配有清晰的SQL示例。 除了函数用法,文章还梳理了控制匹配行为的选项,比如忽略大小写的“i”、多行模式“m”等,并通过示例解释了不同选项带来的具体差异。此外,文中也列举了如“.”“+”“*”等常见元字符及其含义,为实际编写匹配模式提供了参考。

IT 2015-07-16 23:23:18 / 累计浏览 2,514

使用审计功能记录错误密码登陆信息

这篇讲的是如何利用Oracle数据库内置的审计功能,来定位UAT环境中用户频繁被锁定的根本原因。 在一次UAT环境恢复后,业务用户不断反映账户被锁定,且每个人都坚称自己输入的密码无误。作者原本打算新建触发器来记录错误登录尝试,但在检查配置时发现,当前使用的Oracle 11.2.0.4数据库,默认的审计功能实际上是开启的。 通过执行`show parameter audit`命令确认状态后,作者直接从审计日志入手,查询了`dba_audit_trail`视图。最终清晰地定位到问题根源:某个应用程序在连接时持续使用了错误的密码。审计日志详细记录了尝试登录的客户端程序、操作系统用户、终端以及具体时间,证据确凿。这不仅快速解决了“谁在用错密码”的罗生门,也避免了额外编写监控代码的开销。 这个案例提醒我们,在进行故障排查时,先摸清数据库现有功能与配置至关重要。Oracle默认开启的审计机制,就像一位默默工作的哨兵,在无需额外开发的情况下,为我们保留了关键的现场证据。

IT 2015-06-01 23:35:32 / 累计浏览 3,069

ORACLE怎样将CHAR类型字段转换成CLOB

这篇讲的是Oracle数据库中一个常见但细节不少的字段类型转换问题。文章直接切入实操,演示了如何将CHAR类型的字段转换为CLOB类型。它分了两种场景来具体说明:一种是目标列当前为空,另一种是列中已经存放了数据。 针对这两种情况,文章分别给出了转换的SQL思路和操作步骤。对于空列,操作可能相对直接,而列中已有数据时,则需要考虑数据的迁移与处理。通过具体的表结构示例(比如sdb_b2c_goods表)和代码演示,让读者能清晰地看到每一步操作。 对于需要调整表结构、迁移大文本数据的开发者或DBA来说,这篇文章提供了一个非常清晰的、分场景的解决方案参考,避免了自己摸索可能遇到的数据丢失或转换错误问题。

IT 2015-05-29 20:11:59 / 累计浏览 2,350

ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现

这篇技术分享讲的是一个常见但容易混淆的数据库操作细节:如何在查询时限制返回的数据条数。作者以一个包含7条记录的员工信息表为例,分别演示了在ORACLE和SYBASE两种主流数据库中的实现方式。 在ORACLE中,核心是利用伪列`rownum`,直接在`WHERE`子句中加入`rownum <= 5`这样的条件即可,简洁直观。而在SYBASE里,则需要通过`set rowcount 5`语句来设置,但紧接着必须用`set rowcount 0`将其重置,否则这个限制会持续影响后续所有查询操作,这是一个需要特别注意的关键陷阱。 文章的价值在于,通过最简单的示例,清晰地揭示了这两种数据库在语法和用法逻辑上的根本差异。对于需要处理海量数据、必须进行分批查询以保证系统稳定性的开发者而言,掌握这些具体语法并警惕其中的“坑”,是写出高效、健壮SQL语句的基础。

IT 2015-05-29 20:03:57 / 累计浏览 3,320

在ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数

这是一篇典型的故障排查文章。作者在对Oracle 12C RAC的In-Memory特性进行测试时,遇到了一个棘手的问题:在清空缓冲区缓存后,测试总是意外触发大量并行操作,导致结果不准确。 经过与Oracle官方协作排查,最终定位到问题的根源在于两个关键参数的默认设置不匹配In-Memory的最佳实践。具体来说,参数`parallel_degree_policy`被设为了`AUTO`,而`parallel_force_local`则是默认的`false`。在RAC环境下,这种组合会导致并行执行计划不符合预期。 文章通过具体的SQL操作和执行计划对比,清晰地展示了问题表现:从执行计划中可以看到“automatic DOP: Computed Degree of Parallelism is 2”的提示,并且明确标注了“parallel scans affinitized for inmemory”,这证实了In-Memory特性已被触发。解决方法就是根据RAC环境的需要,正确调整这两个参数的值。 对于计划在RAC集群中使用In-Memory功能的DBA来说,这篇文章提供了一个非常实用的避坑指南。它提醒我们,在启用强大的新特性时,往往需要仔细检查并调整相关的并行处理参数,才能确保其发挥出应有的性能优势。

IT 2015-02-03 21:54:38 / 累计浏览 2,555

给你的rman备份集加上密码锁

备份是数据保护的最后一道防线,但如果备份集本身没有防护,泄露的风险同样存在。这篇文章从这个角度出发,讲解了如何为Oracle RMAN备份集加上密码锁,实现加密存储。 作者从数据安全的现实威胁切入,指出RMAN备份集若被窃取,其数据风险等同于生产库被入侵。解决方案是利用RMAN在10.2及以上企业版中提供的`set encryption`命令,在备份过程中直接设置加密密码。文章详细演示了从配置加密算法(支持AES128/AES256等)到执行加密备份的完整步骤,并特别提醒:加密仅对`backupset`有效,`copy`方式不支持;若需备份到带库,则必须使用Oracle Secure Backup。 最具说服力的部分是实操验证。作者创建了测试表空间和数据,进行了加密备份,随后模拟数据文件丢失并尝试恢复。结果显示,在不知道密码的情况下恢复会报错;即使设置错误密码也无法成功。只有使用正确的密码才能顺利完成恢复,这直观地证明了加密机制的有效性。 整篇文章实操性强,不仅提供了命令行的具体操作,更通过正反验证让读者清晰看到加密带来的保护效果,对于关注数据库备份安全性的DBA来说,是一个直接可落地的加固方案。

IT 2015-01-24 23:42:54 / 累计浏览 2,292

关于oracle ebs系统apps的一些故事

这篇讲的是Oracle E-Business Suite(通常叫Oracle ERP)为何被业内亲切地称为“Apps”的技术源流。作者从这个有趣的命名问题出发,回顾了APPS schema的进化史,解答了一个许多开发者都好奇的细节。 文章指出,在早期版本(如EBS 10.6)中,系统每个功能模块(采购PO、应收AR等)都有独立的数据库schema。这导致了一个历史遗留的“小麻烦”:跨模块访问数据时,SQL语句里总得带上冗长的Schema前缀,比如`po.po_headers_all`,写起来颇为繁琐。 为了解决这个问题,Oracle引入了统一的APPS schema。它的设计非常巧妙:APPS schema本身不直接存储表,而是通过为其他所有模块的表创建“同义词”,从而让开发者只需连接到APPS,就能像访问本地表一样,简洁地查询全系统所有模块的数据,无需再写任何前缀。 文章最后总结了几条关键的开发实践原则,比如PL/SQL包和视图都应在APPS下创建,而客户化表则建议放在独立的schema中。这个故事不仅解释了一个称呼的由来,更清晰地展示了Oracle EBS在架构上为简化开发所做的一次重要演进。

IT 2015-01-24 23:41:22 / 累计浏览 2,832

怎么查看oracle ebs的系统版本号以及各模块的版本号

这篇讲的是如何快速定位Oracle EBS的版本信息,这是系统管理和升级时的一个基础但关键的步骤。作者没有绕弯子,直接切入核心需求:如何查看系统整体版本号,以及如何深入查看每个应用模块的具体版本、安装状态和补丁级别。 文章提供了两个现成的SQL查询,分别用于获取系统级版本(从`fnd_product_groups`表)和模块级详情(关联`fnd_product_installations`与`fnd_application`表)。作者特意点明,这类信息查询的关键线索通常在于以`fnd_`为前缀的系统表。对于需要进行版本核对、补丁安装前检查或环境排查的EBS顾问与DBA来说,这几行查询能直接给出准确答案,避免了在界面上层层点击的繁琐。

IT 2015-01-04 23:33:18 / 累计浏览 3,816

复杂关联SQL的优化

这篇讲的是如何将一个耗时 750ms 的复杂关联 SQL 优化到毫秒级的过程。作者从一个真实案例出发,通过分析执行计划,精准定位了性能瓶颈:一条只返回一行数据的查询,却因为驱动表选择不当和索引缺失,导致在两张表上发生了全表扫描。 优化过程分为两步走。首先,针对 `left join` 的 d 表添加了缺失的 `yh_id` 索引,使其扫描行数从 5 万多行骤降至 272 行。但整体耗时并未改善,因为优化器仍坚持选择 a 表作为驱动表。作者进一步深入分析,发现根本原因在于关联字段 `yh_id` 在 b 表上没有索引,导致优化器认为以 a 表驱动的代价更低。于是,第二步是为 b 表和过滤性极强的 c 表分别添加了 `yh_id` 和 `yh_dm` 索引。 索引齐全后,优化器终于“回心转意”,转而选择数据量更小、过滤条件更强的 c 表作为驱动表,执行计划彻底改变,查询时间从 0.75 秒直接降为 0.00 秒。这个案例清晰地展示了,优化复杂 SQL 不能只看单表索引,更要理清表间关联逻辑与数据分布,通过分析执行计划来引导优化器做出正确选择。

IT 2015-01-04 22:50:48 / 累计浏览 2,415

修改oracle当前会话的语言环境,解决oracle显示中文乱码的问题

这篇讲的是如何快速解决Oracle数据库在操作时出现中文提示显示为一串问号的常见问题。 作者从实际操作中的困扰出发,明确指出这种乱码的根源在于当前会话的语言环境设置不匹配。文章提供了具体、可操作的解决方案:首先通过 `SELECT userenv('language') FROM dual;` 命令来查看当前的语言环境配置,确认问题。接着,给出了两种修改方法:一是通过 `ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';` 命令临时修改当前会话,使其立即生效;二是通过修改环境变量等方式进行永久性设置,从根源上避免问题再次出现。 整个排查思路清晰,步骤直接,对于遇到类似字符集显示问题的数据库管理员或开发人员来说,是一份实用且能快速解决问题的参考。简单几条命令就能让提示信息恢复可读性,提升了工作效率。

IT 2015-01-04 22:49:39 / 累计浏览 2,937

oracle跟踪事件(dump)总结

这篇讲的是Oracle数据库中用于故障诊断的跟踪事件(dump)机制。文章系统梳理了跟踪文件的三种类型——后台报警日志、后台进程跟踪文件和用户跟踪文件,并详细说明了如何通过初始化参数或会话命令来触发dump操作。 核心内容聚焦于各种跟踪事件的具体用法。例如,通过`buffers`事件可导出SGA缓冲区信息,`blockdump`事件能定位特定数据块,`errorstack`事件则用于捕获难以获取的错误栈。文章还列举了诸如`10046`(SQL语句跟踪)、`10231`(全表扫描时跳过损坏块)等实用的内部事件号,并解释了其参数级别含义。 最后,文章提供了查看当前跟踪文件的简单示例。整体上,它像一份面向DBA和开发者的速查手册,将分散的Oracle诊断工具整理成可操作的条目,便于在性能调优或故障排查时快速定位并转储关键内存结构或日志信息。

IT 2015-01-04 22:47:30 / 累计浏览 15,131

如何查找消耗资源较大的SQL

这篇讲的是数据库性能优化中一个非常基础但关键的问题:如何找出那些最“吃”资源的SQL语句。作者没有从理论入手,而是直接从Oracle的V$SQLAREA视图出发,给出了一个可直接使用的查询语句。 这条SQL的设计很务实,它不仅找出了总磁盘读取(disk_reads)最多的查询,还计算了每次执行的平均磁盘读取次数(rds_exec_ratio)。通过这个比率,你能快速识别出是那些执行频繁但效率低的语句,还是那些单次执行就消耗巨大的语句。同时,语句关联了执行用户(username)和具体的SQL文本(Statement),让定位和后续优化有了明确目标。 对于需要快速诊断数据库性能问题的DBA或开发人员来说,掌握这几个从V$SQLAREA中提取关键信息的查询,就相当于有了一个高效的“探照灯”,能立刻照出系统中最耗资源的瓶颈所在,让优化工作不再是大海捞针。

IT 2014-03-19 22:47:55 / 累计浏览 4,551

undo异常总结和恢复思路

这篇讲的是Oracle数据库UNDO表空间故障的实战总结。作者从一线工作出发,集中汇总了如ORA-00704(bootstrap process failure)、ORA-00600[4194]、ORA-00600[kcfrbd_3]等一系列让很多DBA头疼的UNDO相关报错。 文章的核心价值在于其系统性。它不仅罗列了千奇百怪的错误现象,更关键的是揭示了背后的常见根源:大多数UNDO异常并非文件本身损坏,而是因为Redo日志未被正常前滚,导致回滚段状态异常,最终阻碍数据库打开。 针对这类问题,作者提供了一套清晰的渐进式恢复思路:从尝试修改UNDO管理方式(M MANUAL)、设置特定事件(10513),到逐步使用参数屏蔽问题回滚段,最后才考虑使用bbed或dul等底层工具。这个思路为遇到类似困境的DBA指明了从软到硬、风险递增的排查路径。 当然,作者也坦诚地指出数据库恢复千变万化,无法照搬,并提供了进一步获取专业技术支持的途径。