如何解决ORACLE 9I高级队列不能及时同步
在某公司配置的高级队列执行数据同步时失败,以下是报错内容和数据库环境:
数据库版本:ORACLE 9I;
job_no:1059/1061/1062(在ORACLE 9I的环境下,配置完高级队列后,会自动在DBMS_JOB下新建job用于同步数据);
job作用:同步不同QTABLE之间的数据,例如从ERP同步到WMS;
job运行报错信息(来源-alert_BBK40.log):
ORA-12012: 自动执行作业 1059 出错
ORA-06550: 第 1 行, 第 10 列:
PLS-00306: 调用 'UPDATE_SCHEDULE' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 10 列:
PL/SQL: Statement ignored
ORA-06550: 第 1 行, 第 10 列:
PLS-00306: 调用 'UPDATE_SCHEDULE' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 10 列:
PL/SQL: Statement ignored
ORA-06550: 第 1 行, 第 10 列:
PLS-00306: 调用 'UPDATE_SCHEDULE' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 10 列:
PL/SQL: Statement ignored
ORA-06512: 在"SYS.DBMS_AQADM_SYS", line 5636
ORA-06512: 在"SYS.DBMS_AQADM_SYS", line 6061
ORA-06512: 在"SYS.DBMS_AQADM", line 895
ORA-06512: 在line 1
job运行报错信息说明:
UPDATE_SCHEDULE是高级队列相关的包dbms_prvtaqip下面的一个存储过程,代码不可见;
job虽然执行失败,但数据是可以同步过去的;
备注:
该数据库是该公司的ERP数据库环境,数据库可能做了某些特殊的基础修改才导致这样的问题;
解决方法(该方法只是一临时方法,不能从根本上解决问题):
另创建一JOB,对高级队列相关job进行相关数据的更新,执行频率:每分钟一次。
CREATE OR REPLACE PROCEDURE queue_jobs_correct IS
BEGIN
UPDATE dba_jobs t
SET t.FAILURES = 0,t.interval = 'sysdate + 1/1440'
WHERE t.WHAT = 'next_date := sys.dbms_aqadm.aq$_propaq(job);'
AND t.BROKEN = 'N'
AND t.FAILURES!=0;
COMMIT;
END;