写在前面,纵然被级别比我高技术比我好的开发诋毀千万次,我还是在一平台负责人模仿我的开发故开发这件事中获得了一些安慰:其实我技术还是可以的,他们也没什就是一个个普通人。
今天上午发现CTM生产环境我的一个作业报错。
Job failure message ORA-04063: packageody" DWAPP包名"has errors
ORA-06508: PL/SQL could not find program unit being called: "DWAPP 包名"
ORA-06512. at line 1
显示不能找到这个包,对于这个报错处理步骤分为三步:
一、经查发现包依然在数据库中。
SELECT FROM DBA_SOURCE WHERE NAME='包名' ORDER BY TYPE,LINE;
二、查询下包是否失效。
SELECT* FROM DBA_OBJECTS WHERE OBJECT_NAME IN(包名1,包名2);
三、一般的处理办法是:
重新编译包: ALTER PACKAGE WKSYS.WK UTIL COMPILE BODY;或者在在 PLSQL右击对象 recompile修复。
但此次,试在生产环境执于里面的程序,出现了程序来源表主表需要用的些来源字段无效,或是在本次上线的时候改表的负责人删除了相关字段或重新做了命名。查得共5个字段无效:CONTRACT_NUMBER,CIS_NUMBER,LAST_UPDATED_BY,CREATED_BY,PART_TYPE。
查看来源视图,发现该视图名有对应两个用户,除了之前我们用的 DWRFIN,还多了一个在上周未上线的 DWREBG用户。同义词指向了新用户的表结构,因而导致报错。
SELECT FROM DBA_VIEWS WHERE VIEW_NAME='对象名';
SELECT FROM DBA_SYNONYMS WHERE SYNONYM_NAME='对象名';
最后采用的解决措施是在程序的来源表前加上 SCHEMA,变更代码当天部署上去,在CTM做 RERUN修正即可。
网友评论