标题: ORA-12012;自动统计任务报错处理 [打印本页] 作者: Inkcup 时间: 2026-1-6 17:14 标题: ORA-12012;自动统计任务报错处理 报错信息:
---------------------------
ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_23740"
ORA-20001: Statistics Advisor: Invalid task name for the current user
ORA-06512: at "SYS.DBMS_STATS", line 51823
ORA-06512: at "SYS.DBMS_STATS_ADVISOR", line 891
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 22158
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 24290
ORA-06512: at "SYS.DBMS_STATS", line 51811
---------------------------
这个错误是Oracle自动统计信息收集任务(ORA$AT_OS_OPT_SY_23740)执行失败导致的。错误核心是"Invalid task name for the current user",通常是由于统计信息顾问任务相关的内部问题造成的。
-- 1. 首先检查现有的统计信息顾问任务
SELECT task_name, status, created
FROM dba_advisor_tasks
WHERE advisor_name = 'Statistics Advisor';
或
select name, ctime, how_created
from sys.wri$_adv_tasks
where owner_name = 'SYS'
and name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK');
-- 2. 如果发现无效或异常的任务,可以尝试清理
BEGIN
DBMS_STATS.DROP_ADVISOR_TASK('AUTO_STATS_ADVISOR_TASK');
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
-- 3. 重新创建统计信息顾问任务
BEGIN
DBMS_STATS.INIT_PACKAGE();
END;
/
-- 2. 清理所有统计信息顾问任务
BEGIN
FOR t IN (SELECT task_name FROM dba_advisor_tasks
WHERE advisor_name = 'Statistics Advisor')
LOOP
BEGIN
DBMS_STATS.DROP_ADVISOR_TASK(t.task_name);
EXCEPTION
WHEN OTHERS THEN NULL;
END;
END LOOP;
END;
/
-- 1. 检查具体的失败任务
SELECT job_name, state, last_start_date, next_run_date
FROM dba_scheduler_jobs
WHERE job_name = 'ORA$AT_OS_OPT_SY_23740';
-- 2. 尝试停止并重新运行任务
BEGIN
DBMS_SCHEDULER.STOP_JOB('SYS.ORA$AT_OS_OPT_SY_23740', force => TRUE);
DBMS_SCHEDULER.DROP_JOB('SYS.ORA$AT_OS_OPT_SY_23740');
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
-- 2. 重新初始化
BEGIN
DBMS_STATS.INIT_PACKAGE();
DBMS_STATS.CREATE_ADVISOR_TASK('AUTO_STATS_ADVISOR_TASK');
END;
/
--------
预防措施
-- 定期检查统计信息顾问任务状态
SELECT task_name, status, created, last_execution
FROM dba_advisor_tasks
WHERE advisor_name = 'Statistics Advisor'
ORDER BY created DESC;
-- 监控自动统计信息收集任务
SELECT client_name, status, attributes
FROM dba_autotask_client
WHERE client_name = 'auto optimizer stats collection';