ORACLE11.2.0.3中访问ALL_SYNONYMS导致ORACLE CPU100%

原创 2012年03月27日 16:09:07
以前写过一篇文章关于《PL/SQL Developer工具优化》 提到过在Oracle 11.2.0.3.0

对all_synonyms的访问会导致PL/SQL Developer变得非常慢,观察oracle主机的cpu会

发现有两颗cpu使用率到100%,退出PL/SQL Developer后,cpu恢复正常。


详见:http://blog.csdn.net/lwei_998/article/details/7038001


通过禁用PL/SQL Developer的“Describe context”功能,临时解决了这个问题。

现在可以通过重建ALL_SYNONYMS彻底解决这个问题了

ALL_SYNONYMS视图的创建脚本位于$ORACLE_HOME/rdbms/admin/cdcore.sql


修正后的ALL_SYNONYMS创建脚本:  

create or replace view ALL_SYNONYMS
(OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME, DB_LINK)
as
SELECT U.NAME, O.NAME, S.OWNER, S.NAME, S.NODE
  FROM SYS.USER$ U, SYS.SYN$ S, SYS."_CURRENT_EDITION_OBJ" O
 WHERE O.OBJ# = S.OBJ#
   AND O.TYPE# = 5
   AND O.OWNER# = U.USER#
   AND (O.OWNER# IN (USERENV('SCHEMAID'), 1 /* PUBLIC */
       ) OR /* local object, and user has system privileges */
       (S.NODE IS NULL /* don't know accessibility if syn is for db link */
         AND EXISTS (SELECT NULL
                        FROM V$ENABLEDPRIVS
                       WHERE PRIV_NUMBER IN (-45 /* LOCK ANY TABLE */
                             , -47 /* SELECT ANY TABLE */
                             , -48 /* INSERT ANY TABLE */
                             , -49 /* UPDATE ANY TABLE */
                             , -50 /* DELETE ANY TABLE */
                             ))) OR /* user has any privs on base object in local database */
        EXISTS
        (SELECT NULL
           FROM SYS.OBJAUTH$ BA, SYS."_CURRENT_EDITION_OBJ" BO, SYS.USER$ BU
          WHERE S.NODE IS NULL /* don't know accessibility if syn for db link */
            AND BU.NAME = S.OWNER
            AND BO.NAME = S.NAME
            AND BU.USER# = BO.OWNER#
            AND BA.OBJ# = BO.OBJ#
            AND (BA.GRANTEE# IN (SELECT KZSROROL FROM X$KZSRO) OR
                BA.GRANTOR# = USERENV('SCHEMAID'))))
UNION
SELECT U.NAME, O.NAME, S.OWNER, S.NAME, S.NODE
  FROM SYS.USER$ U,
       SYS.SYN$ S,
       SYS."_CURRENT_EDITION_OBJ" O,
       (SELECT S.SYN_ID
          FROM (SELECT S.OBJ# SYN_ID, BO.OBJ# BASE_SYN_ID
                  FROM SYS.SYN$                   S,
                       SYS."_CURRENT_EDITION_OBJ" BO,
                       SYS.USER$                  BU
                 WHERE S.OWNER = BU.NAME
                   AND BU.USER# = BO.OWNER#
                   AND S.NAME = BO.NAME
                   AND BO.TYPE# = 5) S
         START WITH EXISTS (SELECT NULL
                       FROM SYS."_ALL_SYNONYMS_FOR_AUTH_OBJECTS" SA
                      WHERE S.BASE_SYN_ID = SA.SYN_ID)
        CONNECT BY NOCYCLE PRIOR S.SYN_ID = S.BASE_SYN_ID) ST
 WHERE O.OBJ# = S.OBJ#
   AND O.TYPE# = 5
   AND O.OWNER# = U.USER#
   AND O.OBJ# = ST.SYN_ID
   AND S.OBJ# = ST.SYN_ID

   
参考【MOS】[ID 1242844.1]
Selects Against ALL_SYNONYMS Very Slow in 11.2.0.1. and 11.2.0.2. [ID 1242844.1]  

相关文章推荐

oracle中创建同义词(synonyms)表

一 同义词

Oracle表锁或行锁问题解决办法

今天在调试业务问题的时候,刚开始Insert除了数据不对其他倒是没问题,经过不断修改代码,不断调试,最后悲剧发生了,当执行到某一条Insert语句的时候,一直执行不下去,将这条sql语句摘出来在PLS...
  • savsae
  • savsae
  • 2016年08月23日 13:33
  • 621

oracle 10g如何关闭和打开自动收集统计信息!

从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。   这个自动任务默认情况下在工作日晚...

[转自Oracle官方中文博客]关于sys CPU usage 100%问题的分析

[转自Oracle官方中文博客]关于sys CPU usage 100%问题的分析

oracle数据库cpu100%处理

两种可能:  1: A Background (instance) process  2: An oracle (user) process #此种可能最大。处理:      1.查看每个Sessio...

Oracle服务器CPU 100%案例分析(转)

Oracle服务器CPU 100%案例分析 2011-10-18 16:22:39 分类: Linux         今天收到开发人员的反应,公司一个非常重要...

Oracle数据库服务器CPU持续100%之等待事件asynch descriptor resize

Oracle数据库服务器CPU持续100%之等待事件asynch descriptor resize

oracle CPU使用太高 如何诊断和解决CPU高度消耗(100%)的数据库问题

如何诊断和解决CPU高度消耗(100%)的数据库问题 很多时候我们的服务器可能会经历CPU消耗100%的性能问题. 排除系统的异常,这类问题通常都是因为系统中存在性能低下甚至存在错误的SQL语句,...

认识Oracle同义词(synonyms)和链接(database links)

Oracle同义词 database link
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE11.2.0.3中访问ALL_SYNONYMS导致ORACLE CPU100%
举报原因:
原因补充:

(最多只允许输入30个字)