ORACLE的procedure突然需要重新编译是为什么?

问题1.oracle中,正常使用的procedure,过段时间,就不能调用了,在数据库工具中有个小红叉,然后重新编译下就有好了,这是为什么;问题2.正常使用的package,突然报错ORA-04027:self-deadlock during automatic validation for object FRDB.JOB_CONFIG_PKG,然后重新编译下,就好了,这是为什么?
我想过可能是 我前两天在一个表里新增了字段导致的,但是 一些没有用到这个表的procedure也需要重新编译,那个package也没有用的这张表,也报错了
我想知道具体是啥原因,以后怎么避免这些问题,请懂的解答下,谢谢

过程中所引用的对象是否被经常修改?

主要排查方向ddl、alert、truncate

给表加字段,会导致相关视图等都失效。但调用时oracle会自动编译,大部分都会自动正常。
有编译不过去的会报错,比如procedure依赖的对象没有正常,procedure会显示失效。如果依赖对象正常了,编译就可以正常。
底层依赖对象失效,oracle不会触发让上层对象失效,所以procedure仍显示有效。但procedure实际调用时,要到底层依赖对象失效,不能自动编译底层对象使其正常有效,procedure会报错而且失效。重新执行或手动编译一般会正常。
正常使用的package调用对象底层依赖对象失效,自动编译时会有pin,可能会出现死锁。
重新执行或手动编译一般会正常。手动编译不能通过的要看具体错误原因了。
另外物化视图失效常见于非自动刷新物化视图,不影响其查询,可不关注。虽然compile使其有效,但主表数据变化,物化视图随即又失效。

重新编译肯定是文件被修改了,或者被删除了