alert日志中的两种ORA错误分析

今天在巡检系统的时候,发现alert日志中有两种类型的ora错误。
Errors in file /U01/app/oracle/diag/rdbms/XX/XX/trace/xxdb_j002_20401.trc:
ORA-12012: error on auto execute of job "XXDATA"."S_XXXX_HIST_OPS_SERINFO_K"
ORA-12170: TNS:Connect timeout occurred
ORA-06512: at "XXDATA.L_XXXX_HIST_OPS_SERINFO_K", line 6
...
DBMS_STATS: GATHER_STATS_JOB encountered errors.  Check the trace file.
Errors in file /U01/app/oracle/diag/rdbms/XX/XX/trace/xxdb_j003_21375.trc:
ORA-20011: Approximate NDV failed: ORA-06564: object IMPDP20130506 does not exist
而且时间错误的间隔还很短,初步感觉这两种ORA错误似乎是有关联的,我们一个一个来分解这些ora错误。
首先查看第一种错误的trace日志,根据提示是job运行有问题,甚至指向了对应的代码部分,显示是超时错误。而在对应的代码里面可以看到其实是用到了db link,但是连接信息发生了变化,导致db link对应的数据库不可访问,结果就出现了超时的问题,最后在运行的时候抛错。
*** 2015-08-04 06:01:00.448
*** SESSION ID:(389.3953) 2015-08-04 06:01:00.448
*** CLIENT ID:() 2015-08-04 06:01:00.448
*** SERVICE NAME:(SYS$USERS) 2015-08-04 06:01:00.448
*** MODULE NAME:(DBMS_SCHEDULER) 2015-08-04 06:01:00.448
*** ACTION NAME:(S_XXXX_HIST_OPS_SERINFO_K) 2015-08-04 06:01:00.448
ORA-12012: error on auto execute of job "XXDATA"."S_XXXX_HIST_OPS_SERINFO_K"
ORA-12170: TNS:Connect timeout occurred
ORA-06512: at "XXDATA.L_XXXX_HIST_OPS_SERINFO_K", line 6
明白了问题,解决的思路相对来说就容易了很多,一种是解决db link的连接问题,另外一种是把job给禁用或者删除,经过确认选择第二种方法。
使用dba_jobs来查看对应的job信息,竟然查不到对应的job,其实需要查看的是scheduler部分,在10g有了重大的改变。
select job_name ,status,owner from DBA_SCHEDULER_JOB_LOG where owner='xxxxx'
根据条件能够找到对应的job了,然后在sys下直接调用dbms_scheduler来禁用Job.

SQL>   exec dbms_scheduler.DISABLE('S_XXXX_HIST_OPS_SERINFO_INUSE',force=>true);

BEGIN dbms_scheduler.DISABLE('S_XXXX_HIST_OPS_SERINFO_INUSE',force=>true); END;
*

ERROR at line 1:

ORA-27476: "SYS.S_XXXX_HIST_OPS_SERINFO_INUSE" does not exist

ORA-06512: at "SYS.DBMS_ISCHED", line 4407

ORA-06512: at "SYS.DBMS_SCHEDULER", line 2737

ORA-06512: at line 1
报出的错误还是有些奇怪,仔细查看日志,其实默认是会从当前的schema下查找对应的job. 指定对应的schema就可以了。

SQL>   exec dbms_scheduler.DISABLE('XXDATA.S_XXXX_HIST_OPS_SERINFO_INUSE',force=>true);
PL/SQL procedure successfully completed.
第一类问题的解决告一段落,我们来看看第二种问题,是不是和第一类相关。
第二类中的trace也比较有限,但是能够看出来是在做统计信息收集的时候报出了错误。所以从这一点来看应该和第一类问题没有直接的联系,根据错误提示是有一个对象找不到,通过字面意思可以看出来似乎和datapump有关。
DBMS_STATS: GATHER_STATS_JOB encountered errors.  Check the trace file.
Errors in file /U01/app/oracle/diag/rdbms/xxxx/xxxx/trace/bidb_j003_21375.trc:
ORA-20011: Approximate NDV failed: ORA-06564: object IMPDP20130506 does not exist
对于这个对象,问题还是能够简单复现的。

SQL> select count(*) from "ET$00E73C1D0001";
select count(*) from "ET$00E73C1D0001"
                     *
ERROR at line 1:
ORA-06564: object IMPDP20130506 does not exist
对象既然不存在,那就使用desc来看看,到底可以不,但是desc又可以。
从这一点来说,这个对象还是有点特别。
SQL> desc "ET$00E73C1D0001";
 Name                                                                                                              Null?    Type
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 ID                                                                                                                         NUMBER(15)
 SN                                                                                                                         VARCHAR2(24)
 GROUP_ID                                                                                                                   NUMBER(6)
 SERVER_IP                                                                                                                  VARCHAR2(15)
 SERVER_NAME                                                                                                                VARCHAR2(40)
 WORD                                                                                                                       NUMBER(4)
 SERVER                                                                                                                     NUMBER(4)
 SCENE                                                                                                                      NUMBER(4)
 CN_GUID                                                                                                                    VARCHAR2(30)
 BUY_TIME                                                                                                                   DATE
 JEWEL_TOTAL                                                                                                                NUMBER(7)
 CN                                                                                                                         VARCHAR2(80)
 CHARACTER_PUT                                                                                                              VARCHAR2(50)
 IP                                                                                                                         VARCHAR2(15)
 WEAPONID                                                                                                                   NUMBER(15)
 PUT_DATE                                                                                                                   DATE
 WEAPONID_NEW                                                                                                               NUMBER(15)
 COUNT                                                                                                                      NUMBER
 USER_CLASS                                                                                                                 NUMBER
 CONSUME_WAY                                                                                                                VARCHAR2(40)
通过上面的信息,可以很容易联想到应该是datapump中的临时表之类的,可能在上次datapump做expdp或者Impdp的时候出现了问题,结果这个临时表保留了下来。在做统计信息收集的时候就报出了错误。
但是上面还仅仅是个猜想,怎么验证呢,还是通过一个数据字典表dba_external_tables
select *from dba_external_tables where table_name='ET$00E73C1D0001';

OWNER                          TABLE_NAME                     TYP TYPE_NAME                      DEF DEFAULT_DIRECTORY_NAME         REJECT_LIMIT                      ACCESS_
------------------------------ ------------------------------ --- ------------------------------ --- ------------------------------ ---------------------------------------- -------
ACCESS_PARAMETERS                                                                PROPERTY
-------------------------------------------------------------------------------- ----------
SYS                            ET$00E73C1D0001                SYS ORACLE_DATAPUMP                SYS IMPDP20130506                  UNLIMITED                         CLOB
DEBUG = (0 , 0) DATAPUMP INTERNAL TABLE "XXDATA"."CONSUME_LOG_XXXX_BEFORE201201   ALL
可以清晰的看到是在之前做impdp的时候抛出了错误,这个表是Impdp过程中产生的临时表。
还有一个思路就是在expdp/impdp等操作时,在数据库日志中也会有一定的信息标识,但是尝试查看数据库日志,这个问题是好几年前的了,几年前的alert日志已经被清空了,所以也无法求证在当时问题发生的时候到底是什么样的一个情况。
解决问题的步骤就很简单了,需要直接删除这个外部表即可。

SQL> drop table "ET$00E73C1D0001";
Table dropped.
通过这个案例可以看到,对于这些ORA错误还是需要通过日志来一步一步分析,逐个击破,可以大胆猜想,但是要小心求证,问题了解清楚了,解决起来都是很容易的。

时间: 2024-09-20 04:15:31

alert日志中的两种ORA错误分析的相关文章

alert日志中的一条ora警告信息的分析

今天照例检查数据库alert日志,发现一个错误.但是也没在意,想可能有大的操作导致的,马上会释放空间的,但是转眼一想,这是生产库,而且现在时早上,泰国的运营商还不算忙时,需要重视这个问题,看有没有什么潜在的问题, 从alert日志里面看到的 Fri Jul 12 09:08:23 ICT 2013 ORA-1652: unable to extend temp segment by 128 in tablespace                 TEMP   查询temp_usage,发现目

SQL SERVER日志清除的两种方法

server SQL SERVER日志清除的两种方法方法一 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大1.设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项--&g

IIS5中的两种服务器端网页重定向方法

iis|服务器|网页|iis|服务器 IIS5中的两种服务器端网页重定向方法      在IIS5中提供了两种服务器端网页重定向(或者说转向)的方法, 一个是Server.Transfer方法, 另外一个是Server.Execute方法. 说它们是服务器端重定向,是因为在不同页面之间的转向是直接在服务器端 完成的, 客户端只能看到结果,而不能看到转向的过程. 这同以往我们在IIS4使用的 Response.Redirect 方法是不同的.      以前, 当我们需要从一个页面转向到另外一个页

select-link中这样两种写法有什么区别?

问题描述 link中这样两种写法有什么区别? var query = from x in table select x; foreach (var item in x) { ... } foreach (var item in table) { ... } 解决方案 两种写法一样,而且性能也一样

面向对象-javascript中这两种对象属性有什么区别?

问题描述 javascript中这两种对象属性有什么区别? 第一种:function aaa(){} aaa.a=111; 第二种:function bbb(){} bbb.prototype.b=111; 我在csdn问过第一种,大部分人说属于面向对象的范畴. 但是我看了几篇js面向对象博客,都是用第二种原型的方式: 所以想知道这两种给对象添加属性的行为,在实际应用中有什么区别? 解决方案 如果把aaa,bbb作为方法来看,这两者没有区别. 如果把aaa,bbb作为类来看,那有区别. aaa.

工程中采用两种框架两种编码格式出现乱码问题 求助

问题描述 工程中采用两种框架两种编码格式出现乱码问题 求助 工程中用到了两种框架 两种编码格式 出现乱码 不知道怎么处理

java-如何在LinkedList对象中加入两种比较器?

问题描述 如何在LinkedList对象中加入两种比较器? 用LinkedList对象list存储扑克牌并排序,写了一个牌值比较器RankComparator和 一个花色比较器SuitComparator, 还有写了枚举的CardRank和CardSuit,并对不同的 花色和牌值都赋了不同的值,再用Collection.sort(list,new RankComparator())进行牌值的排序,现在我想再加一个花色的排序(就是list中既对牌值排序,又对花色排序),请问该怎么写呢?谢谢各位大虾

android中这两种方法有什么区别和联系的问题?????

问题描述 android中这两种方法有什么区别和联系的问题????? startService(Intent)/bindService(Intent):来启动一个Service 这两种方法有什么区别和联系 解决方案 详细参考

Crystal Report在.net中的两种显示方式

原文:Crystal Report在.net中的两种显示方式 Crystal Report在.net中的两种显示方式 编写人:CC阿爸   2014-7-29   近来在完成深圳一公司的项目,对方对各方面要求相当严格,一不满意就拒绝签收,为了对修正水晶报表显示及导出的一些小问题,无赖之下,仔细了解一下水晶报表的操作方法,逼苦我们这些苦逼的程序,虽说在以前的项目中,也常使用crystal report 来制作报表.并且针对web与winform 都各有不同的地方.   但总的来讲:显示水晶报表目前