eygle.com   eygle.com
eygle.com eygle
eygle.com  
 
  • Oracle SQL Hint的视图解析 V$SQL_HINT Posted by eygle at 2015-10-12

    【内容摘要】在Oracle 11g中,新增的视图V$SQL_HINT记录了Oracle数据库中的可用Hint及其历史。 如果串起来,这几个视图的关系极大:V$SQL_FEATURE,V$SQL_FEATURE_HIERARCHY,V$SQL_HINT,通过这几个视图可以了解Oracle的SQL特性,继承关系,以及可用Hint及启用版本等。

  • SQL多版本控制 - _CURSOR_OBSOLETE_THRESHOLD Posted by eygle at 2015-06-17

    【内容摘要】在上一期的"恩墨讲堂"微信课中,我提到了一个控制SQL多版本的参数,有很多朋友讨论,这个参数是:_CURSOR_OBSOLETE_THRESHOLD 。

  • SYS_TEMP_ 临时表的生成与Oracle内部操作 Posted by eygle at 2013-06-24

    【内容摘要】在Oracle数据库中,很多SQL在执行的过程中,都可能产生中间的过程对象,在执行之后会被清理删除,如果你不了解这些内部操作,可能就会发现比较奇怪的对象。

  • 警示:通过 wmsys.wm_concat 实现行列转换 Posted by eygle at 2012-10-31

    【内容摘要】在网上流传很多文章,描述了使用wmsys.wm_concat对象实现行列转换的方法,这种方法不被Oracle所推荐,因为WMSYS用户用于Workspace Manager,其函数对象可能因版本而不同,这种变化在11.2.0.3及10.2.0.5中体现出来。原本WM_CONCAT函数返回值为VARCHAR2变更为CLOB。这一变化导致了很多程序的异常。

  • 华丽丽的SQL报告:Oracle SQL Monitor Report Posted by eygle at 2012-09-07

    【内容摘要】在Oracle Database 11g中,SQL Monitor Report新特性能够将SQL报告完美呈现出来,对比之前的形式,现在的报告可谓完美。基于Flash的展现,动态、图形画而又流畅,让SQL的执行过程赏心悦目的展示出来。

  • 布隆过滤(Bloom Filter)-必须了解的优化器算法 Posted by eygle at 2012-09-03

    【内容摘要】在最近的一次用户升级中,客户将数据库从11.2.0.1升级到了11.2.0.3版本,虽然只是一个小版本的变化,确引起了严重的性能问题。原本正常的SQL执行计划,因为使用了布隆过滤,导致了百倍的性能衰减。在版本升级中,严格的性能测试必不可少,比对SQL执行计划变化,是测试评估的必要步骤。

  • Oracle SQLID 与 Hash_value 算法及转换 Posted by eygle at 2012-05-25

    【内容摘要】在Oracle 10g中,SQL被以 SQLID 描述,此前SQL是通过HASH VALUE来表述的。 这两者具有同源的对应关系,最早 Tanel Poder 对这个问题进行过揭秘。 这个问题的本质是: 对于Library Cache对象,Oracle使用MD5算法进行哈希,生成一个128位的Hash Value,其中低32位作为HASH VALUE显示,SQL_ID则取了后64位。

  • BITMAP CONVERSION 执行计划导致CPU 100% Posted by eygle at 2011-12-16

    【内容摘要】在Oracle 9i中,Oracle有时候会选择将B-Tree索引进行BITMAP转换来进行SQL执行,从而导致极其恶劣的执行计划。 在下图中BITMAP CONVERSION FROM / TO ROWIDS 就是进行了位图转换后的执行计划

  • 清除统计信息的内部操作-DELETE_COLUMN_STATS Posted by eygle at 2011-11-15

    【内容摘要】Oracle在col_usage中,缺省的会自动收集统计信息,其来源取决于SQL的查询监控。

  • ALL_OBJECTS与X$KGLDP、X$KZSPR的复杂执行计划 Posted by eygle at 2011-06-24

    【内容摘要】如果单看如下一条SQL,你可能绝对想不到其执行计划的复杂度。这条SQL的内容如下: SELECT A.OBJECT, A.OWNER, A.TYPE, B.OBJECT_ID FROM V$ACCESS A, ALL_OBJECTS B WHERE A.OWNER = B.OWNER AND A.OBJECT = B.OBJECT_NAME AND A.TYPE = B.OBJECT_TYPE AND A.SID = :1 AND A.OWNER <> 'PUBLIC' AND A.OWNER <> 'SYS' 一个简单的查询,某个工具软件发给数据库的,查询了V$ACCESS 和 ALL_OBJECTS两个视图。

  • 使用 cursor_sharing_exact 拒绝SQL变量绑定 Posted by eygle at 2011-03-15

    【内容摘要】在使用了cursor_sharing参数后,可能会导致某些SQLChildren Cursor过高,引起竞争,这些竞争可能包括library cache lock的各类Child Cursor的分配、释放、扫描和锁定

  • DBA手记:Failed Login Count带来的性能问题 Posted by eygle at 2011-02-18

    【内容摘要】从这段代码可以看到,该SQL是用于监控和计算失败登陆次数(failed_count)的,这一监控结果可以在某用户发生失败登陆尝试时给出告警。这里的DBA_AUDIT_SESSION用于记录审计对于数据库所有的CONNECT和DISCONNECT操作,底层表为AUD$。在Database / Grid Control中如果启用了Failed Login Count Metric监控,就可能遇到这个问题,一个建议的解决方案就是停用这个监控。

  • Oracle中审计删除(DELETE)操作的触发器 Posted by eygle at 2011-01-12

    【内容摘要】帮朋友写的一个简单审计删除操作的触发器,供参考。

  • dbms_sqltune解析SQL的BIND_DATA绑定变量值 Posted by eygle at 2010-11-23

    【内容摘要】最近在用户案例分析中,需要解析一下SQL的绑定变量以分析SQL逻辑,通过wrh$_sqlstat的BIND_DATA可以将Oracle存储的绑定变量分析出来。

  • Oracle Index Merge 与 and_equal 的变迁 Posted by eygle at 2010-06-08

    【内容摘要】and_equal是Oracle支持的一种特定操作,可以将多个单列索引进行合并(Index Merge)输出查询结果。 同时and_equal可以通过Hints来进行强制,最少指定两个索引,最多指定5个。

  • SQL 共享之 ROLL_INVALID_MISMATCH 含义 Posted by eygle at 2010-01-18

    【内容摘要】在10g中,缺省的使用AUTO_INVALIDATE选项时,分析对象之后,原有SQL并不会立即失效,失效时间和SQL执行有关,同时受到另外一个参数的影响:_optimizer_invalidation_period ,这个参数的缺省值是18000s(以下是Oracle 10gR2的缺省设置),当超过这个时间,SQL会重新硬解析,生成一个新的SQL,并标记与之前Cursor不能共享的原因为 ROLL_INVALID_MISMATCH

  • CBO中 SMON 进程与 col_usage$ 的维护 Posted by eygle at 2009-12-15

    【内容摘要】从Oracle9i开始,为了监控column的使用信息,引入了一个对象col_usage$,用于记录运行时的COLUMN使用信息。

  • CBO的魔术 - 一个错误的索引选择会带来的后果 Posted by eygle at 2009-09-16

    【内容摘要】说CBO是Oracle最为博大精深的技术一点也不为过,只是这技术越复杂越深奥出错的机会就越多了。

  • 如何对时间进行简单加减运算 Posted by eygle at 2008-04-22

    【内容摘要】今天有朋友问,如果对时间进行运算,比如对一个时间值加3分钟,或者对一个时间减去1秒.....

  • 关于PARALLEL_MAX_SERVERS参数的设置 Posted by eygle at 2007-11-27

    【内容摘要】PARALLEL_MAX_SEVERS参数设置并行执行可用的最大进程数量,该参数的缺省值如下得出

  • 使用REF CURSOR处理Oracle的结果集 Posted by eygle at 2007-11-06

    【内容摘要】Oracle提供REF CURSOR,通过该功能可以实现在程序间传递结果集的功能,利用REF CURSOR也可以实现BULK SQL,从而提高SQL性能。

  • library cache pin与PROCEDURE的重建 Posted by eygle at 2007-04-02

    【内容摘要】理想的方式应该是,Oracle能够判断之前的Library Cache Pin的模式,如果是共享模式,则可以跳过Pin请求,如果是排他模式,则必须等待,目前的处理并不能从实质上改变竞争。

  • Oracle10g中过程(PROCEDURE )重建的增强 Posted by eygle at 2007-04-02

    【内容摘要】在Oracle10g中,这个LAST_DDL_TIME不再变化,这说明在10g中,当我们执行create or replace PROCEDURE 时,Oracle现在先尝试进行过程检查,如果内容没有变化,则不需要对过程进行重新编译,这可以减少Cache中的Invalidation,从而可以减少竞争

  • Oracle10g中SCN与TimeStamp的相互转换 Posted by eygle at 2007-01-08

    【内容摘要】作为对于闪回操作(flashback)的一个增强,Oracle10g提供了函数对于SCN和时间戳进行相互转换。

  • 使用外部表分析eygle.com的网站访问日志 Posted by eygle at 2006-10-18

    【内容摘要】经过使用Oracle的外部表对Oracle的警告日志文件、跟踪文件进行获取和分析之后,我发现外部表实在是非常易用,甚至到了随心所欲的境地(当然外部表尚不能修改外部文件)。 使用外部表可以很容易的实现网站的访问日志分析。 虽然使用Awstats等工具也可以实现,可是使用Oracle来分析我们更应该得心应手。 而且这一切还是有那么一点点Cool的。 好了,闲言少叙,让我们来看一下我分析的过程。

  • 使用Oracle的外部表访问跟踪文件 Posted by eygle at 2006-10-17

    【内容摘要】前面说过Oracle的外部表可以用来访问警告日志文件,其实Oracle的外部表可以非常灵活的被使用。 如果用户具有了Create Direcotry的权限,就能通过外部表访问很多主机上的文件。 我们看一下使用外部表访问跟踪文件的例子。

  • 使用Oracle的外部表查询警告日志文件 Posted by eygle at 2006-10-15

    【内容摘要】从Oracle9i开始,Oracle的外部表技术(Oracle External Tables)被极大的增强,通过外部表访问外部数据增强了Oracle数据库和外部数据源进行数据交互的能力,对于数据仓库和ETL来说,这些增强极大的方便了数据访问。 对于DBA来说,最常见一个例子是可以使用外部表来访问警告日志文件或其他跟踪文件. 以下一个例子用来说明外部表的用途。

  • 使用分析函数进行行列转换 Posted by eygle at 2006-09-26

    【内容摘要】经常有朋友问到行列转换的问题,留言板上也有这样的提问

    其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询

  • 学习-SQL查询连续号码段的巧妙解法 Posted by eygle at 2006-09-26

    【内容摘要】在ITPUB上有一则非常巧妙的SQL技巧,学习一下,记录在这里。

  • Oracle9i基于视图(view)的约束声名 Posted by eygle at 2006-02-27

    【内容摘要】从Oracle9i开始,Oracle允许对于视图(view)进行主键、唯一键、外键约束的声名。

  • 基于主键和唯一约束的显示索引控制 Posted by eygle at 2006-02-27

    【内容摘要】从Oracle9i开始,主键创建时的索引和唯一性约束可以在建表时独立定义。 随后,约束可以被独立drop,而索引可以保留。这是Oracle9i中对于索引增强的几个特性之一。

  • Oracle HowTo:如何使用Leading提示改变表连接方式 Posted by eygle at 2006-02-26

    【内容摘要】通过Leading 和 use_hash 提示连用,我们可以巧妙的影响SQL中表和结果集的Join顺序.

  • 如何使用ordered提示改变SQL执行计划 Posted by eygle at 2006-02-25

    【内容摘要】通过ordered提示,可以避免CBO SQL解析过程中的表连接评估,从而避免Oracle产生错误的执行计划,或者强制Oracle按照我们指定的方式执行。

  • 索引与Null值对于Hints及执行计划的影响 Posted by eygle at 2006-02-22

    【内容摘要】由于B*Tree索引不存储Null值,所以在索引字段允许为空的情况下,Oracle查询不会使用索引.

  • 使用Index提示 强制使用索引 Posted by eygle at 2006-02-21

    【内容摘要】虽然索引并不总会快于全表扫描,但是很多时候我们希望Oracle使用索引来执行某些SQL,这时候我们可以通过index hints来强制SQL使用index.

  • 基于自定义函数的Function-Based索引创建 Posted by eygle at 2006-01-23

    【内容摘要】基于自定义函数的Function-Based索引的创建

  • Definer and Invoker Rights Posted by eygle at 2005-12-12

    【内容摘要】

    本文用以回答留言板上的2111号问题.

    在Oracle8i以前,所有已编译存储对象(包括packages, procedures, functions, triggers, and views)只能以定义者(Definer)身份解析运行;从Oracle8i开始,Oracle引入调用者(invoker)权限,使得对象可以以调用者身份和权限执行。

    定义者(Definer)指编译存储对象的所有者.
    调用者(Invoker)指拥有当前会话权限的模式,这可能和当前登录用户相同或不同(alter session set current_schema 可以改变调用者Schema).



  • 批量绑定(bulk binds):FOR循环与FORALL的性能比较 Posted by eygle at 2005-11-13

    【内容摘要】通常在SQL语句中给PL/SQL变量赋值叫做绑定(Binding),一次绑定一个完整的集合称为批量绑定(Bulk Binding)。 批量绑定(Bulk binds)可以通过减少在PL/SQL和SQL引擎之间的上下文切换(context switches )提高了性能. 批量绑定(Bulk binds)包括: (i) Input collections, use the FORALL statement,一般用来改善DML(INSERT、UPDATE和DELETE) 操作的性能 (ii) Output collections, use BULK COLLECT clause,一般用来提高查询(SELECT)的性能

  • How to use Oracle Dump Function Posted by eygle at 2005-11-10

    【内容摘要】DUMP 函数使用范例

  • 如何使用DBMS_LOB从文件中加载CLOB数据 Posted by eygle at 2005-08-16

    【内容摘要】BFILE包含二进制数据,所以当通过BFILE方式加载数据到CLOB/NCLOB时,Oracle不进行字符集转化。 如果字符集是可变长的,例如UTF-8或ZHS16GBK,Oracle使用UCS2存储LOB数据。所以如果想BFILE文件数据能够正确加载入数据库,那么文件需要以USC2字符集存储。

  • 使用UTL_FILE转储数据为逗号分隔符文件 Posted by eygle at 2005-05-13

    【内容摘要】 Tom写过这样一个函数用于把数据转储为逗号分隔符文件,看到很多人问类似的问题,转载这里供参考。 注意,UTL_FILE使用的Directory,需要你预先创建,具体可以参考Using Create directory & UTL_FILE in Oracle create or replace function dump_csv( p_query in varchar2, p_separator in varchar2...

  • Why "EXECUTE ANY PROCEDURE" is a dangerous PRIVILEGE? Posted by eygle at 2005-05-10

    【内容摘要】TOM曾经多次说过: All I need is "CREATE SESSION" and "EXECUTE ANY PROCEDURE" and I can totally do anything I want to...

  • What's mean ORA-25191? Posted by eygle at 2005-05-09

    【内容摘要】对于Overflow的IOT表,只需要对父表进行授权即可。简单动手自己试试看也可以

  • Using DBMS_SYS_SQL Package to grant Privilege Posted by eygle at 2005-05-07

    【内容摘要】在Oracle9i之前,如果你想要把对象权限授予某些用户,那么你需要使用该对象属主或者使用具有该对象with grant option权限的用户。


  • 使用PL/SQL从数据库中读取BLOB对象 Posted by eygle at 2005-04-30

    【内容摘要】通过实例介绍如何使用PL/SQL从数据库中读取BLOB对象..

  • 使用存储过程(PL/SQL)向数据库中存储BLOB对象 Posted by eygle at 2005-04-28

    【内容摘要】以下存储过程用于向数据库加载BLOB对象 1.创建directory并授权 关于Directory可以参考: Using Create directory & UTL_FILE in Oracle C:\>sqlplus "/ as sysdba" SQL*Plus: Release 10.1.0.3.0 - Production on...

  • Using Create directory & UTL_FILE in Oracle Posted by eygle at 2005-04-22

    【内容摘要】Create directory让我们可以在Oracle数据库中灵活的对文件进行读写操作,极大的提高了Oracle的易用性和可扩展性

  • Oracle中大批量删除数据的方法 Posted by eygle at 2005-04-21

    【内容摘要】批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交。

  • 如何有条件的分步删除数据表中的记录 Posted by eygle at 2005-02-22

    【内容摘要】有时候我们需要分配删除数据表的一些记录,分批提交以减少对于Undo的使用,本文提供一个简单的存储过程用于实现该逻辑。

  • 使用触发器实现数据库级守护,防止DDL操作 Posted by eygle at 2004-12-16

    【内容摘要】不管是有意还是无意的,你可能会遇到数据库中重要的数据表等对象被drop掉的情况,这可能会给我们带来巨大的损失. 通过触发器,我们可以实现对于表等对象的数据库级守护,禁止用户drop操作.

  • 使用dbms_rowid包获得rowid的详细信息 Posted by eygle at 2004-12-16

    【内容摘要】Rowid中包含了记录的详细信息,通过dbms_rowid包可以获得这些信息.本文通过一个定义自定义函数介绍该package的使用

  • 使用USE_CONCAT提示 Posted by eygle at 2004-11-18

    【内容摘要】USE_CONCAT提示强迫优化器扩展查询中的每一个OR谓词为独立的查询块,最后合并所有查询块的结果,返回结果集给用户。
    当使用多个in-lists查询时,Oracle可能选择把单个查询扩展为多个查询块。

  • 如何从结果集中获得随机结果 Posted by eygle at 2004-11-06

    【内容摘要】从Oracle8i开始Oracle提供采样表扫描特性。

  • CBO对于Oracle SQL执行计划的影响(之二) Posted by eygle at 2004-10-30

    【内容摘要】在Oracle7的年代,这样的SQL语句执行的很快,但是在Oracle8以后的数据库,如果碰巧你用的是CBO,那么这样的语句执行结果可能是Hang了(其实不是死了,只是很多人没有耐心等而已),在Oracle7里,这样的语句毫无疑问使用RBO,很快你就可以得到执行结果。

  • CBO对于Oracle SQL执行计划的影响(之一) Posted by eygle at 2004-10-30

    【内容摘要】我们的数据库使用dbms_stats.gather_schema_stats分析过,具有足够及时的所有数据,然而在CBO的执行计划下,优化器选择了完全不同的执行计划.

  • 关于PUSH_SUBQ提示的说明 Posted by eygle at 2004-10-15

    【内容摘要】PUSH_SUBQ 可以用来控制子查询的执行 这个是PUSH_SUBQ 的本意

  • 关于Oracle9i的Peeking of User-Defined Bind Variables Posted by eygle at 2004-09-16

    【内容摘要】我们知道,由于使用绑定变量,在Oracle9i之前会导致柱状图信息无法被用到
    从Oracle9i开始Oracle提供了Peeking的方式,在使用绑定变量的SQL第一次执行时,使用参数传递成文本sql,此时可以有效的利用存在的柱状图信息进行执行计划的评估,从而在某些数据分布不均和的情况下,可能可以产生更为精确的执行计划.这显然是一个有益的提高,然而这个Peeking有时候也会存在问题,本文通过实例说明这个特性及其不足.


  • 使用or展开进行sql调整 Posted by eygle at 2004-07-09

    【内容摘要】降低逻辑读是优化SQL的基本原则之一,我们尝试通过降低逻辑读来加快SQL的执行...

  • OPTIMIZER_INDEX_COST_ADJ与成本计算 Posted by eygle at 2004-06-28

    【内容摘要】OPTIMIZER_INDEX_COST_ADJ,这个初始化参数代表一个百分比,取值范围在1到10000之间. 该参数表示索引扫描和全表扫描成本的比较。缺省值100表示索引扫描成本等价转换与全表扫描成本。

  • 使用DBMS_SUPPORT包 Posted by eygle at 2004-06-19

    【内容摘要】DBMS_SUPPORT包从Oracle7.2引入,主要功能用以提供更完整的用户session跟踪信息

  •  

    CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
    数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com