ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_73"

问题

新装了一套12.2.0.1的库,收到alert的告警邮件,是晚上10点多发的,报告的内容大致如下

ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_88"
ORA-20001: Statistics Advisor: Invalid Task Name For the current user <== Note it
ORA-06512: at "SYS.DBMS_STATS", line 46861
ORA-06512: at "SYS.DBMS_STATS_ADVISOR", line 734
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 19930
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 21934
ORA-06512: at "SYS.DBMS_STATS", line 46851
解决

查了一下MOS,很容易就找到了对应的文章,MOS解释是因为CDB没有被正确创建引起的(我并没有启用CDB)init_package没有执行(创建statistics advisor的),所以当运行自动job的时候,就会报错

解决办法就是手工执行下

$ sqlplus / as sysdba

 EXEC dbms_stats.init_package();
column name format A35
set linesize 120

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');

 

Output of the query will look like this:
NAME                                 CTIME      HOW_CREATED
----------------------------------- ---------- ------------------------------
AUTO_STATS_ADVISOR_TASK              14-APR-16 CMD
INDIVIDUAL_STATS_ADVISOR_TASK        14-APR-16 CMD
其他可能的问题
If the query based on "where owner_name = 'SYS'" condition does not show any rows but the error continues, please change the query as shown below to

see if a non-SYS user like SYSTEM owns those tasks for some reason:

$ sqlplus / as sysdba

select name, ctime, how_created,OWNER_NAME from sys.wri$_adv_tasks
where name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK'); 

 

If the OWNER is a non-SYS user, you have to drop the tasks as that user first and then try to solution mention in the Note again.

This was a case for one customer.

For example:


--- Connect as SYSTEM, for example, if that user owned the tasks and non SYS for some reason

SQL> conn system/&password


DECLARE
v_tname VARCHAR2(32767);
BEGIN
v_tname := 'AUTO_STATS_ADVISOR_TASK';
DBMS_STATS.DROP_ADVISOR_TASK(v_tname);
END;
/

SQL> DECLARE
v_tname VARCHAR2(32767);
BEGIN
v_tname := 'INDIVIDUAL_STATS_ADVISOR_TASK';
DBMS_STATS.DROP_ADVISOR_TASK(v_tname);
END;
/


connect / as sysdba
EXEC DBMS_STATS.INIT_PACKAGE();

引用

ORA-12012 Error on auto execute of job “SYS”."ORA$AT_OS_OPT_SY_ in 12.2.0 Database version or higher release (like 18c) (文档 ID 2127675.1)

### 关于 Oracle9i Instant Client 的下载、配置和使用 #### 下载 对于 Oracle9i 数据库,Instant Client 的版本选择至关重要。由于 Oracle9i 属于较旧的数据库版本,因此需要确保使用的 Instant Client 版本与其兼容。 - **版本要求**: 对应 Oracle9i 的 Instant Client 应该选择 10 或更低版本[^1]。更高版本(如 11g)可能无法完全支持 Oracle9i 功能。 - **官方下载地址**: 访问 [Oracle 官方网站](http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html),找到适合的操作系统平台以及对应版本的 Instant Client 包进行下载[^2]。通常情况下,基本包 (`instantclient-basic`) 是必需的,而其他附加功能包(如 JDBC 支持或 SQL*Plus 工具)可以根据需求额外下载。 #### 配置 完成下载后,需按照以下步骤正确配置 Instant Client: 1. **解压文件**: 将 `instantclient-basic` 压缩包解压至指定目录,例如 `C:\instantclient_10_2` 或者 Linux 平台下的 `/opt/instantclient_10_2`[^1]。 2. **设置环境变量**: - 在 Windows 上: ```cmd set PATH=C:\instantclient_10_2;%PATH% ``` - 在 Linux/MacOS 上: ```bash export ORACLE_HOME=/path/to/instantclient_10_2 export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH ``` 3. **创建软链接(仅限 Unix/Linux 系统)**: 若计划通过 OCI 接口连接数据库,则需要为共享库文件建立符号链接: ```bash ln -s /path/to/libclntsh.so.10.1 /path/to/libclntsh.so ln -s /path/to/libocci.so.10.1 /path/to/libocci.so ``` 4. **TNS 名字解析(可选)**: 如果采用 TNS 方式连接数据库,需在 `$ORACLE_HOME/network/admin` 目录下创建或编辑 `tnsnames.ora` 文件,并定义目标数据库的服务名称[^3]。 #### 使用说明 以下是几种常见的场景及其对应的解决方案: 1. **通过 Navicat 连接 Oracle9i**: - 当使用 Navicat for Oracle 或 Navicat Premium 时,可以选择 Basic 或 TNS 类型作为连接模式[^1]。 - Basic 模式的实现依赖于 OCI;而 TNS 模式则进一步利用了 `tnsnames.ora` 中预设的别名条目。 2. **Java 应用程序集成**: Java 开发环境中可以通过 OCCI(Oracle Call Interface C++ Library)或其他第三方驱动器间接调用 Instant Client 提供的功能[^4]。具体操作包括加载本地库路径及初始化必要的会话参数。 3. **命令行工具 sqlplus 测试**: 解压后的 Instant Client 同样附带了一个简化版的 sqlplus 实现,允许开发者快速验证网络可达性和认证机制的有效性。启动方法类似于常规安装流程: ```bash ./sqlplus system/password@//hostname:port/service_name ``` --- ### 示例代码片段 下面展示如何基于 Python 调用 cx_Oracle 扩展模块并通过 Instant Client 构建与远端 Oracle9i 数据库之间的交互逻辑: ```python import cx_Oracle dsn_tns = cx_Oracle.makedsn('host', 'port', service_name='service_name') connection = cx_Oracle.connect(user='username', password='password', dsn=dsn_tns) cursor = connection.cursor() cursor.execute("SELECT * FROM dual") for result in cursor.fetchall(): print(result) cursor.close() connection.close() ``` 此脚本假设已成功部署好所需的 Instant Client 组件并调整完毕相关环境设定。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值