对于访问频繁的生产库进行线上变更操作是比较危险的,因为倘若变更失败将导致对象失效不可用,严重影响应用。
1 对package 中所有sql语句进行review,查看它们的执行计划,确认是否合理。 IM@im1>select owner,name,type,DEPENDENCY_TYPE
3 where REFERENCED_OWNER like upper('%&REFERENCED_OWNER_like%')
4 and REFERENCED_NAME like upper('%&REFERENCED_NAME_like%')
5 and REFERENCED_TYPE like upper('%&REFERENCED_TYPE_like%')
6 and type!='PACKAGE BODY';
3 查看发布前对象的有效个数和无效个数以便前后对比 IM@im1>select object_type,status,count(*) from user_objects group by object_type,status;
OBJECT_TYPE STATUS COUNT(*)
------------------ ------- ----------
为防止新的包发布不成功,必须将旧的包放在服务器上,当发布失败时,立即执行旧的包,进行操作回滚。
@/tmp/IM_SMS_20110727.pkg
6 再次检查对象的有效个数和无效个数,检测是否变更成! IM@im1>select object_type,status,count(*) from user_objects group by object_type,status;
OBJECT_TYPE STATUS COUNT(*)
------------------ ------- ----------
7 如果有无效对象在使用utlrp.sql 进行修复 以sysdba登录数据库执行: 8 如果该包被频繁执行,还有监控系统未来30分钟内是否正常!