尝试查询表 AVC 时,我突然开始收到此错误。
ORA-04045: errors during recompilation/revalidation of PUBLIC.AVC
ORA-04098: trigger 'TTMS.ALTERED_TTMSDB_TABS_TRIGGER' is invalid and failed re-validation
select * from avc
不起作用但
select * from exfc.avc
确实有效。谁能告诉我这是怎么回事?
最佳答案
据推测,您的架构中没有名为 AVC
的对象。当您在没有模式限定符的情况下引用 AVC
时,它因此正在访问具有该名称的 PUBLIC
对象。要找出是什么类型的对象,请使用 SELECT object_type FROM all_objects WHERE object_name='AVC' AND owner='PUBLIC'
。
无论是什么,查询它都是出于某种原因导致触发器触发。也许这是某种审计功能。但目前触发器无效。这可能意味着有人修改了触发器本身但犯了错误;或者这可能意味着有人删除或修改了触发器所依赖的其他对象,从而使触发器代码不再有效。
因此,负责该触发器的人需要找出其编译中发生的错误并解决它。
当您显式查询 EXFC.AVC
时,您将绕过 PUBLIC
对象并直接转到某个底层对象,可能是一个实际的表。您可以访问它似乎很奇怪,因为通过公共(public)同义词路由访问的整个点通常是为了防止直接访问对象。事实上,如果触发器的目的是审计对表的访问,那么允许您完全绕过它是一个相当大的设计缺陷。
关于oracle - ORA-04045 : errors during recompilation/revalidation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9623769/