之前写了一篇博客介绍的是用SQL Profile来调整、稳定目标SQL的执行计划,即使无法修改目标SQL的SQL文本。但SQL Profile实际上只是一种亡羊补牢、被动的技术手段,应用在那些执行计划已经发生了不好的变更的SQL上,即当我们发现这些SQL的执行计划已经出了问题时通过创建SQL Profile来纠正、稳定这些SQL的执行计划。即便通过创建SQL Profile解决了目标SQL执行计划
我们都希望对于所有在Oracle数据库中执行的SQL,CBO都能产生出正确的执行计划,但实际情况却并非如此,由于各种各样的原因(比如目标SQL所涉及的对象的统计信息的不准确,或者CBO内部一些成本计算公式的先天缺陷等),导致有时CBO产生效率不高、甚至是错误的执行计划。特别是CBO对目标SQL所产生的初始执行计划是正确的,后来由于某种原因(比如统计信息的变更等)而导致CBO重新对其产生了错误的执行
在之前的文章里写了Oracle里常见的执行计划,可以参考文章:http://hbxztc.blog.51cto.com/1587495/1901416,这篇文章里介绍的是其他的一些典型的执行计划。1. AND-EQUAL(INDEX MERGE)AND-EQUAL又称为INDEX MERGE,顾名思义,INDEX MERGE就是指如果where条件里出现了多个针对不同单列的等值条件,并且这些列上都
本文介绍了Oracle数据库里常见的执行计划,使用的Oracle数据库版本为11.2.0.1。1、与表访问相关的执行计划Oracle数据库里与表访问有关的两种方法:全表扫描和ROWID扫描。反映在执行计划上,与全表扫描对应的执行计划中的关键字是“TABLE ACCESS FULL”,与ROWID扫描对应的执行计划中关键字是“TABLE ACCESS BY USER ROWID”或“TABLE AC
索引统计信息中需要我们最为重点关注的是CLUSTERING_FACTOR(聚簇因子)。在Oracle数据库中,聚簇因子是指按照索引键值排序的索引行和存储于对应表中数据行的存储顺序和相似度。Oracle是按照如下的算法来计算聚簇因子的值:聚簇因子的初始值为1。Oracle首先定位到目标索引处于最左边的叶子块。从最左边的叶子块的第一个索引键值所在的索引行开始顺序扫描,在顺序扫描的过程中,Oracle会
今天一个开发库启动不了了,发过来报错一看是日志文件损坏了(见下图),接着说了一下前因后果。说是年前服务器掉电了,然后就再没有启动起来过。今天有人用才想到要处理。先说一下大体的思路,如果损坏的redo log是INACTIVE状态的,也就是实例崩溃恢复用不到的redo log,那处理起来比较容易,直接alter database clear logfile group #;或alter databa
1 直方图的含义在Oracle数据库中,CBO会默认认为目标列的数据在其最小值LOW_VALUE和最大值HIGH_VALUE之间均匀分布的,并且会按照这个均匀分布原则来计算对目标列施加查询条件后的可选择率以及结果集的Cardinality,进而据此来计算成本值并选择执行计划。但目标列的数据是均匀分布这个原则并不总是正确的,在实际的系统中,我们很容易就能看到一些目标列的数据分布是不均匀的,甚至是极度
Oracle数据库里的统计信息是这样的一组数据:它存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息。CBO会利用这些统计信息来计算目标SQL各种可能的、不同的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划。Oracle数据库里的统计信息可以分为如下6种类型:表的统计信息索引的统计信息列的统计信息系统统计信息数据字典统计信息内部对象统计信息表的统计
一、如何查看执行计划在Oracle数据库里,我们通常可以使用如下方法(包括但不限于)得到目标SQL的执行计划:explain plan 命令DBMS_XPLAN包SQLPLUS中的AUTOTRACE开关10046事件10053事件AWR报告或Statspack报告一些现成的脚本(如 display_cursor_9i.sql等)前四种方法使用得比较普遍1.1 expla
我们都知道Oracle的AWR报告是一个很强大的功能通过分析AWR报告可以打出Oracle数据运行过程中出现的问题和可能存在的隐患。但是AWR报告中没有关于单个SQL执行计划、统计信息的详细描述,但不代表AWR不能提供这种功能。本文介绍的是如何使用AWR报告生成一条sql的详细执行统计报告。实验环境11.2.0.41、调整AWR关于SQL收集的设置,调整的目的是因为默认情况下AWR并非捕获所有的s
昨天晚上看到盖总的微信里发布12.2.0.1版本开放下载了,于是立马登上edelivery去下载,现在只开放了Linux 64位版的。今天就测试了一下12.2.0.1的rhel7.2上的安装。总体的安装步骤跟12.1版本中没有太大的区别下面只列出了简单的配置和安装步骤1、修改主机名和配置/etc/hosts2、安装依赖包参考了12.2的官方文档,现在只提供Oracle Linux上的依赖包,但是手
一、 表连接 顾名思义,表连接就是指多个表之间用连接条件连接在一起,使用表连接的目标SQL的目的就是从多个表获取存储在这些表中的不同维度的数据。体现在SQL语句上,含表连接的目标SQL的from部分会出现多个表,而这些SQL的where条件部分则会定义具体的表连接条件。 当优化器
本实例测试ORACLE 11g使用rman复制数据库。11g的RMAN duplicate 可以通过Active database duplicate和Backup-based duplicate两种方法实现。这里的测试使用的是Backup-based duplicate。应用场景。基于Active database duplicate参考http://hbxztc.blog.51cto
一、优化器的模式 优化器的模式用于决定在Oracle中解析目标SQL时所用优化器的类型,以及决定当使用CBO时计算成本值的侧重点。这里的“侧重点”是指当使用CBO来计算目标SQL各条执行路径的成本值时,计算成本值的方法会随着优化模式的不同而不同。 在Oracle数据库中,优化器的
在使用v$session视图在查询会话的行锁的等待事件时,视图中提供了会话等待的对象号(ROW_WAIT_OBJ#)、文件号(ROW_WAIT_FILE#)、块号(ROW_WAIT_BLOCK#)和行号(ROW_WAIT_ROW#)但是如何使用这些信息定位出会话等待的是哪一行呢?答案就是使用DBMS_ROWID打开两个会话同时更新同一条数据#session 1 zx@ORCL>se
最近两天生产数据库一直在报ORA-24756错误,查了MOS上的文档,看到一篇类似的,说是BUG(Bug 19201866 - RECO reports ORA-24756 repeatedly into trace file (文档 ID 19201866.8)),但是HP-UX上的11.2.0.4没有解决需要升级到12.2版本,文档中还说重启实例也可以解决,但是不现实。于是查报错时的trace
引用分区(reference partitioning)是Oracle Database 11g Release 1及以上版本的一个新特性。它处理的是父/子对等分区的问题。也就是说,要以某种方式对子表分区,使得各个子表分区分别与一个你表分区存在一对一的关系。在某些情况下这很重要,例如假设有一个数据仓库,你希望保证一定数量的数据在线(例如最近5年的ORDER信息),而且要确保相关联的子表数据(ORD
Oracle定义字符串类型VARCHAR2和CHAR指定长度的用法如下:varchar2(<SIZE> <BYTE|CHAR>) <SIZE>是介于1~4000之间的一个数,表示最多占用4000字节的存储空间。char(<SIZE> <BYTE|CHAR>) <SIZE>是介于1~2000之间的一个数,表示最多占用2000字节
Oracle赋权的回收权限是使用grant和revoke语句,但是赋权和回收权限语句执行完成后就会立即生效么?另外Oracle的权限又分为系统权限、角色权限和对象权限,这三种权限的grant和revoke生效时间又是怎样的呢。我们来看官方文档是如何说的:Depending on what is granted or revoked, a grant or revoke takes effect a
昨天遇到一个问题一个OGG的复制进程在复制序列(Sequence)时Hang住不动,进程状态一直是Running状态但是不往前进行复制,导致进程延迟6个多小时GGSCI (ctm-3) 2> info all Program Status &nbs
本文介绍了几种不使用索引的情况,本文实验的数据库版本均为11.2.0.4情况1:我们在使用一个B*树索引,而且谓词中没有使用索引的最前列。如果这种情况,可以假设有一个表T,在T(x,y)上有一个索引。要做以下查询:select * from t where y=5。此时,优化器就不打算使用T(x,y)上的索引,因为谓词中不涉及X列。在这种情况下,倘若使用索引,可能就必须查看每个索引条目,而优化器通
从Oracle8开始,提供了从分区交换的功能,如一个分区或子分区与一个非分区表交换、一个hash分区与另一个表的hash子分区交换等等,详细的交换方式可以参考官方文档。基本语法:ALTER TABLE...EXCHANGE PARTITION实验环境:11.2.0.4zx@ORCL>select * from v$version; BANNER -------
今天同事问到一个问题,他那边的一套11g数据库使用RMAN没办法删除旧的归档,导致磁盘使用率很高。要来ip登录上去一看确实是,最旧的归档日志是16年5月的。oracle@ps251n2s:[/opt/oracle/archive/db] ls -ltr |more total 3059881082 -rw-r----- 1&
Oracle默认允许用户输入10次错误密码,超过10次后账户就会被锁定sys@ORCL>select * from dba_profiles where profile='DEFAULT' and resource_name='FAILED_LOGIN_ATTEMPTS'; PROFILE RESOURCE_
我们都知道在Oracle SQL语句中order by 是用来排序查询出来的结果集的,而在Oracle中NULL值是一个很特殊的值,如果order by指定的列有NULL值,那排序结果又是怎样的呢。下面做一组实验观察一下order by时Oracle是怎么处理NULL的版本11.2.0.41、创建测试表并插入测试数据zx@ORCL>create table t
从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个“伪造”的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否改变,执行效率是否能得到提高。本文在11.2.0.4版本中测试使用虚拟索引1、创建测试表ZX@orcl> create table test_t as&n
生产上要做灾备系统的应急切换演练,灾备端是由OGG搭建的。由于生产库都比较大10多T,不想演练后重新初始化灾备库,生产库版本为10.2.0.4,于是想到10g的新特性flashback database。演练开始前记录一个还原点,演练结束后闪回到这个还原点,重新同步ogg即可。测试闪加数据库。一、开启FLASHBACK DATABASE数据库版本:10.2.0.4启用FLASHBACK DATAB
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号