ORA-12012、ORA-20000错误解决过程

ORA-12012ORA-20000错误解决过程

[testdb]#tail alert_testdb.log

Thu Feb 13 22:00:01 2014

Errors in file /u01/app/oracle/admin/testdb/bdump/testdb_j000_24348.trc:

ORA-12012: error on auto execute of job 8888

ORA-20000: ORA-20000: Content of the tablespace specified is not permanent or tablespace name is invalid

ORA-06512: at "SYS.PRVT_ADVISOR", line 1624

ORA-06512: at "SYS.DBMS_ADVISOR", line 186

ORA-06512: at "SYS.DBMS_SPACE", line 1338

ORA-06512: at "SYS.DBMS_SPACE", line 1554

Thu Feb 13 23:20:26 2014

[testdb]#cat /u01/app/oracle/admin/testdb/bdump/testdb_j000_24348.trc

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining Scoring Engine options

ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1

System name:    Linux

Node name:      testdb

Release:        2.6.9-67.ELsmp

Version:        #1 SMP Wed Nov 7 13:56:44 EST 2007

Machine:        x86_64

Instance name: testdb

Redo thread mounted by this instance: 1

Oracle process number: 69

Unix process pid: 18648, image: oracle@testdb (J000)

 

*** ACTION NAME:(AUTO_SPACE_ADVISOR_JOB) 2014-02-12 22:00:04.285

*** MODULE NAME:(DBMS_SCHEDULER) 2014-02-12 22:00:04.285

*** SERVICE NAME:(SYS$USERS) 2014-02-12 22:00:04.285

*** SESSION ID:(1031.63832) 2014-02-12 22:00:04.285

*** 2014-02-12 22:00:04.285

ORA-12012: error on auto execute of job 8888

ORA-20000: ORA-20000: Content of the tablespace specified is not permanent or tablespace name is invalid

ORA-06512: at "SYS.PRVT_ADVISOR", line 1624

ORA-06512: at "SYS.DBMS_ADVISOR", line 186

ORA-06512: at "SYS.DBMS_SPACE", line 1338

ORA-06512: at "SYS.DBMS_SPACE", line 1554

 

怎么找出job name

参考文档:How to Find the Job Name if a Scheduled Job Fails with ORA-12012 (文档 ID 744645.1)

首先,ORA-12012: error on auto execute of job 8888中的8888可理解为job id,那么首先想到dba_jobs中的job,例如:

SQL>select job, what from dba_jobs ;

JOB WHAT
---------- ----------------------------------------------------------
1 EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS();
21 BEGIN MGMT_BSLN.COMPUTE_ALL_STATISTICS;/*DB*/END;
22 BEGIN MGMT_BSLN.SET_ALL_THRESHOLDS;/*DB*/END;

 

其次,如果dba_jobs中无相关信息,则要找scheduler相关信息;如,DBA_SCHEDULER_JOBS,但是该视图中无job id相关字段,不好找对应关系;DBMS_SCHEDULER执行的job id是保存在sys.scheduler$_job下的obj#列的;则,

SQL>select obj# , object_name from sys.scheduler$_job , dba_objects where obj# = object_id;

 

另外,还可以在指定的trace file中找到job_name;例如文件中的action name

[10.6.1.7:testdb]#cat /u01/app/oracle/admin/testdb/bdump/testdb_j000_24348.trc

*** ACTION NAME:(AUTO_SPACE_ADVISOR_JOB) 2014-02-12 22:00:04.285

 

ORA-12012ORA-20000本例原因

       由于原有某个表空间不存在,导致在AUTO_SPACE_ADVISOR_JOB执行时报错,其根本原因是Bug 4707226(需要补丁Patch 4707226

参考文档:AUTO_SPACE_ADVISOR_JOB May Fail With ORA-20000 if Tablespace No Longer Exists (文档 ID 551190.1)

 

解决方法

       方法一.创建缺失的表空间,再执行job,然后再删除表空间

    SQL> CREATE TABLESPACE DATAFILE '' SIZE 100K;

    Run the space advisor:

    SQL> EXEC dbms_space.auto_space_advisor_job_proc;

    Drop the tablespace again:

    SQL> DROP TABLESPACE ;

要找到哪个表空间缺失,则需要对比dba_auto_segadv_ctldba_tablespaces视图;

TABLESPACE_NAME(dba_auto_segadv_ctl)  TABLESPACE_NAME(dba_tablespaces)

------------------------------  -                -----------------------------

SYSAUX                          SYSTEM                       

MON813_INDEXES                  UNDOTBS1                      

USERS                           SYSAUX                       

MON813_TABLES                   TEMP                         

MIDDLETBS                       USERS                        

MON105_TABLES                   MON813_TABLES                 

                                MON813_INDEXES               

                                MIDDLETBS                 

方法二、手动remove相关视图中相关记录;(未验证)

原文:Workaround

      Manually remove the tablespace candidate from DBA_AUTO_SEGADV_CTL.

SQL> DELETE FROM dba_auto_segadv_ctl where tablespace_name not in (select tablespace_name from dba_tablespaces);

/

SQL>desc dbms_metadata

FUNCTION GET_DDL RETURNS CLOB

 Argument Name                  Type                    In/Out Default?

 ------------------------------ ----------------------- ------ --------

 OBJECT_TYPE                    VARCHAR2                IN

 NAME                           VARCHAR2                IN

 SCHEMA                         VARCHAR2                IN     DEFAULT

 VERSION                        VARCHAR2                IN     DEFAULT

 MODEL                          VARCHAR2                IN     DEFAULT

 TRANSFORM                      VARCHAR2                IN     DEFAULT

SQL> set long 5000

SQL> SELECT dbms_metadata.get_ddl('VIEW','DBA_AUTO_SEGADV_CTL') A FROM DUAL;

A

--------------------------------------------------------------------------------

  CREATE OR REPLACE FORCE VIEW "SYS"."DBA_AUTO_SEGADV_CTL" ("AUTO_TASKID", "TABLESPACE_NAME", "SEGMENT_OWNER", "SEGMENT_NAME", "SEGMENT_TYPE", "PARTITION_NAME", "STATUS", "REASON", "REASON_VALUE", "CREATION_TIME", "PROCESSED_TASKID", "END_TIME") AS

  select stats.auto_taskid, stats.tablespace_name, stats.segment_owner,

       stats.segment_name, stats.segment_type, stats.partition_name,

       stats.status, stats.reason, stats.reason_value,

       stats.creation_time, stats.proc_taskid, stats.end_time

from   wri$_segadv_objlist stats

 

方法三、打补丁Patch 4707226

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16976507/viewspace-1266115/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16976507/viewspace-1266115/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值