使用Oradebug修改Oracle SCN
Oracle SCN对于数据库运行、维护而言是至关重要的因素。在启动从mount到open过程中,主要是各种文件的SCN进行比较的行为。通常情况下,我们是不需要介入到Oracle SCN的取值和设置,甚至错误的干预可能会引起严重运行事故。 在之前的文章中,笔者介绍过使用隐含参数和跟踪事件来推动Oracle SCN前进...
使用BBED修改文件头解决数据库Open验证问题(下)
在上篇中,我们进行了环境准备。(http://blog.itpub.net/17203031/viewspace-2126665/)下面就可以进行问题修复动作。 3、故障修复 总体修复的思路是:使用BBED,将文件头的SCN等关键信息修改到与控制文件control file相匹配即可。 当前,控制文件各个...
从10046 Trace RAW File看Cursor
游标共享Cursor是Oracle学习过程中的一个重点和难点。Oracle的Cursor是建立在对SQL解析Parse消耗的优化上的。根据不同的内存缓存结构,我们经常可以听到诸如:硬解析Hard Parse、软解析Soft Parse和软软解析...
再说Unique Index和Normal Index行为差异
在笔者早期的文章中,从结构视角讨论过Unique Index和Normal Index的差异。Oracle的Unique Index是一种特殊的约束索引结构,通常而言,Unique Index可以有几个方面的优势: 首先是更加精简的结构,同内容情...
使用隐含Trace参数诊断Oracle Data Pump故障
Data Pump数据泵是Oracle从10g开始推出的,用于取代传统exp/imp工具的数据备份还原组件。经过若干版本的演进和修改,Data Pump已经非常成熟,逐渐被越来越多的DBA和运维人员接受。 相对于传统的exp/imp,Data...
聊聊CBO的连接排列(Join Permutation)
Oracle CBO(Cost Based Optimizer)是目前Oracle采用的主流优化器种类。 简单的说,SQL语句的执行计划,主要是通过数据库SQL优化器根据统计信息(System Statistical Data和Object Statistical Data),使用...
SQL Plan Baseline与Shared Cursor机制研究(三)
上篇中,我们着重研究了SQL实际执行情况和Baseline不匹配情况下,shared pool变化情况。那么,从优化器执行的角度看,这个决策过程是怎么样的呢?我们从获得的10053跟踪文件谈起。 7、10053诊断事件诊断不匹...
SQL Plan Baseline与Shared Cursor机制研究(二)
在上篇(http://space.itpub.net/17203031/viewspace-755198)中,我们介绍了自动捕获SQL Plan Baseline的初步过程。当存在一个baseline的时候,SQL CBO生成的执行计划又和Baseline相匹配,在shared pool中会...
SQL Plan Baseline与Shared Cursor机制研究(一)
执行计划不稳定,出现偶发性的恶化现象,一直是困扰CBO应用和运维人员的一个重要问题。一直以来,Oracle一直试图采用外部固定的方法来固化应用程序SQL语句。从最早的Hint,到11g的SPM(SQL Plan Management...
Oracle Shared Cursor问题的几个实验
SQL语句是一种描述语句,只是描述了用户的数据需求。每种DBMS都需要对SQL进行解析和处理,形成真正的执行程序步骤。在Oracle中,这个过程称为parse解析。 Parse解析工作涉及数据字典信息检索、优化器...
使用10046跟踪Oracle前镜像数据读
“Undo前镜像”是Oracle早期推出的特性之一,也是在诸多数据库产品中异军突起的致胜法宝。当我们在一个会话中启动事务,对数据进行增加、修改和删除操作的时候,只要没有提交事务,其他会话只能看到数据的旧版本,...
How CBO estimate the row source for group operation
For Oracle CBO, there are two epochs developed from 9i to 10g, IO cost model and CPU cost model. No matter which kinds of cost calculation model used, Row Source value (cardinality) which refl...
关于索引叶子块分裂方式的研究(一)
索引的构建过程是一个Oracle形成B*树的过程。在进行数据表DML操作的时候,索引树要随着索引列的变化进行同步的更新。当我们的数据表不断增加容量,对应的索引树也在进行不断的广度拓展和深度拓展。 ...
利用10046事件研究三种数据表访问方式(下)
下面我们去分析一下索引路径的执行操作情况。 3、索引路径执行信息 我们借助在object_id列上添加的索引,构造一个索引路径执行计划。我们同样适用10046事件进行跟踪。 SQL> sele...
利用10046事件研究三种数据表访问方式(上)
对Oracle数据库而言,数据表的访问一共有三种方式,分别为:table access by rowid、full table scan(FTS)和table access by index。 三种访问方式是出现在Oracle SQL的执行计划中,作为优化器产物并...
高水位线HWM到底在哪儿?
高水位线是Oracle段对象的一个重要参数。对Oracle Segment对象而言,HWM(High Water Mark)标记着数据使用过的最高位置,有时也称为格式化过的数据位置。 当Oracle数据表进行FTS(全表扫描)操作的时...
从ITL到Undo前镜像提取实验
“多版本一致读”是Oracle数据库的一个重要特性。Oracle中,一个数据行,如果正在进行数据块修改操作,而且尚未提交。其他会话的用户select的数据是该事务修改之前的数据行数据,也就是其“前镜像”。这样,O...
从Dump数据块看ITL
在Oracle中,数据块block上存在记录事务信息的ITL(Interest Transaction List)。当一个数据库事务涉及到数据块对应的数据时,就会在当前数据块块头(block head)后面的ITL中记录上相应的信息。 本...